stanfordcorenlp识别中文人名实战记录及心得

前言:

        一直在找一个能够精确识别中文人名的自然语言处理工具包,期间也找到了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 StanfordCoreNLP

nlp = 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的方法还请指正.

猜你喜欢

转载自blog.csdn.net/Smile_Lai/article/details/127126609