首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >运行NLTK StanfordParser时,Java命令失败

运行NLTK StanfordParser时,Java命令失败
EN

Stack Overflow用户
提问于 2016-02-25 10:12:04
回答 2查看 4.8K关注 0票数 4

编辑

多亏了阿尔瓦斯的回答。我刚刚了解到,由于最近的15-12-09 StanfordNLP比以前的版本需要更多的依赖关系,所以以下问题是由“不最新”的NLTK引起的。正如Alvas所建议的,这个问题的确切解决方案就在这个链接https://github.com/nltk/nltk/issues/1239中。

StackOverflow发现我的问题类似于这个帖子斯坦福Parser和NLTK。我仍然认为这两个问题是不同的,因为最初的问题更多地讨论了Standfordnlp的总体正确设置,而我的问题则集中在错误本身上。毕竟,这并不能解决我的问题。

以下是我在添加这些评论之前的帖子。

我已经阅读了几乎所有相关的主题和可能的解决方案,张贴在Stackoverflow上,并在我的计算机上进行了所有的尝试。然而,没有取得任何积极成果。对于一个在java学习nlp和菜鸟的A成熟人来说,每天都很沮丧,因为这个问题使我无法在一开始就了解nltk。我想再次分享这个问题,并再次感谢所有试图提前解决问题的人。

基本上,我打算解析汉字,但从英语开始。下面是我使用的代码(您可能已经看到它,因为我将它复制到其他地方进行测试):

代码语言:javascript
复制
import os
from nltk.parse import stanford

ini_path = 'C:/Users/qubo/jars/stanford-parser/'

os.environ['STANFORD_PARSER'] = ini_path + 'stanford-parser.jar'
os.environ['STANFORD_MODELS'] = ini_path + 'stanford-parser-3.6.0-models.jar'   
os.environ['JAVAHOME'] = 'C:/Program Files/Java/jdk1.8.0_73/'

parser = stanford.StanfordParser(ini_path + 'stanford-parser.jar', ini_path + 'stanford-parser-3.6.0-models.jar')
sentences = parser.raw_parse_sents(("Python is fun. We should all date Python in this case."))
print (sentences)

for line in sentences:
    for sentence in line:
        sentence.draw()

现在我在运行parser.raw_parse_sents时得到了这个错误消息

代码语言:javascript
复制
java.lang.NoClassDefFoundError: org/slf4j/LoggerFactory
    at edu.stanford.nlp.parser.common.ParserGrammar.<clinit>(ParserGrammar.java:46)
Caused by: java.lang.ClassNotFoundException: org.slf4j.LoggerFactory
    at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
    ... 1 more
Exception in thread "main" 
Traceback (most recent call last):
  File "C:\Users\qubo\Desktop\nltkexample.py", line 33, in <module>
    sentences = parser.raw_parse_sents(("Python is fun. We should all date Python in this case."))
  File "C:\Users\qubo\Miniconda2\lib\site-packages\nltk\parse\stanford.py", line 146, in raw_parse_sents
    return self._parse_trees_output(self._execute(cmd, '\n'.join(sentences), verbose))
  File "C:\Users\qubo\Miniconda2\lib\site-packages\nltk\parse\stanford.py", line 212, in _execute
    stdout=PIPE, stderr=PIPE)
  File "C:\Users\qubo\Miniconda2\lib\site-packages\nltk\internals.py", line 134, in java
    raise OSError('Java command failed : ' + str(cmd))
OSError: Java command failed : ['C:/Program Files/Java/jdk1.8.0_73/bin\\java.exe', u'-mx1000m', '-cp', 'C:/Users/qubo/jars/stanford-parser/stanford-parser.jar;C:/Users/qubo/jars/stanford-parser/stanford-parser-3.6.0-models.jar', u'edu.stanford.nlp.parser.lexparser.LexicalizedParser', u'-model', u'edu/stanford/nlp/models/lexparser/englishPCFG.ser.gz', u'-sentences', u'newline', u'-outputFormat', u'penn', u'-encoding', u'utf8', 'c:\\users\\qubo\\appdata\\local\\temp\\tmppz8u6r']
[Finished in 0.7s]

我使用的是windows 64、Python2.7.11和所有支持nltk和斯坦福解析器的模块。我也安装了jdk和jre。事实上,我尝试过不同的版本和jdk (旧的或最新的,86或64),都没有工作。

我尝试在internals.py中直接设置java路径,或者在standford.py中注释引发错误行,但仍然无法工作。

我尝试添加JAVAHOME环境变量,没有用。事实上,它的目的与这一行完全相同(有些人可能会声称略有不同):

代码语言:javascript
复制
os.environ['JAVAHOME'] = 'C:/Program Files/Java/jdk1.8.0_73/'

有什么想法吗?再次感谢!

EN

回答 2

Stack Overflow用户

发布于 2016-06-29 14:38:51

在这个问题上花了很长时间之后,我终于找到了这个问题的答案。我认为这是值得张贴作为一个正确的答案,因为其他人可能会在这里寻找,但找不到它(我知道我错过了它在一开始)。

答案就在这个要点里,它还包含关于如何解决所有Stanford接口(即NER、POS标记器和所有斯坦福解析器)的这个问题的说明。

基本上,您需要用以下函数更改Parser对象的类路径属性:

代码语言:javascript
复制
from nltk.internals import find_jars_within_path
from nltk.parse.stanford import StanfordParser
parser = StanfordParser(model_path="path/to/englishPCFG.ser.gz")
parser._classpath = tuple(find_jars_within_path(stanford_dir))

解决方案的所有功劳都归于阿尔瓦斯,我只是在这里重新发布,这样就更容易找到了。

票数 4
EN

Stack Overflow用户

发布于 2016-02-25 10:15:34

您需要从slf4j下载这里 jar并将其添加到路径中。

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35624245

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档