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);
        }

    }

}


这是Stanford网站的示例表单,我试图从文件中读取内容,并且在调用StanfordCoreNLP(props)构造函数的行上收到以下Exception:

线程“主”中的异常


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


任何帮助表示赞赏。谢谢!

最佳答案

请参阅第9个问题

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

它说,


  “这是因为您还有一个或多个斯坦福大学自然语言处理的旧版本
  类路径上的工具”


还要看看

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

其中说,


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

10-01 20:29