python命名实体识别⼯具包结巴_分词、词性标注、命名实体识别、句法分析?三⾏Pytho。。。
⼯具简介
对⽂本进⾏处理或分析时,我们往往会对其进⾏分词、词性标注等。⽬前开源可⽤的⼯具有Jieba、HanLP、ltp等。今天要介绍⼀款来⾃斯坦福NLP研究组的⾼质量的开源⾃然语⾔处理⼯具 Stanford CoreNLP,主要功能有分词、词性标注、命名实体识别、短语结构分析、依存句法分析。
相较于市⾯上较为流⾏的⾃然语⾔处理⼯具,Stanford CoreNLP主要有以下优势:训练语料标注质量较⾼,中英⽂语料来⾃著名的宾州树库,因⽽⾃动标注的质量也较好,适⽤于对标注准确率要求较⾼的领域,如语⾔学研究等。
⼀站式服务,该⼯具集成了⾃然语⾔处理的常⽤功能。
性能⾼,⽀持并⾏(多条句⼦同时)分析。
但Stanford CoreNLP是⽤Java编写的,调⽤较为复杂,因此我将python调⽤⽅式进⾏了封装,并发布了pip包(corenlp-client),⽅便⽤户使⽤。安装⽅式为:
pip install corenlp_client
clonenode(true)方法的作用快速⼊门
调⽤该⼯具对⽂本进⾏分词,只需3⾏代码:
from corenlp_client import CoreNLP # 导⼊CoreNLP类
annotator = CoreNLP(url="corenlp.run", lang="zh") # 创建标注器对象
kenize("今天天⽓不错!我想去故宫博物院。")) # 分词
返回的是⼀个分词后的句⼦列表:
[['今天', '天⽓', '不错', '!'], ['我', '想', '去', '故宫', '博物院', '。']]
如果不想进⾏分句,可指定ssplit参数为False:
kenize("今天天⽓不错!我想去故宫博物院。",ssplit=False))
返回的就是分词列表:
['今天', '天⽓', '不错', '!', '我', '想', '去', '故宫', '博物院', '。']
python入门教程网盘词性标注/命名实体识别:
annotator.pos_tag("今天天⽓不错!我想去故宫博物院。")
<("今天天⽓不错!我想去故宫博物院。")
结果如下(词性标注的格式与分词⼀致,命名实体每句的元素是⼀个字典,key为实体和实体的token span构成的元组,⽅便对应分词后的结果,value为实体类别):
[['NT', 'NN', 'VA', 'PU'], ['PN', 'VV', 'VV', 'NR', 'NN', 'PU']]
[[{('今天', (0, 1)): 'DATE'}], [{('故宫博物院', (3, 5)): 'FACILITY'}]]
本地调⽤
上⽂介绍的调⽤CoreNLP的⽅式都是调⽤在线的api,由于⽹络延迟等原因,返回结果的速度较慢且可能会因⽹络问题断连。因此,推荐使⽤本地启动CoreNLP Server后,再进⾏调⽤。安装Java
需要注意的是,启动CoreNLP Server前您的电脑必须安装Java 8。Java 8的安装⾮常简单,可以通过访问官⽹下载(速度可能会慢⼀些),或通过我分享的⽹盘链接下载安装即可。
织梦内容管理系统默认密码(安装完成后在可通过命令⾏中输⼊java -version确认安装成功)
2. 下载模型
Java安装成功后,分别下载CoreNLP官⽹提供的压缩包及相应的语⾔的模型(如果想对中⽂进⾏处理则下载中⽂),然后将中⽂模型(.jar⽂件)放⼊解压后的CoreNLP压缩包中即可。官⽅的下载源在国外,速度较慢。国内⽤户可以通过我的⽹盘链接下载,链接提供的压缩包已包含了中⽂和英⽂的模型,⽆需额外下载。
CoreNLP官⽹下载地址:Download
3. 启动CoreNLP Server
启动Server的⽅式有两种,⼀种是通过命令⾏⽅式启动,官⽹有详细的启动说明(CoreNLP Server),操作⽅法是打开命令⾏(windows下的命令提⽰符或linux/Mac下的Terminal),输⼊以下命令即可(具体使⽤说明请参看官⽅⽂档)。⽤该命令启动Server后,可通过上⽂提到的指定url参数的⽅式调⽤本地的api。xml应用软件
java -mx4g -cp "*" edu.stanford.nlp.pipeline.StanfordCoreNLPServer -port 9000 -timeout 15000
对于⼊门⽤户,推荐使⽤第⼆种启动⽅式,即利⽤我提供的pip包在python中直接启动Server并对语料进⾏处理,⽰例的python代码如下。其中,annotators参数指定的是启动Server时要加载什么标注器,常⽤的有:tokenize(分词),ssplit(分句),pos(词性标
注),ner(命名实体识别),parse(成分句法分析),deparse(依存句法分析)。这⾥加载的是分词、分句。不同的标注器⽤逗号隔开。不同语⾔⽀持的标注器可参看(Using CoreNLP on other human languages)。
from corenlp_client import CoreNLP
corenlp_dir = "/path/to/corenlp" # 这⾥填写CoreNLP压缩包解压后的路径
with CoreNLP(annotators="tokenize,ssplit,pos", corenlp_dir=corenlp_dir, lang="zh") as annotator:
kenize("今天天⽓不错!我想去故宫博物院。")) # 在with语句下缩进代码
如果发现内存或CPU占⽤过多,可通过关键字参数限制:
# max_mem: 内存占⽤限制, 默认为4G;threads: 最⼤线程数, 默认为cpu核⼼数。
with CoreNLP(annotators="tokenize", corenlp_dir="/path/to/corenlp", local_port=9000, max_mem=4, threads=2) as annotator:
# your code here
进阶使⽤网站制作的公司
以上介绍了使⽤corenlp_client进⾏分词、分句、词性标注、命名实体识别及如何本地启动CoreNLP Server。对于进阶⽤
java反射获取方法
户,corenlp_client还提供了更多的功能,以便⽤户进⼀步处理:
# 此处省略导⼊包及创建annotator对象的代码
anno = annotator.annotate("CoreNLP is your one stop shop for natural language processing in Java! Enjoy yourself! ")
kens) # tokens,包含分词、词性标注、token级别的ner结果
print(anno.parse_tree) # 成分句法分析
print(anno.bi_parse_tree) # ⼆叉化的成分句法分析
print(anno.basic_dep) # basic依存句法分析
hanced_dep) # enhanced依存句法分析
hanced_pp_dep) # enhanced++依存句法分析
ities) # entitymentions
print(anno.openie) # openie
print(anno.ann_result) # CoreNLP Server的原始返回结果
print(annotator.pretty_print_tree(anno.parse_tree[0])) # 将成分句法分析的结果打印为树结构本项⽬的github地址为:Jason3900/corenlp_client g ithub
欢迎⼤家提供使⽤反馈及意见,当然也欢迎⼿动Star以⽀持本项⽬维护~谢谢!

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。