斯坦福依赖解析器设置和NLTK

时间:2015-12-02 21:08:46

标签: python nlp nltk stanford-nlp

所以我得到了#34;标准" Stanford Parser工作,感谢危险89对前一篇文章Stanford Parser and NLTK的答案。

但是,我现在正试图让依赖解析器工作,似乎前一个链接中突出显示的方法不再有效。这是我的代码:

import nltk
import os
java_path = "C:\\Program Files\\Java\\jre1.8.0_51\\bin\\java.exe" 
os.environ['JAVAHOME'] = java_path


from nltk.parse import stanford
os.environ['STANFORD_PARSER'] = 'path/jar'
os.environ['STANFORD_MODELS'] = 'path/jar'
parser = stanford.StanfordDependencyParser(model_path="path/jar/englishPCFG.ser.gz")

sentences = parser.raw_parse_sents(nltk.sent_tokenize("The iPod is expensive but pretty."))

我收到以下错误: ' module'对象没有属性' StanfordDependencyParser'

我唯一改变的是" StanfordDependencyParser"来自" StanfordParser"。我有什么想法可以让它发挥作用吗?

我还尝试了Stanford Neural Dependency解析器,如下面的文档中所示:http://www.nltk.org/_modules/nltk/parse/stanford.html

这个也不起作用。

NLTK很新。提前感谢任何有用的输入。

2 个答案:

答案 0 :(得分:6)

StanfordDependencyParser API是自NLTK 3.1版以来创建的新类对象。

确保您通过pip

获得最新的NLTK
pip install -U nltk

或通过你的linux包管理器,例如:

sudo apt-get python-nltk

或在Windows中,下载https://pypi.python.org/pypi/nltk并安装,它应该覆盖以前的NLTK版本。

然后您可以使用文档中显示的API:

from nltk.parse.stanford import StanfordDependencyParser
dep_parser=StanfordDependencyParser(model_path="edu/stanford/nlp/models/lexparser/englishPCFG.ser.gz")
print [parse.tree() for parse in dep_parser.raw_parse("The quick brown fox jumps over the lazy dog.")]

[OUT]:

[Tree('jumps', [Tree('fox', ['The', 'quick', 'brown']), Tree('dog', ['over', 'the', 'lazy'])])]

(注意:请确保您获取jar的路径,os.environ正确,在Windows中,它是something\\something\\some\\path,在unix中是something/something/some/path

另请参阅https://github.com/nltk/nltk/wiki/Installing-Third-Party-Software#stanford-tagger-ner-tokenizer-and-parser以及何时需要TL; DR解决方案,请参阅https://github.com/alvations/nltk_cli

答案 1 :(得分:0)

如果您更改的唯一内容是'StanfordDependencyParser'并且错误说明:module' object has no attribute 'StanfordDependencyParser'我会认为StanfordDependencyParser是错误的,将其更改为。您是否复制了所有链接到逐字的代码?

相关问题