Ruby中的简单关键字/关键短语分析

时间:2011-10-09 15:58:46

标签: ruby twitter text-analysis

我想在包含特定主题标签的推文中创建一个简单的热门关键字或短语列表。

例如,对于所有带有'#justinbieber'主题标签的推文,我想获得这些推文中使用的前十个最受欢迎的单词和/或短语的有序列表,而忽略了通常的无关紧要,例如'和' ,''等等。它不一定是完美的,只是有意义的。

有哪些Ruby工具可用于执行文本分析?当然,分析部分不一定要特定于Twitter。

我很可能会定期使用给定的主题标签请求和存储推文,然后在给定的时间范围内对推文应用分析。

这项工作将在Heroku的Rails或Sinatra应用程序中完成,但分析将在rake任务或某种类型的预定作业中完成。我还没有决定如何存储推文。

1 个答案:

答案 0 :(得分:2)

我对通过JRuby使用OpenNLP非常满意。对于像这样简单的东西,更简单的方法也可能就足够了。让我们从Twitter搜索#justinbieber:

中随机发推文
s = "If u never give up and if u fight for everything that u want, u can live our dreams. #JustinBieber"

删除一些不必要的单词:

words = s.split(/\W/).reject(&:empty?) - %w(the and u our if for that)
# => ["If", "never", "give", "up", "fight", "everything", "want", "can", "live", "dreams", "JustinBieber"]

创建计数:

words.each_with_object(Hash.new{ |h,k| h[k] = 0}) { |w, h| h[w] += 1 }
#=> {"If"=>1, "never"=>1, "give"=>1, "up"=>1, "fight"=>1, "everything"=>1, "want"=>1, "can"=>1, "live"=>1, "dreams"=>1, "JustinBieber"=>1}

如果您对超过1条推文执行此操作,则计数会更有意义。此外,由于您已经拥有Ruby哈希,因此很容易将其存储在例如MongoDB集合。