2016-04-12 6 views
0

Ich habe Probleme bei der Verwendung der Stanford Nlp. Ich habe Probleme, wo ich verschiedene Fehler bekomme, wenn ich versuche, die Stanford Core NLP-Tools zu verwenden. Ich möchte das Gefühl des Satzes wissen, der bestanden wird. Aber ich war nicht in der Lage, NLP-Tools zu arbeiten, wenn der Code aus Eclipse mit den erforderlichen Gläsern zum Klassenpfad hinzugefügt wird,Fehler bei der Verwendung von Stanford Core Nlp

Dies ist der Code, den ich ausführen möchte.

import java.util.Properties; 

import edu.stanford.nlp.ling.CoreAnnotations; 
import edu.stanford.nlp.ling.CoreLabel; 
import edu.stanford.nlp.ling.CoreAnnotations.TokensAnnotation; 
import edu.stanford.nlp.pipeline.Annotation; 
import edu.stanford.nlp.pipeline.SentimentAnnotator; 
import edu.stanford.nlp.pipeline.StanfordCoreNLP; 
import edu.stanford.nlp.rnn.RNNCoreAnnotations; 
import edu.stanford.nlp.sentiment.SentimentCoreAnnotations; 
import edu.stanford.nlp.trees.Tree; 
import edu.stanford.nlp.util.CoreMap; 
import edu.stanford.nlp.util.TypesafeMap.Key; 

public class sentiment_demo { 

    public static void sentiment_analysis(String line) 
    { 
     //Uses Stanford NLP sentimnet analysis 
     //found in latest model released from stanford 
     // ver 3.3.1 
     //applies sentiment analysis to text 

     Properties props = new Properties(); 
     props.setProperty("annotators", "tokenize, ssplit, parse, sentiment"); 
     StanfordCoreNLP pipeline = new StanfordCoreNLP(props); 
     int mainSentiment = 0; 
     if (line != null && line.length() > 0) { 
      int longest = 0; 
      Annotation annotation = pipeline.process(line); 
      for (CoreMap sentence : annotation.get(CoreAnnotations.SentencesAnnotation.class)) { 
       System.out.println(sentence); 
       for (Tree token: sentence.get(SentimentCoreAnnotations.AnnotatedTree.class)) 
       { 
        //System.out.println(token); 
       } 
       Tree tree = sentence.get(SentimentCoreAnnotations.AnnotatedTree.class); 
       int sentiment = RNNCoreAnnotations.getPredictedClass(tree); 
       System.out.println(sentiment); 
       String partText = sentence.toString(); 
       //System.out.println(partText); 
       if (partText.length() > longest) { 
        mainSentiment = sentiment; 
        longest = partText.length(); 
       } 

      } 
     } 
     if(mainSentiment==2) 
     { 
      System.out.println("Average"); 
     } 
     else if(mainSentiment>2) 
     { 
      System.out.println("Positive"); 
     } 
     else if(mainSentiment<2) 
     { 
      System.out.println("Negative "); 
     } 

     if (mainSentiment == 2 || mainSentiment > 4 || mainSentiment < 0) { 
      //return null; 
     } 
    } 
    public static void main(String[] args) 
    { 
     sentiment_analysis("Cristiano Ronaldo, is a Portuguese professional footballer who plays for Spanish club Real Madrid and the Portugal national team. He is a forward and serves as captain for Portugal.Often ranked as the best player in the world and rated by some in the sport as the greatest of all time"); 
    } 
} 

Hier sind die Bibliotheken i gesetzt haben enter image description here

ich Eclipse Mars verwende. Zuerst war es Fehler für ejml library.but dann zeigt importiert i ejml JAR-Datei, so dass Fehler behoben wurden, aber es gab Anlass zu diesen Fehlern jetzt ...

Adding annotator tokenize 
Adding annotator ssplit 
Adding annotator parse 
Loading parser from serialized file edu/stanford/nlp/models/lexparser/englishPCFG.ser.gz ... done [1.6 sec]. 
Adding annotator sentiment 
Exception in thread "main" edu.stanford.nlp.io.RuntimeIOException: java.lang.ClassNotFoundException: edu.stanford.nlp.neural.SimpleTensor 
    at edu.stanford.nlp.sentiment.SentimentModel.loadSerialized(SentimentModel.java:470) 
    at edu.stanford.nlp.pipeline.SentimentAnnotator.<init>(SentimentAnnotator.java:45) 
    at edu.stanford.nlp.pipeline.StanfordCoreNLP$14.create(StanfordCoreNLP.java:845) 
    at edu.stanford.nlp.pipeline.AnnotatorPool.get(AnnotatorPool.java:81) 
    at edu.stanford.nlp.pipeline.StanfordCoreNLP.construct(StanfordCoreNLP.java:260) 
    at edu.stanford.nlp.pipeline.StanfordCoreNLP.<init>(StanfordCoreNLP.java:127) 
    at edu.stanford.nlp.pipeline.StanfordCoreNLP.<init>(StanfordCoreNLP.java:123) 
    at sentiment_demo.sentiment_analysis(sentiment_demo.java:28) 
    at sentiment_demo.main(sentiment_demo.java:70) 
Caused by: java.lang.ClassNotFoundException: edu.stanford.nlp.neural.SimpleTensor 
    at java.net.URLClassLoader.findClass(Unknown Source) 
    at java.lang.ClassLoader.loadClass(Unknown Source) 
    at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source) 
    at java.lang.ClassLoader.loadClass(Unknown Source) 
    at java.lang.Class.forName0(Native Method) 
    at java.lang.Class.forName(Unknown Source) 
    at java.io.ObjectInputStream.resolveClass(Unknown Source) 
    at java.io.ObjectInputStream.readNonProxyDesc(Unknown Source) 
    at java.io.ObjectInputStream.readClassDesc(Unknown Source) 
    at java.io.ObjectInputStream.readOrdinaryObject(Unknown Source) 
    at java.io.ObjectInputStream.readObject0(Unknown Source) 
    at java.io.ObjectInputStream.readObject(Unknown Source) 
    at java.util.TreeMap.buildFromSorted(Unknown Source) 
    at java.util.TreeMap.buildFromSorted(Unknown Source) 
    at java.util.TreeMap.readObject(Unknown Source) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) 
    at java.lang.reflect.Method.invoke(Unknown Source) 
    at java.io.ObjectStreamClass.invokeReadObject(Unknown Source) 
    at java.io.ObjectInputStream.readSerialData(Unknown Source) 
    at java.io.ObjectInputStream.readOrdinaryObject(Unknown Source) 
    at java.io.ObjectInputStream.readObject0(Unknown Source) 
    at java.io.ObjectInputStream.readObject(Unknown Source) 
    at java.util.TreeMap.buildFromSorted(Unknown Source) 
    at java.util.TreeMap.buildFromSorted(Unknown Source) 
    at java.util.TreeMap.readObject(Unknown Source) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) 
    at java.lang.reflect.Method.invoke(Unknown Source) 
    at java.io.ObjectStreamClass.invokeReadObject(Unknown Source) 
    at java.io.ObjectInputStream.readSerialData(Unknown Source) 
    at java.io.ObjectInputStream.readOrdinaryObject(Unknown Source) 
    at java.io.ObjectInputStream.readObject0(Unknown Source) 
    at java.io.ObjectInputStream.defaultReadFields(Unknown Source) 
    at java.io.ObjectInputStream.readSerialData(Unknown Source) 
    at java.io.ObjectInputStream.readOrdinaryObject(Unknown Source) 
    at java.io.ObjectInputStream.readObject0(Unknown Source) 
    at java.io.ObjectInputStream.defaultReadFields(Unknown Source) 
    at java.io.ObjectInputStream.readSerialData(Unknown Source) 
    at java.io.ObjectInputStream.readOrdinaryObject(Unknown Source) 
    at java.io.ObjectInputStream.readObject0(Unknown Source) 
    at java.io.ObjectInputStream.readObject(Unknown Source) 
    at edu.stanford.nlp.io.IOUtils.readObjectFromURLOrClasspathOrFileSystem(IOUtils.java:298) 
    at edu.stanford.nlp.sentiment.SentimentModel.loadSerialized(SentimentModel.java:466) 

im an it.If jemanden steckte eine Idee haben, von diesem dann bitte vorschlagen, es wird von großer Hilfe sein. Ich habe andere ähnliche Fragen auf stackoverflow gesucht, aber immer noch nicht die Lösung, um dies zu lösen.

Antwort

1

Sie scheinen eine alte Version von CoreNLP (3.3.0) neben den neuen Modellen zu verwenden. Versuchen Sie, den 3.6.0-Code + die Modelle herunterzuladen.

2

Eigentlich war das Problem mit verschiedenen Version verwendet. Einige der Jar-Dateien wie xom, ejml wo fehlte.Ich habe es durch Herunterladen der vollständigen JAR-Dateien von hier Stanford Core NLP-Site mit Version 3.6.0. Und eine der Import-Anweisungen geändert wurde

import edu.stanford.nlp.neural.rnn.RNNCoreAnnotations; 

SentimentCoreAnnotations.AnnotatedTree.class muss geändert werden, um SentimentCoreAnnotations.SentimentAnnotatedTree.class

diese Änderungen meine alle Fehler behoben haben.

Verwandte Themen