Я работаю над проектом, который анализирует твиты в реальном времени и определяет настроения пользователя. Итак, я использую 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 к. Любая помощь?
В нем много файлов jar. Какой файл/файлы jar следует включить? –
@LalindaSampath: вам нужны '' api'' и '' простые'' банки, о которых я упоминал выше. – ck1