pyltp python具体使用

本文详细介绍如何使用LTP工具包进行中文文本的分词、词性标注、命名实体识别及依存句法分析等自然语言处理任务。通过具体代码示例,展示了从加载模型到解析结果的全过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

import re
from pyltp import NamedEntityRecognizer
from pyltp import SementicRoleLabeller
from pyltp import Parser
from pyltp import Postagger
def ltp_segmentor(sentence):
    """ 分割字符串 """
    segmentor = Segmentor()
    cws_model_path = '..\\ltp_data\\cws.model'
    lexicon_path = '..\\ltp_data\\lexicon.txt'
    segmentor.load_with_lexicon(cws_model_path, lexicon_path)
    segmentor.load(cws_model_path)
    words = segmentor.segment(sentence)
    segmentor.release()
    return list(words)

def extract_data():
    parser = Parser()  # 初始化模型
    postagger = Postagger() # 词性标注
    labeller = SementicRoleLabeller() # 语义校色标注
    recognizer = NamedEntityRecognizer() # 命名实体识别

    model_path = '..\\ltp_data\\pos.model'
    lexicon_path = '..\\ltp_data\\posLexicon.txt'
    postagger.load_with_lexicon(model_path, lexicon_path) # 加载自定义词性表

    labeller.load('..\\ltp_data\\pisrl_win.model') # 加载模型
    recognizer.load('..\\ltp_data\\ner.model')
    postagger.load('..\\ltp_data\\pos.model')
    parser.load('..\\ltp_data\\parser.model')

    content = "#•江都建设集团南京分公司南钢项目部安全生产规章制度不落实,作业现场安全管理缺失,安全操作规程不认真执行"
    text = re.sub("[#•]", "", content) # 对语句进行预处理
    words = sc_fun.ltp_segmentor(text) # 分词
    postags = postagger.postag(words)
    arcs = parser.parse(words, postags)
    netags = recognizer.recognize(words, postags) # 命名实体识别
    print(list(netags))
    rely_id = [arc.head for arc in arcs]
    relation = [arc.relation for arc in arcs] # 关系
    heads = ['Root' if id == 0 else words[id - 1] for id in rely_id]
    roles = labeller.label(words, postags, arcs)
    for i in range(len(words)):
        print(i, relation[i], (words[i], heads[i]), postags[i])
    for role in roles:
        print([role.index, "".join(["%s:(%d,%d)" % (arg.name, arg.range.start, arg.range.end) for arg in role.arguments])])

    labeller.release()  # 释放模型
    parser.release()
    postagger.release()
    recognizer.release()
if __name__ == '__main__':
    extract_data()

结果:

['B-Ni', 'I-Ni', 'I-Ni', 'I-Ni', 'I-Ni', 'I-Ni', 'E-Ni', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O','O', 'O', 'O', 'O', 'O', 'O']
0 ATT ('江都', '集团') ns
1 ATT ('建设', '集团') v
[11, 'A1:(0,9)ADV:(10,10)']
[24, 'A1:(19,21)ADV:(22,23)']

 

分开封装一样的:

def ltp_segmentor(sentence):
    """ 分割字符串 """
    segmentor = Segmentor()
    segmentor.load('..\\ltp_data\\cws.model')
    words = segmentor.segment(sentence)
    segmentor.release()
    return list(words)

def ltp_parser(words, postags):
    parser = Parser()
    parser.load('..\\ltp_data\\parser.model')
    arcs = parser.parse(words, postags)
    parser.release()
    return list(arcs)

def ltp_postags(words):
    postagger = Postagger()
    model_path = '..\\ltp_data\\pos.model'
    lexicon_path = '..\\ltp_data\\posLexicon.txt'
    postagger.load_with_lexicon(model_path, lexicon_path)  # 加载自定义词性表
    postagger.load(model_path)
    postags = postagger.postag(words)
    postagger.release()
    return list(postags)

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值