前言:
一直在找一个能够精确识别中文人名的自然语言处理工具包,期间也找到了stanfordcorenlp, 并且经过在网上的大量摸坑探索之后,还是成功使用上了stanfordcorenlp,但是经过后期比较后,发现精确度还是没有达到满意的效果,后期发现了精度更高一些的jieba和paddlehub, 但还是把这次的摸索做个记录
一,简介
stanfordcorenlp是一个自然语言处理工具包, 提供了一套人类语言技术工具。支持多种自然语言处理基本功能,它集成了很多非常实用的功能,包括分词,词性标注,句法分析等 ,Stanfordcorenlp是它的一个python接口
官网地址:https://stanfordnlp.github.io/CoreNLP/
Github地址:https://github.com/stanfordnlp/CoreNLP
下载地址: https://nlp.stanford.edu/software/corenlp-backup-download.html
二,下载及安装
前言: 安装前需要设置Java环境,就是下载jdk包, 设置环境变量这些,目前这个包我配的是 java1.8.0_271
当前电脑环境: Python3.7.2+Windows10 64位
1.下载python接口的stanfordcorenlp包, 目前使用3.9.1版本, 使用更稳定,最新的4.x版本可能会遇到错误:
配置好pip后在命令行输入pip install stanfordcorenlp==3.9.1,直接就下载成功
2.下载StanfordCoreNLP压缩包, 跟步骤1的包不一样,这是StanfordCoreNLP源软件包, 进入网站https://nlp.stanford.edu/software/corenlp-backup-download.html,如下图
右击Download CoreNLP 3.9.1 如下图,复制链接地址,在新的空白页打开,如下图
把下载好的压缩包解压后放在Python包的lsit-packages文件夹,
建议改个名,我这里改名为stanfordnlp
如果发现包太小,只有几十kb,可能是由于网络的原因,导致下载不完全,这时建议到GitHub下载
3.接下来下载中文语言包,还是建议到gihub或者官网下载
GitHub - stanfordnlp/CoreNLP: Stanford CoreNLP: A Java suite of core NLP tools.github.com/stanfordnlp/CoreNLP正在上传…重新上传取消https://link.zhihu.com/?target=https%3A//github.com/stanfordnlp/CoreNLP
4.将下载的中文语言包放在刚刚改名的stanfordnlp文件夹下就按照完毕可以使用了
三,使用
1.导包: from stanfordcorenlp import StanfordCoreNLP
2.定义StanfordCoreNLP对象,注意路径是改名后的stanfordnlp文件夹的绝对路径, 语言选择中文
from stanfordcorenlp import StanfordCoreNLPnlp = StanfordCoreNLP(r"C:\Users\l84171088\AppData\Local\Programs\Python\Python37\Lib\site-packages\stanfordnlp", lang = "zh")
string_ner = nlp.ner('钟伟政党员组织关系回执')
string_ner1 = nlp.ner('钟伟政党员组织关系回执给阳莉')
string_ner2 = nlp.ner('回执+张颖+002466445')
string_ner
Out[5]: [('钟伟政', 'PERSON'), ('党员', 'O'), ('组织', 'O'), ('关系', 'O'), ('回执', 'O')]string_ner1
Out[6]:
[('钟伟政', 'PERSON'),('党员', 'O'),('组织', 'O'),('关系', 'O'),('回执', 'O'),('给', 'O'),('阳莉', 'O')]string_ner2
Out[7]: [('回执', 'O'), ('+', 'O'), ('张颖+002466445', 'PERSON')]
3.实测总结: 通过string_ner的结果发现要识别的人名'钟伟政'还是识别出来了,可以通过词性标注的'PERSON'获取到, 但是接下来多加了一个人名之后,string_ner1的结果的第二个人名没有识别为'PERSON',到了第三个结果,甚至识别出来的人名还有符号和数字,纳尼,为什么这么不准?只能说模型准确率不够,毕竟这个包是国外这边开发的,不精通汉语的语义吧,还有可能中文包的姓名不够全
4.总体来说,StanfordCoreNLP对于中文人名的识别,个人觉得准确率不够,而且安装步骤复杂,中间很容易出错,对于有高精度的识别的需求就不适用了,如果还有更好的关于StanfordCoreNLP的方法还请指正.