2016-04-23 3 views
1

Я работаю над проектом, который анализирует твиты в реальном времени и определяет настроения пользователя. Итак, я использую twitter4j для получения твитов в реальном времени и передает эти твиты в NLP Stanford Core. Я получаю твиты в реальном времени правильно. Но когда я пишу эти твиты в Core NLP Стэнфорда, я получаю ошибку во время выполнения.Исключение из потока "Twitter4J Async Dispatcher [0]" java.lang.NoClassDefFoundError

PrintSampleStream Класс, который получает в режиме реального времени твитов с помощью twitter4j:

import javax.swing.JDialog; 
import javax.swing.JOptionPane; 

import javax.swing.Timer; 

import java.awt.event.ActionEvent; 
import java.awt.event.ActionListener; 

import twitter4j.*; 
import twitter4j.conf.*; 

public class PrintSampleStream { 

    private String twitter_handle; 

    PrintSampleStream() 
    { 
     twitter_handle = null; 
    } 

    PrintSampleStream(String tw) 
    { 
     twitter_handle = tw; 
    } 

    public void twitterConnector() throws TwitterException { 
     ConfigurationBuilder cb = new ConfigurationBuilder(); 
      cb.setDebugEnabled(true).setOAuthConsumerKey("bbbb") 
        .setOAuthConsumerSecret("bbbb") 
        .setOAuthAccessToken("bbbb") 
        .setOAuthAccessTokenSecret("bbbb"); 
      TwitterStream twitterStream = new TwitterStreamFactory(cb.build()) 
        .getInstance(); 
     StatusListener listener = new StatusListener() { 
      @Override 
      public void onStatus(Status status) { 
       System.out.println("@" + status.getUser().getScreenName() + " - " + status.getText()); 
       NLP.init(); 
       System.out.println(status.getText() + " : " + NLP.findSentiment(status.getText())); 
       //storeTweets(status.getText()); 
       //JOptionPane.showMessageDialog(null, status.getText()); 
      } 

      @Override 
      public void onDeletionNotice(StatusDeletionNotice statusDeletionNotice) { 
       System.out.println("Got a status deletion notice id:" + statusDeletionNotice.getStatusId()); 
      } 

      @Override 
      public void onTrackLimitationNotice(int numberOfLimitedStatuses) { 
       System.out.println("Got track limitation notice:" + numberOfLimitedStatuses); 
      } 

      @Override 
      public void onScrubGeo(long userId, long upToStatusId) { 
       System.out.println("Got scrub_geo event userId:" + userId + " upToStatusId:" + upToStatusId); 
      } 

      @Override 
      public void onStallWarning(StallWarning warning) { 
       System.out.println("Got stall warning:" + warning); 
      } 

      @Override 
      public void onException(Exception ex) { 
       ex.printStackTrace(); 
      } 
     }; 
     twitterStream.addListener(listener); 
     FilterQuery filtre = new FilterQuery(); 
     String[] keywordsArray = {twitter_handle}; 
     filtre.track(keywordsArray); 
     twitterStream.filter(filtre); 
    } 
} 

NLP класса, который подает в реальном времени твитов, полученные от twitter4j до ядра NLP Стэнфорда:

import edu.stanford.nlp.ling.CoreAnnotations; 
import edu.stanford.nlp.neural.rnn.RNNCoreAnnotations; 
import edu.stanford.nlp.pipeline.Annotation; 
import edu.stanford.nlp.pipeline.StanfordCoreNLP; 
import edu.stanford.nlp.sentiment.SentimentCoreAnnotations; 
import edu.stanford.nlp.trees.Tree; 
import edu.stanford.nlp.util.CoreMap; 

public class NLP { 
    static StanfordCoreNLP pipeline; 

    public static void init() { 
     pipeline = new StanfordCoreNLP("MyPropFile.properties"); 
    } 

    public static int findSentiment(String tweet) { 

     int mainSentiment = 0; 
     if (tweet != null && tweet.length() > 0) { 
      int longest = 0; 
      Annotation annotation = pipeline.process(tweet); 
      for (CoreMap sentence : annotation 
        .get(CoreAnnotations.SentencesAnnotation.class)) { 
       Tree tree = sentence.get(SentimentCoreAnnotations.SentimentAnnotatedTree.class); 
       int sentiment = RNNCoreAnnotations.getPredictedClass(tree); 
       String partText = sentence.toString(); 
       if (partText.length() > longest) { 
        mainSentiment = sentiment; 
        longest = partText.length(); 
       } 

      } 
     } 
     return mainSentiment; 
    } 
} 

Моя ошибка времени выполнения это:

@laliyaD - Lalinda feels tired 
Exception in thread "Twitter4J Async Dispatcher[0]" java.lang.NoClassDefFoundError: org/slf4j/LoggerFactory 
    at edu.stanford.nlp.pipeline.StanfordCoreNLP.<clinit>(StanfordCoreNLP.java:99) 
    at NLP.init(NLP.java:13) 
    at PrintSampleStream$1.onStatus(PrintSampleStream.java:38) 
    at twitter4j.StatusStreamImpl.onStatus(StatusStreamImpl.java:75) 
    at twitter4j.StatusStreamBase$1.run(StatusStreamBase.java:105) 
    at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source) 
    at java.lang.Thread.run(Unknown Source) 
Caused by: java.lang.ClassNotFoundException: org.slf4j.LoggerFactory 
    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) 
    ... 8 more 

На самом деле, я получаю твиты в реальном времени от twitter4 к. Любая помощь?

ответ

1

Вам необходимо скачать SLF4J (Simple Logging Facade для Java) и включить его в вашем пути к классам.

Для того, чтобы реально просматривать сообщения журнала из библиотеки НЛП, вам понадобятся не менее slf4j-api-1.7.21.jar и slf4j-simple-1.7.21.jar.

http://www.slf4j.org/download.html

+0

В нем много файлов jar. Какой файл/файлы jar следует включить? –

+0

@LalindaSampath: вам нужны '' api'' и '' простые'' банки, о которых я упоминал выше. – ck1

1

java.lang.NoClassDefFoundError: org/slf4j/LoggerFactory означает, что библиотека slf4j нужна в вашем пути к классу.

Если вы используете Maven, вы можете использовать эту зависимость:

<dependency> 
<groupId>org.slf4j</groupId> 
<artifactId>slf4j-simple</artifactId> 
<version>1.7.21</version> 
</dependency> 
+0

Я не использую maven. Можете ли вы рассказать мне, какие файлы следует включить в мой путь сборки Java из библиотеки slf4j? –

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

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