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

来源:互联网 发布:铁路抢票软件 编辑:程序博客网 时间:2024/06/18 10:03

环境: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 StanfordSegmenterif __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 osfrom nltk.parse import stanfordif __name__ == "__main__":    os.environ['STANFORD_PARSER'] = 'E:/stanford_jar/stanford-parser.jar'    os.environ['STANFORD_MODELS'] = 'E:/stanford_jar/stanford-parser-3.7.0-models.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 StanfordDependencyParserif __name__ == "__main__":    os.environ['STANFORD_PARSER'] = 'E:/stanford_jar/stanford-parser.jar'    os.environ['STANFORD_MODELS'] = 'E:/stanford_jar/stanford-parser-3.7.0-models.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'))
原创粉丝点击