【问题标题】:StanfordPOSTagger not working with NLTKStanfordPOSTagger 不使用 NLTK
【发布时间】:2016-04-18 13:59:29
【问题描述】:

我无法让最新的 StanfordPOSTagger 在安装了 Java 8 的 mac 上使用带有 NLTK 3.2.1 的 python 2.7.1 工作。我发现了其他几个问题非常相似的线程,但没有一个解决方案对我有用。下面是我尝试标记句子时的输出:

>>> from nltk.tag.stanford import StanfordPOSTagger
>>> st = StanfordPOSTagger('wsj-0-18-left3words-distsim.tagger')
>>> st.tag(nltk.tokenize.word_tokenize("This is a test"))
Exception in thread "main" java.lang.UnsupportedClassVersionError: edu/stanford/nlp/tagger/maxent/MaxentTagger : Unsupported major.minor version 52.0
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClassCond(ClassLoader.java:637)
at java.lang.ClassLoader.defineClass(ClassLoader.java:621)
at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:141)
at java.net.URLClassLoader.defineClass(URLClassLoader.java:283)
at java.net.URLClassLoader.access$000(URLClassLoader.java:58)
at java.net.URLClassLoader$1.run(URLClassLoader.java:197)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
at java.lang.ClassLoader.loadClass(ClassLoader.java:247)


Traceback (most recent call last):
File "<pyshell#44>", line 1, in <module>
st.tag(nltk.tokenize.word_tokenize("This is a test"))
File "/Library/Python/2.7/site-packages/nltk/tag/stanford.py", line 71, in tag
return sum(self.tag_sents([tokens]), [])
File "/Library/Python/2.7/site-packages/nltk/tag/stanford.py", line 94, in tag_sents
stdout=PIPE, stderr=PIPE)
File "/Library/Python/2.7/site-packages/nltk/internals.py", line 134, in java
raise OSError('Java command failed : ' + str(cmd))
OSError: Java command failed : ['/Library/Java/Home/bin/java', '-mx1000m', '-cp', '/Users/johntorr/VirtualAssistantProject/stanford-postagger/stanford-postagger-3.6.0-javadoc.jar:/Users/johntorr/VirtualAssistantProject/stanford-postagger/stanford-postagger-3.6.0-sources.jar:/Users/johntorr/VirtualAssistantProject/stanford-postagger/stanford-postagger-3.6.0.jar:/Users/johntorr/VirtualAssistantProject/stanford-postagger/stanford-postagger.jar:/Users/johntorr/VirtualAssistantProject/stanford-postagger/lib/slf4j-api.jar:/Users/johntorr/VirtualAssistantProject/stanford-postagger/lib/slf4j-simple.jar', 'edu.stanford.nlp.tagger.maxent.MaxentTagger', '-model', '/Users/johntorr/VirtualAssistantProject/stanford-postagger/models/wsj-0-18-left3words-distsim.tagger', '-textFile', '/var/folders/gy/bw2lj_wj79x9vl1l3n3ccg980000gn/T/tmp6yV_lP', '-tokenize', 'false', '-outputFormatOptions', 'keepEmptySentences', '-encoding', 'utf8']

在我的 .bash_profile 文件中,我添加了以下两行:

export CLASSPATH={CLASSPATH}:/Users/johntorr/VirtualAssistantProject/stanford-postagger/stanford-postagger.jar
export STANFORD_MODELS=/Users/johntorr/VirtualAssistantProject/stanford-postagger/models
export JAVA_HOME=/Library/Java/Home
export PATH=$PATH:$JAVA_HOME/bin/java

似乎还有其他几个地方有 Java 主文件夹和 Java 可执行文件,但我已经尝试全部使用它们,但没有任何效果。我也在这里尝试了解决方案:https://gist.github.com/alvations/e1df0ba227e542955a8a 由几个人在不同的线程中发布,但这也没有奏效。如果有人能帮助我解决这个问题,我将非常感激!

【问题讨论】:

  • 该命令是否在 linux 之外工作?
  • 我认为这是一个权限问题。您是否有权访问/Library/Java/Home/bin//Users/johntorr/VirtualAssistantProject/stanford-postagger//var/folders/
  • 在您的终端上尝试sudo chmod u+w -R /Library/Java/Home/bin/*sudo chmod u+w -R /var/folders/
  • 另外,更新您的 Java 并安装 Java 8,这应该可以解决使用斯坦福工具时大多数与 Java 相关的问题。

标签: java python-2.7 nltk stanford-nlp pos-tagger


【解决方案1】:

感谢您的所有建议 Alvas.. 实际上,我设法通过安装以下 2014 年以来仍然具有所有必要性的旧版本的 POS 标记器来解决问题:http://nlp.stanford.edu/software/stanford-postagger-full-2014-01-04.zip 显然,最新的斯坦福解析器也存在同样的问题,因此人们也一直在使用 2014 年版本。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-06-05
    • 2017-04-26
    • 2016-05-18
    • 2013-03-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多