我正在尝试确定关于推文的电视剧收视率。因此,我有一个Twitter数据,包括推文,提及,ArrayLists中的主题标签,通过使用Java与Twitter4J库分开。 我的目的是首先清理推文,然后使用自然语言处理进行分析。 在清理阶段,存在重复的推文,例如来自不同用户的转推以及来自一个用户的多个推文,应该进行清理。 在分析阶段,我将使用一个NLP库来解析根,以便能够确定评级。到目前为止,我已经编写了这段代码:
public static void main(String[] args) {
// TODO Auto-generated method stub
new TwitterApplication().retrieve();
}
public void retrieve(){
logger.info("Retrieving tweets...");
ConfigurationBuilder builder = new ConfigurationBuilder();
builder.setOAuthConsumerKey(CONSUMER_KEY);
builder.setOAuthConsumerSecret(CONSUMER_SECRET);
Configuration configuration = builder.build();
TwitterFactory factory = new TwitterFactory(configuration);
Twitter twitter = factory.getInstance();
ArrayList<String> tweetList = new ArrayList<String>();
ArrayList<String> hashtagList = new ArrayList<String>();
ArrayList<String> mentionList = new ArrayList<String>();
Query query = new Query("The Walking Dead");
Date date=new Date();
String modifiedDate= new SimpleDateFormat("2015-11-25").format(date);
String modifiedDate2= new SimpleDateFormat("2015-11-26" ).format(date);
query.setSince(modifiedDate);
query.setUntil(modifiedDate2);
query.lang("en");
query.setCount(100);
System.out.println("key:" + twitter.getConfiguration().getOAuthConsumerKey());
System.out.println("secret: " + twitter.getConfiguration().getOAuthConsumerSecret());
AccessToken accessToken = new AccessToken("**************", "***********");
twitter.setOAuthAccessToken(accessToken);
try {
QueryResult result = twitter.search(query);
System.out.println("Count : " + result.getTweets().size()) ;
for (Status tweet : result.getTweets()) {
for(HashtagEntity hashtag : tweet.getHashtagEntities()){
//System.out.println(hashtag);
hashtagList.add(hashtag.getText().toString());
}
for(UserMentionEntity mention : tweet.getUserMentionEntities()){
mentionList.add(mention.getScreenName().toString());
}
//try to fetch only one of the retweets, but it doesn't work
/*
int once=0;
if(tweet.isRetweeted() && once==0)
{
tweetList.add(tweet.getText());
once++;
}
*/
tweetList.add(tweet.getText());
}
} catch (TwitterException e) {
e.printStackTrace();
System.out.println("Failed to search tweets" + e.getMessage());
}
System.out.println("Tweets:");
for(String t :tweetList){
System.out.println(t);
}
System.out.println("Hashtags:");
for(String h:hashtagList){
System.out.println( h);
}
System.out.println("Mentions:");
for(String m:mentionList){
System.out.println(m);
}
logger.info("done! ");
}
正如您所见,我使用ArrayLists暂时存储它们。我想问的是,在清理阶段之后我应该将它们存储在MySQL,MongoDB等数据库中吗?如果我应该,我怎样才能有效地存储它们?考虑到我将稍后分析(根据情绪分析获得根据并给出积分)推文。
答案 0 :(得分:1)
存储与否的问题主要取决于您计划在事后对数据做什么。通常因为在推文上使用NLP(标记化,删除停用词,词干等)可能需要一些时间,因此存储处理过的数据可能是明智之举。但是,如果您只需要一次数据并在其上计算一些指标,则可能根本不需要存储它。
如果您希望将来处理对已处理数据的查询,例如&#34;请给我在日期X&#34;之前发布的所有处理过的推文,我建议您使用存储此信息的数据库。 值得一看的是hibernate,它提供了一种简单而有条理的方式来与数据库交谈。如果推文量很大(以百万计),您将需要寻找可扩展的数据库(但是现在大多数大型数据库都提供此功能)。
如果您不需要处理已处理推文的查询,您也可以将它们存储到XML / JSON文件中,这可能更容易。