2016-04-12 18 views
0

スタンフォードnlpの使用に問題があります。スタンフォード・コアのNLPツールを使用しようとすると、さまざまなエラーが発生する問題が発生しています。合格した文章の感情を知りたい。しかし、私はクラスパスに追加された必要なjarファイルをeclipseから実行しているときにnlpツールを動作させることができませんでした。スタンフォードコア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"); 
    } 
} 

は、ここで私は日食火星を使用してM Iは enter image description here

を設定しているライブラリです。最初は

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) 

...そのエラーが解決されましたので、私はejml jarファイルをインポートしたが、それは今、このエラーを生じさせた後、library.but ejmlのエラーを示したit.If誰かで立ち往生イム任意のアイデアを持っています私はstackoverflow上で他の同様の質問を検索したが、解決するために解決策をまだ得ていない。

答えて

1

新しいモデルと一緒にCoreNLP(3.3.0)の古いバージョンを使用しているようです。 3.6.0のコード+モデルをダウンロードしてみてください。

2

実際には、xom、ejmlのようなjarファイルのうちいくつかのバージョンが使用されていた問題がありました。バージョン3.6.0のスタンフォードコアNLPサイトから完全なjarファイルをダウンロードして修正しました。そして、import文の一つが

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

SentimentCoreAnnotations.AnnotatedTree.classに変更されましたが、この変更は、私のすべてのエラーを解決した

SentimentCoreAnnotations.SentimentAnnotatedTree.class

に変更する必要があります。

関連する問題