赞
踩
导入
from pyltp import SentenceSplitter,Segmentor, Postagger, Parser,NamedEntityRecognizer, SementicRoleLabeller
sentence='小勇硕士毕业于北京语言大学,目前在中科院软件所工作。'
SentenceSplitter——————————分句
Segmentor ————————————分词(cws.model)
Postagger—————————————词性标注(pos.model)
Parser——————————————依存句法分析(parser.model)
NamedEntityRecognizer——————命名实体识别 (ner.model)
SementicRoleLabeller———————词义角色标注(pisrl_win.model)
对应如下五个模型
sents = SentenceSplitter.split('语言是人类区别其他动物的本质特性。在所有生物中,只有人类才具有语言能力。')
print(type(sents))
print(list(sents))
输出:
<class 'pyltp.VectorOfString'>
['语言是人类区别其他动物的本质特性。', '在所有生物中,只有人类才具有语言能力。']
segmentor = Segmentor()
segmentor.load("C:/Users/angel/Desktop/text-analysis/model/cws.model")
words=segmentor.segment(sentence)
print(type(words))
words=list(words)
print(words)
segmentor.release()
输出:
<class 'pyltp.VectorOfString'>
['小勇', '硕士', '毕业', '于', '北京', '语言', '大学', ',', '目前', '在', '中科院', '软件所', '工作', '。']
postagger=Postagger()
postagger.load("C:/Users/angel/Desktop/text-analysis/model/pos.model")
postags=postagger.postag(words)
print(type(postags))
postags=list(postags)
print(postags)
postagger.release()
输出;
<class 'pyltp.VectorOfString'>
['nh', 'n', 'v', 'p', 'ns', 'n', 'n', 'wp', 'nt', 'p', 'j', 'n', 'v', 'wp']
parser = Parser()
parser.load("C:/Users/angel/Desktop/text-analysis/model/parser.model")
arcs=parser.parse(words, postags)
print(type(arcs))
for index,i in enumerate(arcs):
print(words[i.head-1],'\t',words[index],'\t',i.relation)
parser.release()
arc.head表示依存弧的父节点词的索引。ROOT节点的索引是0,第一个词开始的索引依次为1,2,3…
arc.relation表示依存弧的关系
输出:
<class 'pyltp.VectorOfParseResult'>
硕士 小勇 ATT
毕业 硕士 SBV
。 毕业 HED
毕业 于 CMP
大学 北京 ATT
大学 语言 ATT
于 大学 POB
毕业 , WP
工作 目前 ADV
工作 在 ADV
软件所 中科院 ATT
在 软件所 POB
毕业 工作 COO
毕业 。 WP
recognizer = NamedEntityRecognizer()
recognizer.load("C:/Users/angel/Desktop/text-analysis/model/ner.model")
recognize_name=recognizer.recognize(words, postags)
print(type(recognize_name))
recognize_name=list(recognize_name)
print(recognize_name)
recognizer.release()
输出:
<class 'pyltp.VectorOfString'>
['S-Nh', 'O', 'O', 'O', 'B-Ni', 'I-Ni', 'E-Ni', 'O', 'O', 'O', 'O', 'O', 'O', 'O']
labeller = SementicRoleLabeller()
labeller.load("C:/Users/angel/Desktop/text-analysis/model/pisrl_win.model")
roles=labeller.label(words, postags, arcs)
print(type(roles))
roles_dict = {}
for role in roles:
roles_dict = [(arg.name, arg.range.start, arg.range.end) for arg in role.arguments]
print(roles_dict)
labeller.release()
输出:
[dynet] random seed: 1509254310
[dynet] allocating memory: 2000MB
[dynet] memory allocation done.
<class 'pyltp.SementicRoles'>
[('TMP', 8, 8), ('LOC', 9, 11)]
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。