2014-05-06 21 views
5

Ben java ile stanford sentiment nlp kütüphanesi kullanarak duygu analizi üzerinde çalışıyorum. Ama kodu çalıştırdığımda hatayı alıyorum. Anlayamıyorum.java ile stanford duygu analizi entegre ederken hata alma

package com.nlp; 

import java.util.Properties; 
import edu.stanford.nlp.ling.CoreAnnotations; 
import edu.stanford.nlp.pipeline.Annotation; 
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; 

public class SemanticAnalysis { 
    public static void main(String args[]) { 
     sentimentAnalysis sentiment = new sentimentAnalysis(); 
     sentiment.findSentiment("france is a good city"); 
    } 
} 

class sentimentAnalysis { 
    public String findSentiment(String line) { 

     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)) { 
       Tree tree = sentence.get(SentimentCoreAnnotations.AnnotatedTree.class); 
       int sentiment = RNNCoreAnnotations.getPredictedClass(tree); 
       String partText = sentence.toString(); 
       if (partText.length() > longest) { 
        mainSentiment = sentiment; 
        longest = partText.length(); 
       } 
      } 
     } 
     if (mainSentiment == 2 || mainSentiment > 4 || mainSentiment < 0) { 
      return null; 
     } 
     return ""; 
    } 
} 

Ama kod çalıştırıyorum zaman ben aşağıdaki hatayı alıyorum şu şekildedir:

Benim kodudur.

Exception in thread "main" java.lang.NoClassDefFoundError: org/ejml/simple/SimpleBase 
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) 
+2

tüm Sınıfyolu içine kütüphaneleri içeriyordu? – markusw

cevap

4

Sen ejml-0.23.jar eksik, sınıf yoluna ekleyin ve çalışması gerekir.

+0

Sürüm burada anahtardır. Çok yeni bir sürümünü kullanmaya çalışırsanız (en son 0.29 yazısından itibaren), yeni bir RoundNotFoundException iletisiyle sonlanırsınız. – demongolem

+0

teşekkürler bana çok yardımcı oldu – user1

4

classpath ürününüzde Efficient Java Matrix Library (EJML) referansını kaçırıyorsunuz.

BTW. Daha açık kodlar elde etmek için kodunuzu daha küçük tek görev yöntemlerine bölmeyi deneyin.

class SentimentAnalysis { 

    public String findSentiment(String line) { 

     if(line == null || line.isEmpty()) { 
      throw new IllegalArgumentException("The line must not be null or empty."); 
     } 

     Annotation annotation = processLine(line); 

     int mainSentiment = findMainSentiment(annotation); 

     if(mainSentiment < 0 || mainSentiment == 2 || mainSentiment > 4) { //You should avoid magic numbers like 2 or 4 try to create a constant that will provide a description why 2 
      return null; //You shold avoid null returns 
     } 

     return ""; 

    } 


    private int findMainSentiment(Annotation annotation) { 

     int mainSentiment = Integer.MIN_VALUE; 
     int longest = Integer.MIN_VALUE; 


     for (CoreMap sentence : annotation.get(CoreAnnotations.SentencesAnnotation.class)) { 

      int sentenceLength = String.valueOf(sentence).length(); 

      if(sentenceLength > longest) { 

      Tree tree = sentence.get(SentimentCoreAnnotations.AnnotatedTree.class); 

      mainSentiment = RNNCoreAnnotations.getPredictedClass(tree); 

      longest = sentenceLength ; 

      } 
     } 

     return mainSentiment; 

    } 


    private Annotation processLine(String line) { 

     StanfordCoreNLP pipeline = createPieline(); 

     return pipeline.process(line); 

    } 

    private StanfordCoreNLP createPieline() { 

     Properties props = createPipelineProperties(); 

     StanfordCoreNLP pipeline = new StanfordCoreNLP(props); 

     return pipeline; 

    } 

    private Properties createPipelieProperties() { 

     Properties props = new Properties(); 
     props.setProperty("annotators", "tokenize, ssplit, parse, sentiment"); 

     return props; 

    } 


} 
-1

Aynı hatayı alıyorum ve tüm jar dosyalarını ekledim ve kod çalıştırıldı. Sonra bir-bir kavanoz dosyasını kaldırarak ve kodu çalıştırarak buldum ve cevap aşağıdaki dosyaları ekledi.

Image eklediniz mi enter image description here

İlgili konular