我正在尝试使用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 时也遇到了这个问题。在这个问题上花费了几个小时后,我终于设法让它工作了。
这就是我所做的:
- 卸载并重新安装 nltk 软件包
- 添加
JAVAHOME
和JAVA_HOME
环境变量变量(在我的例子中,C:Program FilesJavajdk1.8.0_241bin
) - 将值 (
C:Program FilesJavajdk1.8.0_241bin
) 也添加到Path
环境变量中。
并且,自然地,重新启动您的终端。
这在Windows 7 64位上对我有用。