是否有MongoDB趋势主题宝石?

时间:2011-12-21 17:46:02

标签: ruby-on-rails ruby mongodb mongoid trending

我在MongoDB中有一组文档,其中包含有关推文大小的“描述”值。我需要从中生成趋势主题列表。显然这是一个已解决的问题,但我无法找到一个明确的答案/宝石,无需自己编写代码即可完成工作。

我正在使用ruby& mongoid在我的应用程序中。

是否有任何红宝石宝石可以帮助或处理这个?感谢。

2 个答案:

答案 0 :(得分:6)

我知道没有这样的宝石,但这是你可以为自己写的算法:

  1. 从文本中提取n-grams。由于文本很小(你说的推文大小)提取所有n-gram,这里没有限制。

    "I eat icecream" => {(I), (eat), (icecream), (I eat), (eat icecream), (I eat icecream)}

  2. 为每个文本的n-gram计算TF-IDF权重向量

    {(I):0.1, (eat):0.01, (icecream):0.2, (I eat):0.12, (eat icecream):0.001, (I eat icecream):0.00012}

  3. 使用cosine similarity作为incremental clustering算法的度量函数,可以在Weka上编写JRuby

  4. 按人口规模排序所有群集。最大集群中心的n-gram是你的时髦话题。

答案 1 :(得分:3)

快速搜索rubygems.org揭示你将不得不做一些编程。这是一件好事,因为一般来说,检测趋势的系统要么难以设置和调整,要么在猜测应用程序中的“趋势”是什么时会非常糟糕。

我将对你的申请作出一些假设。

假设用户使用哈希标记(#)对其推文进行自我分类。另外,让我们继续说这些哈希标签的排序计数将决定主题是否趋势。

现在让我们谈谈计算机科学部分。根据我们上面的假设,您需要能够快速查询和排序一组主题标签,以确定趋势是什么。

您正在使用MongoDB和mongoid(使用rails),因此最简单的方法是创建一个包含其使用计数的标记文档的集合。在标记和计数上创建索引。

当有人发推文时,弄清楚哈希标签是什么,在标签集合中查找并增加计数。要确定什么是趋势,请查询标签集合并按计数排序。这将为您提供所有时间趋势哈希标记。

如果您想要更具体,而不是仅仅存储计数,存储计数按时间增量(周,日,小时等)分解,可能单独存储它们。您可以创建表示时间增量而不是单个标记的文档,并将所有标记存储在其中。

{
    start: "start datetime",
    end: "end datetime",
    tags: {
        awesome: 3,
        cool: 2,
        boring: 2
    }
}

您还可以使用上限集合。希望有所帮助,所有这一切都取决于你想要做什么。你可以变得非常疯狂,并通过时间衰减计算趋势等。你可以阅读reddit或黑客新闻代码,以便了解它是什么样的。