2016-04-12 2 views
0

Je rencontre des problèmes lors de l'utilisation de stanford nlp. J'ai des problèmes où j'obtiens diverses erreurs en essayant d'utiliser les outils PNL de Stanford Core. Je veux connaître le sentiment de la phrase passée. Mais je n'ai pas réussi à faire fonctionner les outils nlp lors de l'exécution du code d'eclipse avec les jars nécessaires ajoutés au classpath,Erreur lors de l'utilisation de stanford core nlp

Ceci est le code que je veux exécuter.

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

Voici les bibliothèques que j'ai mis enter image description here

Je suis en utilisant mars éclipse. Au début, il a été une erreur pour montrer ejml library.but alors je ejml importé fichier jar de sorte que l'erreur a été résolue, mais il a donné lieu à cette erreur maintenant ...

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 coincé à quelqu'un it.If avoir une idée de cela alors s'il vous plaît suggérer, il sera d'une grande aide.J'ai cherché d'autres questions similaires sur stackoverflow mais toujours pas obtenir la solution pour résoudre ce problème.

Répondre

1

Vous semblez utiliser une ancienne version de CoreNLP (3.3.0) avec les nouveaux modèles. Essayez de télécharger le code 3.6.0 + modèles.

2

En fait, le problème était avec la version différente utilisée. Certains des fichiers jar comme xom, ejml manquant.Je l'ai réparé en téléchargeant les fichiers jar complets d'ici stanford core PNL avec la version 3.6.0. Et l'une des déclarations d'importation a été changé à

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

SentimentCoreAnnotations.AnnotatedTree.class doit être changé pour SentimentCoreAnnotations.SentimentAnnotatedTree.class

ces changements ont résolu mes toutes les erreurs.