Python "Could not find or load main class" 中的 StandPOSTagger

StandPOSTagger in Python "Could not find or load main class"

我最近尝试通过http://textminingonline.com/dive-into-nltk-part-v-using-stanford-text-analysis-tools-in-python学习nltk包。 但是我遇到了关于在 Python:

中执行 JAVA 代码的问题
import os
java_path = "C:\Program Files (x86)\Java\jre1.8.0_121\bin\java.exe"
os.environ['JAVAHOME'] = java_path
os.environ['JAVAHOME']

结果:

'C:\Program Files (x86)\Java\jre1.8.0_121\bin\java.exe'

然后我运行nltk代码:

import nltk
from nltk.tag.stanford import StanfordPOSTagger
english_postagger=StanfordPOSTagger('models/english-bidirectional-distsim.tagger','stanford-postagger.jar')
english_postagger.tag('hi')

但是:

`Error: Could not find or load main class`edu.stanford.nlp.tagger.maxent.MaxentTagger

我查看了 'stanford-postagger.jar' 中的文档,其中有 MaxentTagger 文件: path to Maxent Tagger

请问如何设置正确的 class 路径?或其他方式来解决这个问题。 P.S。 : 我没有 Java 的经验,但是 Python。

问题是您无权访问这些 jars,所以这是一个 CLASSPATH 问题。我不确定这是否适用于 nltk,但我已经看到以前的答案,其中设置 os.environ["CLASSPATH"]= "/path/to/stanford-corenlp-full-2016-10-31" 解决了这个问题。

您可以从这里下载 Stanford CoreNLP 3.7.0:

http://stanfordnlp.github.io/CoreNLP/download.html

如果您想在 Python 中使用我们的工具,我建议您使用 Stanford CoreNLP 3.7.0 服务器并发出小型服务器请求(或使用 stanza 库)。

如果你使用 nltk 我相信会发生 Python 只是用 subprocess 调用我们的 Java 代码,这实际上可能非常低效,因为不同的调用会重新加载所有的模型。

这是我之前给出的一个回答,更详尽地描述了这一点:

cannot use pycorenlp for python3.5 through terminal