2016-04-23 26 views
1

私は、リアルタイムのつぶやきを分析し、ユーザーの気分を特定するプロジェクトに取り組んでいます。 私はtwitter4jを使ってリアルタイムのつぶやきを受け取り、これらのつぶやきをスタンフォードのコアNLPに送ります。リアルタイムのつぶやきを正しく受け取っています。しかし、私がStanfordのCore NLPにこれらのつぶやきを供給すると、実行時エラーが発生します。スレッド内の例外 "Twitter4J Async Dispatcher [0]" java.lang.NoClassDefFoundError

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クラススタンフォード大学のCore NLPにtwitter4jから受信したリアルタイムのツイートフィード:

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

私の実行時エラーをtwitter4jを使用して、リアルタイムのつぶやきを取得し

PrintSampleStreamクラスis:

@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からリアルタイムのつぶやきを取得していますj。どんな助け?

答えて

1

あなたはSLF4J(Java用のシンプルなロギングファサード)をダウンロードし、あなたのクラスパスに含める必要があります。

実際にNLPライブラリからログメッセージを表示できるようにするには、少なくともslf4j-api-1.7.21.jarslf4j-simple-1.7.21.jarが必要です。

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

+0

これにはたくさんのjarファイルがあります。どんなjarファイル/ファイルを含めるべきですか? –

+0

@LalindaSampath:上記の '' api''と '' simple''ジャーが必要です。 – 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を使用していません。 slf4jライブラリのJavaビルドパスにどのファイルを含めるべきか教えてください。 –

関連する問題