2016-04-12 9 views
0

У меня возникла проблема с использованием stanford nlp. У меня возникают проблемы, когда я получаю различные ошибки при попытке использовать инструменты NLP для Stanford Core. Я хочу знать мнение переданного предложения. Но я не смог заставить nlp-инструменты работать при запуске кода из eclipse с необходимыми банками, добавленными в classpath,Ошибка при использовании ядра stanford nlp

Это код, который я хочу выполнить.

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

Вот библиотеки я установил enter image description here

Я использую затмение Марс. Сначала он показывал ошибку для ejml library.but тогда я импортировал ejml .jar файл, так была решена, что ошибка, но это привело к этой ошибке теперь ...

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 застрял в it.if кого-то есть какие-либо идеи из этого, пожалуйста, предложите, это будет очень полезно. Я искал другие подобные вопросы в stackoverflow, но все еще не получаю решение для решения этого.

ответ

1

Рядом с новыми моделями вы используете старую версию CoreNLP (3.3.0). Попробуйте загрузить модели с кодом 3.6.0 +.

2

На самом деле проблема была в использовании другой версии. Некоторые из файлов jar, таких как xom, ejml, где отсутствовали. Я исправил это, загрузив полный файл jar с сайта stlford core NLP с версией 3.6.0. И один из операторов импорта было изменено на

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

SentimentCoreAnnotations.AnnotatedTree.class должен быть изменен на SentimentCoreAnnotations.SentimentAnnotatedTree.class

эти изменения решить мои все ошибки.

 Смежные вопросы

  • Нет связанных вопросов^_^