NLTK无法找到Java可执行文件

22 投票
14 回答
19567 浏览
提问于 2025-04-17 02:13

我正在使用NLTK的nltk.tag.stanford,这个需要调用Java程序。

我把JAVAHOME设置成了C:\Program Files\Java\jdk1.6.0_25,也就是我安装JDK的地方,但当我运行程序时却出现了错误

"NLTK was unable to find the java executable! Use the config_java() or set the JAVAHOME variable"

然后我花了3个小时来调试,尝试了

config_java("C:/Program Files/Java/jdk1.6.0_25/")

config_java("C:/Program Files/Java/jdk1.6.0_25/bin/")
and those without the ending "/". 

但是NLTK还是找不到它。

有没有人知道哪里出了问题?非常感谢!

14 个回答

6

protos1210的建议对我有用,只是做了一些小调整。完整的答案是:

import nltk
nltk.internals.config_java("C:/Program Files/Java/jdk1.6.0_30/bin/java.exe")

在我重新启动IDLE之后,下面的代码就能正常工作了。

import nltk
path_to_model = "C:/Program Files/stanford-postagger-2012-05-22/models/english-bidirectional-distsim.tagger"
path_to_jar = "C:/Program Files/stanford-postagger-2012-05-22/stanford-postagger.jar"
tagger = nltk.tag.stanford.POSTagger(path_to_model, path_to_jar)
tokens = nltk.tokenize.word_tokenize("I hope this works!")
print tagger.tag(tokens)

输出结果是: [('I', 'PRP'), ('hope', 'VBP'), ('this', 'DT'), ('works', 'VBZ'), ('!', '.') ]。

我一直无法让它识别我的JAVAHOME环境变量。

10

我花了大约七个小时来解决这个问题,最后找到了一个办法。你可以直接在internals.py文件的第69行和第72行写入你的Java目录,具体如下:

##########################################################################
# Java Via Command-Line
##########################################################################

_java_bin = 'C:\Program Files\Java\jdk1.7.0_25\\bin\java.exe'
_java_options = []
# [xx] add classpath option to config_java?
def config_java(bin='C:\Program Files\Java\jdk1.7.0_25\\bin\java.exe', options=None, verbose=True):

这样就解决了我的问题。(我是在32位的Windows环境下工作)

54

如果设置JAVA_HOME这个环境变量没有解决你的问题,可以试试这个方法:

config_java()对我来说没用。我在我的代码里加了以下几行,然后就成功了:

import os
java_path = "C:/Program Files/Java/jdk1.7.0_11/bin/java.exe"
os.environ['JAVAHOME'] = java_path

我是在Windows 7 64位系统上运行的。

撰写回答