【问题标题】:StanfordCoreNLP NoSuchMethodErrorStanfordCoreNLP NoSuchMethodError
【发布时间】:2017-06-01 11:38:48
【问题描述】:
import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;
import java.util.List;
import java.util.Properties;
import java.util.Map;


import edu.stanford.nlp.ling.CoreAnnotations.NamedEntityTagAnnotation;
import edu.stanford.nlp.ling.CoreAnnotations.PartOfSpeechAnnotation;
import edu.stanford.nlp.ling.CoreAnnotations.SentencesAnnotation;
import edu.stanford.nlp.ling.CoreAnnotations.TextAnnotation;
import edu.stanford.nlp.ling.CoreAnnotations.TokensAnnotation;
import edu.stanford.nlp.ling.CoreLabel;
import edu.stanford.nlp.pipeline.Annotation;
import edu.stanford.nlp.pipeline.StanfordCoreNLP;
import edu.stanford.nlp.semgraph.SemanticGraph;
import edu.stanford.nlp.semgraph.SemanticGraphCoreAnnotations.CollapsedCCProcessedDependenciesAnnotation;
import edu.stanford.nlp.trees.Tree;
import edu.stanford.nlp.trees.TreeCoreAnnotations.TreeAnnotation;
import edu.stanford.nlp.util.CoreMap;


public class Stanforder {

    /**
     * @param args
     */
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        // creates a StanfordCoreNLP object, with POS tagging, lemmatization, NER, parsing, and coreference resolution
        Properties props = new Properties();
        props.put("annotators", "tokenize, ssplit, pos, lemma, ner, parse, dcoref");
        StanfordCoreNLP pipeline = new StanfordCoreNLP(props);
        String text = "";
        File myFile =  new File("C:\\master\\stanford\\txt\\43711.txt");
        try {
            BufferedReader br = new BufferedReader(new FileReader(myFile));
            try {
                StringBuilder sb = new StringBuilder();
                String line = br.readLine();

                while (line != null) {
                    sb.append(line);
                    //sb.append(System.lineSeparator());
                    line = br.readLine();
                }
                text = sb.toString();
            } catch (Exception e){
                e.printStackTrace();
            } finally {
                try {
                    br.close();
                } catch (IOException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            }
        } catch(Exception e){
            e.printStackTrace();
        }
        System.out.println(text);
        // read some text in the text variable
         // Add your text here!

        // create an empty Annotation just with the given text
        Annotation document = new Annotation(text);

        // run all Annotators on this text
        pipeline.annotate(document);

        // these are all the sentences in this document
        // a CoreMap is essentially a Map that uses class objects as keys and has values with custom types
        List<CoreMap> sentences = document.get(SentencesAnnotation.class);

        for(CoreMap sentence: sentences) {
          // traversing the words in the current sentence
          // a CoreLabel is a CoreMap with additional token-specific methods
          for (CoreLabel token: sentence.get(TokensAnnotation.class)) {
            // this is the text of the token
            String word = token.get(TextAnnotation.class);
            // this is the POS tag of the token
            String pos = token.get(PartOfSpeechAnnotation.class);
            // this is the NER label of the token
            String ne = token.get(NamedEntityTagAnnotation.class);
          }

          // this is the parse tree of the current sentence
          Tree tree = sentence.get(TreeAnnotation.class);

          // this is the Stanford dependency graph of the current sentence
          SemanticGraph dependencies = sentence.get(CollapsedCCProcessedDependenciesAnnotation.class);
        }

    }

}

这是斯坦福网站的示例,我试图从文件中读取内容,但在调用 StanfordCoreNLP (props) 构造函数的行处出现以下异常:

线程“main”中的异常

java.lang.NoSuchMethodError: edu.stanford.nlp.util.Generics.newHashMap()Ljava/util/Map;在 edu.stanford.nlp.pipeline.AnnotatorPool.(AnnotatorPool.java:27) 在 edu.stanford.nlp.pipeline.StanfordCoreNLP.getDefaultAnnotatorPool(StanfordCoreNLP.java:303) 在 edu.stanford.nlp.pipeline.StanfordCoreNLP.construct(StanfordCoreNLP.java:256) 在 edu.stanford.nlp.pipeline.StanfordCoreNLP.(S​​tanfordCoreNLP.java:129) 在 edu.stanford.nlp.pipeline.StanfordCoreNLP.(S​​tanfordCoreNLP.java:125) 在 Stanforder.main(Stanforder.java:35)

感谢任何帮助。谢谢!

【问题讨论】:

  • 这意味着你有一组不一致的编译类。在那里,调用了某个类的方法,但该方法不再存在。通常,编译器会检查这一点,但如果你用没有该方法的类替换正确的类,你会得到这个NoSuchMethodError

标签: java stanford-nlp


【解决方案1】:

参考第9题

http://nlp.stanford.edu/software/corenlp-faq.shtml#nosuchmethoderror

它说,

“这是因为你还拥有一个或多个斯坦福 NLP 的旧版本 类路径中的工具"

也可以看看,

https://mailman.stanford.edu/pipermail/java-nlp-user/2013-November/004357.html

上面写着,

显然有一些 jar 文件不兼容。你有没有老的 您的类路径中的我们工具的版本?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多