2016-04-12 43 views
0

stanford nlp'yi kullanırken sorun yaşıyorum. Ben Stanford Çekirdek NLP araçları kullanmaya çalışırken çeşitli hatalar alıyorum sorunları yaşıyorum.Verilen cümlenin duyguları bilmek istiyorum. Ancak, sınıf yoluna eklenen gerekli kavanozlar ile tutulmadan kod çalıştırıldığında çalışmak için nlp araçlarını alamadım,stanford nlp kullanırken hata oluştu

Bu, yürütmek istediğim kod.

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

İşte Tutulma mars kullanıyorum ben enter image description here

belirledik kütüphaneler bulunmaktadır. İlk başta o zaman library.but ejml için hatayı gösteren olduğu hata çözüldü yüzden ejml kavanoz dosyası ithal ama artık bu hatalara sebebiyet ... it.If birisine takılıp

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 bir fikrin var verdi bu sonra lütfen önermek, büyük bir yardım olacak. Ben stackoverflow diğer benzer soruları aradım ama hala bu çözmek için çözüm elde değil.

cevap

1

Yeni modellerin yanında CoreNLP'nin (3.3.0) eski bir sürümünü kullanıyor görünüyorsunuz. 3.6.0 kod + modellerini indirmeyi deneyin.

2

Aslında sorun farklı sürümde kullanılmıştı. Xom, ejml gibi jar dosyalarının eksik olduğu yerdeydi. Buradaki tüm jar dosyalarını buradan 3.6.0 sürümündeki stanford core NLP sitesinden indirerek sabitledim. Ve ithalat ifadelerden birini

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

SentimentCoreAnnotations.AnnotatedTree.class olarak değiştirildi bu değişiklikler benim bütün hatalar çözüldükten

SentimentCoreAnnotations.SentimentAnnotatedTree.class

için değiştirilmesi gerekir.

İlgili konular