Nltk stanford pos tagger error: Java 命令失败



我正在尝试使用nltk.tag.stanford module来标记句子(首先像wiki的示例),但是我不断收到以下错误:

Traceback (most recent call last):
  File "test.py", line 28, in <module>
    print st.tag(word_tokenize('What is the airspeed of an unladen swallow ?'))
  File "/usr/local/lib/python2.7/dist-packages/nltk/tag/stanford.py", line 59, in tag
    return self.tag_sents([tokens])[0]
  File "/usr/local/lib/python2.7/dist-packages/nltk/tag/stanford.py", line 81, in tag_sents
    stdout=PIPE, stderr=PIPE)
  File "/usr/local/lib/python2.7/dist-packages/nltk/internals.py", line 160, in java
    raise OSError('Java command failed!')
OSError: Java command failed!

或以下LookupError错误:

LookupError: 
===========================================================================
NLTK was unable to find the java file!
Use software specific configuration paramaters or set the JAVAHOME environment variable.
===========================================================================

这是示例代码:

>>> from nltk.tag.stanford import POSTagger
>>> st = POSTagger('/usr/share/stanford-postagger/models/english-bidirectional-distsim.tagger',
...                '/usr/share/stanford-postagger/stanford-postagger.jar') 
>>> st.tag('What is the airspeed of an unladen swallow ?'.split()) 

我也用word_tokenize代替split但它没有任何区别。

我也再次安装了java或jdk!我所有的搜索都没有成功!类似于nltknltk.internals.config_java()或...!

注意:我使用linux(Xubuntu)!

如果你通读了nltk/internals中的嵌入式文档.py(第58-175行),你应该很容易找到你的答案。NLTK 需要 Java 二进制文件的完整路径。

如果未指定,则 nltk 将在系统中搜索 Java 二进制文件; 如果未找到,它将引发 LookupError 异常。

根据一些研究,我相信您有几个选择:

1)将以下代码添加到您的项目中(不是一个很好的解决方案)

import os
java_path = "path/to/java" # replace this
os.environ['JAVAHOME'] = java_path

2)卸载并重新安装NLTK(最好在虚拟环境中)(更好,但仍然不是很好)

pip uninstall nltk
sudo -E pip install nltk

3)设置java环境变量(这是IMO最实用的解决方案)

编辑系统路径文件/etc/profile

sudo gedit /etc/profile

在末尾添加以下行

JAVA_HOME=/usr/lib/jvm/jdk1.7.0
PATH=$PATH:$HOME/bin:$JAVA_HOME/bin
export JAVA_HOME
export JRE_HOME
export PATH

我在第一次使用 NLTK 时也遇到了这个问题。在这个问题上花费了几个小时后,我终于设法让它工作了。

这就是我所做的:

  1. 卸载并重新安装 nltk 软件包
  2. 添加JAVAHOMEJAVA_HOME环境变量变量(在我的例子中,C:Program FilesJavajdk1.8.0_241bin
  3. 将值 ( C:Program FilesJavajdk1.8.0_241bin ) 也添加到Path环境变量中。

并且,自然地,重新启动您的终端。

这在Windows 7 64位上对我有用。

最新更新