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

最近遇到一个中文实体分析的问题,之前也接触了一些关于中文文本处理的方法和工具,如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 StanfordCoreNLP

nlp = 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 = 0
name = ''
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)







你可能感兴趣的:(python,nlp)