java.lang.NoSuchMethodError : edu. stanford.nlp.util.Generics.newHashMap()Ljava/util/Map;

标签 java jakarta-ee stanford-nlp nosuchmethoderror

我有以下代码行初始化斯坦福词法解析器。

lp = LexicalizedParser.loadModel("edu/stanford/nlp/models/lexparser/englishPCFG.ser.gz");

仅当我将代码从 Java SE 应用程序移动到 Java EE 应用程序时,才会出现以下异常。

Caused by: java.lang.NoSuchMethodError: edu.stanford.nlp.util.Generics.newHashMap()Ljava/util/Map;
    at edu.stanford.nlp.parser.lexparser.BinaryGrammar.init(BinaryGrammar.java:223)
    at edu.stanford.nlp.parser.lexparser.BinaryGrammar.readObject(BinaryGrammar.java:211)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)

这是怎么造成的,如何解决?

最佳答案

您可以引用常见问题:http://nlp.stanford.edu/software/corenlp-faq.shtml#nosuchmethoderror

Caused by: java.lang.NoSuchMethodError: edu.stanford.nlp.util.Generics.newHashMap()Ljava/util/Map;
  at edu.stanford.nlp.pipeline.AnnotatorPool.(AnnotatorPool.java:27)
  at edu.stanford.nlp.pipeline.StanfordCoreNLP.getDefaultAnnotatorPool(StanfordCoreNLP.java:305)

then this isn't caused by the shiny new Stanford NLP tools that you've just downloaded. It is because you also have old versions of one or more Stanford NLP tools on your classpath.

The straightforward case is if you have an older version of a Stanford NLP tool. For example, you may still have a version of Stanford NER on your classpath that was released in 2009. In this case, you should upgrade, or at least use matching versions. For any releases from 2011 on, just use tools released at the same time -- such as the most recent version of everything :) -- and they will all be compatible and play nicely together.

The tricky case of this is when people distribute jar files that hide other people's classes inside them. People think this will make it easy for users, since they can distribute one jar that has everything you need, but, in practice, as soon as people are building applications using multiple components, this results in a particular bad form of jar hell. People just shouldn't do this. The only way to check that other jar files do not contain conflicting versions of Stanford tools is to look at what is inside them (for example, with the jar -tf command).

In practice, if you're having problems, the most common cause (in 2013-2014) is that you have ark-tweet-nlp on your classpath. The jar file in their github download hides old versions of many other people's jar files, including Apache commons-codec (v1.4), commons-lang, commons-math, commons-io, Lucene; Twitter commons; Google Guava (v10); Jackson; Berkeley NLP code; Percy Liang's fig; GNU trove; and an outdated version of the Stanford POS tagger (from 2011). You should complain to them for creating you and us grief. But you can then fix the problem by using their jar file from Maven Central. It doesn't have all those other libraries stuffed inside.

关于java.lang.NoSuchMethodError : edu. stanford.nlp.util.Generics.newHashMap()Ljava/util/Map;,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40592531/

相关文章:

java - 如何使运行 Arquillian 功能测试的 maven-failsafe-plugin 知道堆栈跟踪中的 EJB 行号

java - 如何更高效地注释多个Stanford CoreNLP CoreDocuments?

java - JTA 与 PersistenceUnit

java - 将文件内容复制到链表数组中并对其进行排序

java - 使用java插入表时出现SQl错误

nlp - 我可以使用哪些工具来查找词性模式

java - 斯坦福 nlp pos 标记

java - 如何在首次运行时配置应用程序?

java - @WebServlet 中的拦截器未激活

java - Java 运行时环境 : SIGSEGV (0xb) at pc=0x00002b2f7e9b2744, pid=28778,tid=1138739520 检测到 fatal error