StanfordCoreNLP NoSuchMethodError

时间:2014-06-29 15:06:07

标签: java stanford-nlp

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的/地图;在   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。(StanfordCoreNLP.java:129)     在   edu.stanford.nlp.pipeline.StanfordCoreNLP。(StanfordCoreNLP.java:125)     在Stanforder.main(Stanforder.java:35)

感谢任何帮助。谢谢!

1 个答案:

答案 0 :(得分:4)

参考

中的第9个问题

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

它说,

  

&#34;这是因为你还有一个或多个斯坦福NLP的旧版本   类路径上的工具&#34;

并且还可以查看,

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

说,

  

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