用Python+StanfordCoreNLP做中文命名实体分析

来源:互联网 发布:淘宝学生女装店 知乎 编辑:程序博客网 时间:2024/05/29 10:05

最近遇到一个中文实体分析的问题,之前也接触了一些关于中文文本处理的方法和工具,如jieba分词,分词用着还行,但是这次遇到实体分析就有点懵逼了!!!还好找到了斯坦福的一个开源工具包StanfordCoreNLP。下面就来介绍怎么玩,只针对中文,如果对其它的用法感兴趣,开源访问这里


开始安装:

首先要下载两个包,这个应该是斯坦福大学训练好的关于处理中文自然语言处理的模型,两个文件1G左右。

地址:StanfordCore NLP文件,我下载时是这个版本stanford-corenlp-full-2017-06-09

  中文处理包,DOWNLOAD ,不知道这个文件要不要配置Java环境,因为我之前安装了Java环境的,我运行时没有出错。

上面两文件下载完成后,将StanfordCore NLP文件解压,然后再将 中文处理包 复制到StanfordCore NLP文件解压后的文件根目录下即可。

最后安装Python的stanfordnlp库,pip install stanfordnlp


OK!!都安装好了,跑起来吧!!!

from stanfordcorenlp import StanfordCoreNLPnlp = StanfordCoreNLP(r'D:\360Downloads\stanford-corenlp-full-2017-06-09/', lang='zh')sentence = '我是重庆工商大学的一名学生'# print(nlp.word_tokenize(sentence))# print(nlp.pos_tag(sentence))print(nlp.ner(sentence))# print(nlp.parse(sentence))# print(nlp.dependency_parse(sentence))


说明:Python3.6,Windows7,8G运行内存(运行时有点耗内存)

首先导入所需要的库,再看到nlp的量参数,第一个是你上面StanfordNLP文件解压后的路径,第二个是指定中文,当然还可以指定其他的语言,自己参考源码!
结果:(中文实体的结果)

[('我', 'O'), ('是', 'O'), ('重庆', 'ORGANIZATION'), ('工商', 'ORGANIZATION'), ('大学', 'ORGANIZATION'), ('的', 'O'), ('一', 'NUMBER'), ('名', 'O'), ('学生', 'O')]

可以看出 “重庆工商大学” 这个实体是能判断出来的,'ORGANIZATION'表示实体。


这个是中文分词用的,和jieba类似,不知道那个更好,有时间可以测试一下;

nlp.word_tokenize(sentence)
这个应该是词性标签,结巴也有;

print(nlp.pos_tag(sentence)
这个是解析语法的,结巴好像没有;

nlp.parse(sentence)
这个是解析语法关系的,结巴不知道没有。

nlp.dependency_parse(sentence)


之后又测试了一些例子,效果还不错,不得不说人家真的是斯坦福出来的得意得意


最后判断出中文实体来了,怎么把他们有效的结合到一起:

res = nlp.ner(sentence)tag = 0name = ''labels = []for i in range(len(res)):    if res[i][1] != 'ORGANIZATION':        if tag != 0:            labels.append(name)            name = ''            tag = 0    else:        tag = 1        name += res[i][0]print(res)print(labels)







原创粉丝点击