【segmentation & parsing & dependency parsing & NER】nltk调用stanford NLP工具包

环境:win 7 + python 3.5.2 + nltk 3.2.1


中文分词

前期准备
下载stanford-segmenter-2015-12-09(2016版的stanford segmenter与nltk接口不兼容),解压,将根目录下的stanford-segmenter-3.6.0.jar,slf4j-api.jar,data文件夹拷贝到某个文件夹下,我将它们放在了E:/stanford_jar下。

windows环境下需要修改nltk接口
将YOUR_PYTHON_PATH\Lib\site-packages\nltk\tokenize\stanford_segmenter.py第63行的
self._stanford_jar = ":".join(
修改为
self._stanford_jar = os.pathsep.join(

测试代码

from nltk.tokenize import StanfordSegmenter

if __name__ == "__main__":
	segmenter = StanfordSegmenter(path_to_jar="E:/stanford_jar/stanford-segmenter-3.6.0.jar",
                                  path_to_slf4j="E:/stanford_jar/slf4j-api.jar",
                                  path_to_sihan_corpora_dict="E:/stanford_jar/data",
                                  path_to_model="E:/stanford_jar/data/pku.gz",
                                  path_to_dict="E:/stanford_jar/data/dict-chris6.ser.gz")
    result = segmenter.segment("你叫什么名字")
    print(result)#result是一个str,以空格分隔词

运行结果
你 叫 什么 名字

stanford segmentation运行起来很慢,个人觉得使用jieba会更好。


句法分析在分析单个词的词性的基础上,尝试分析词与词之间的关系,并用这种关系来表示句子的结构。实际上,句法结构可以分为两种,一种是短语结构,另一种是依存结构。前者按句子顺序来提取句法结构,后者则按词与词之间的句法关系来提取句子结构。

基于短语结构的剖析

前期准备
下载stanford-parser-full-2016-10-31,解压,对根目录下的stanford-parser-3.7.0-models.jar解压得到stanford-parser-3.7.0-models,进入stanford-parser-3.7.0-models\edu\stanford\nlp\models\lexparser,将chinesePCFG.ser.gz拷贝到某个文件夹下,我将它放在了E:/stanford_jar。同时,我将根目录下的stanford-parser.jar和stanford-parser-3.7.0-models.jar也放在了E:/stanford_jar

测试代码

import os
from nltk.parse import stanford

if __name__ == "__main__":
	os.environ['STANFORD_PARSER'] = 'E:/stanford_jar/stanford-parser.jar'
    os.environ['STANFORD_MODELS'] = 'E:/stanford_jar/'
    parser =  stanford.StanfordParser(model_path="E:/stanford_jar/chinesePCFG.ser.gz", encoding="gb2312")
    result = parser.parse("你 叫 什么 名字".split())#parsing的句子需要先分好词
    print(list(result ))

运行结果

[Tree('ROOT', [Tree('IP', [Tree('NP', [Tree('PN', ['你'])]), Tree('VP', [Tree('VV', ['叫']), Tree('NP', [Tree('DP', [Tree('DT', ['什么'])]), Tree('NP', [Tree('NN', ['名字'])])])])])])]

基于依存关系的剖析
测试代码

from nltk.parse.stanford import StanfordDependencyParser

if __name__ == "__main__":
	os.environ['STANFORD_PARSER'] = 'E:/stanford_jar/stanford-parser.jar'
    os.environ['STANFORD_MODELS'] = 'E:/stanford_jar/'
    eng_parser = StanfordDependencyParser(model_path="E:/stanford_jar/chinesePCFG.ser.gz",encoding="gb2312")
    res = list(eng_parser.parse("你 叫 什么 名字".split()))
    for row in res[0].triples():
        print(row)

结果

(('叫', 'VV'), 'nsubj', ('你', 'PN'))
(('叫', 'VV'), 'dobj', ('名字', 'NN'))
(('名字', 'NN'), 'det', ('什么', 'DT'))

命名实体识别是指识别句子中的人名、地名、机构名、时间、日期、货币、百分比等成分。

NER

前期准备
下载stanford-ner-2018-10-16,解压,将根目录下的stanford-ner.jar拷贝到某个文件夹下,我将它放在了E:/stanford_jar。此外,还需要下载中文模型,http://nlp.stanford.edu/software/stanford-chinese-corenlp-2018-10-05-models.jar,解压,将其中的stanford-chinese-corenlp-2018-10-05-models\edu\stanford\nlp\models\ner下的*.ser.gz 文件都拷贝到E:/stanford_jar中。

测试代码

import os
import jieba
from nltk.tag import StanfordNERTagger

if __name__ == "__main__":
	os.environ['CLASSPATH'] = 'E:/stanford_jar/stanford-ner.jar'
    os.environ['STANFORD_MODELS'] = 'E:/stanford_jar/'
    zh_tagger = StanfordNERTagger('chinese.kbp.distsim.crf.ser.gz')
    sen = list(jieba.cut("全球除中国外疫情将呈海啸般态势"))
    result = zh_tagger.tag(sen)
    print(result)

结果

[('全球', 'O'), ('除', 'O'), ('中国', 'GPE'), ('外', 'O'), ('疫情', 'O'), ('将', 'O'), ('呈', 'O'), ('海啸', 'O'), ('般', 'O'), ('态势', 'O')]
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值