去复制n组克数

时间:2013-09-30 13:28:39

标签: algorithm nlp aggregate deduplication

我需要想出一种方法来为用户排序和显示最相关的数据。我们的数据包含从社交媒体中提取的多个n-gram。我们称这些为主题'。

我面临的问题是数据包含大量重复。虽然每个String都不是另一个String的直接副本,但它们是子集。对于用户,此信息显示重复。这是一些示例数据:

{
    "count": 1.0, 
    "topic": "lazy people"
}, 
{
    "count": 1.0, 
    "topic": "lazy people taking"
}, 
{
    "count": 1.0, 
    "topic": "lazy people taking away food stamps"
}

边缘情况是短语"懒人"可以从其他短语中提取。例如,"懒惰的人很开心"。使用最小的公分母("懒人"在这种情况下)似乎不是一个好主意,因为最终用户不会被呈现出不同的背景("带走食物邮票"并且"很开心")。

另一方面,服用最长的N-Gram可能是太多的信息。在我上面给出的例子中,这似乎是合乎逻辑的。但是,总是可能不成立。

我的总体目标是以提供信息和排名的方式呈现这些数据。

是否有任何现有的解决方案和相应的算法来解决这类问题?

注意:最初我的问题非常含糊不清。事实上,这导致我一起改变这个问题,因为我真正需要的是指导我的最终结果应该是什么。

注意2:如果我误用了任何条款或者应该修改此问题的标题以增强其他人搜索此类问题的答案,请告诉我。

2 个答案:

答案 0 :(得分:2)

这是一个难题,解决方案往往是特定于应用程序的。通常,您收集的不仅仅是n-gram和计数。例如,如果一个人或许多人使用了特定的n-gram,通常很重要。也就是说,如果我经常发表海报并对木雕充满热情,那么n-gram“木雕”可能会成为一个常用术语。但我是唯一关心它的人。另一方面,可能有很多人进入油画,但他们的发布相对较少,所以n-gram“油画”的数量接近于“木雕”的数量。但显而易见的是,“油画”将与您的用户相关,而“木雕”则不然。如果没有关于n-gram来自哪些页面的信息,就不可能说出哪些页面与更多用户相关。

在文档语料库中识别最相关短语的常用方法称为TF-IDF:术语频率 - 逆文档频率。你看到的大多数描述都关注单个词,但它很简单,可以将其扩展到n-gram。

当然,这假定您可以识别某种单独的文档。您可以将每个帖子视为文档,也可以将用户的所有帖子分组为较大的文档。或者也许一天内的所有帖子都被视为文档。您如何识别文件取决于您。

一个简单的TF-IDF模型并不难构建,它可以为第一次切割提供良好的结果。您可以针对示例语料库运行它以获取基准性能编号。然后你可以添加改进(参见维基百科文章和相关页面),总是根据纯TF-IDF基线测试它们的性能。

鉴于我所拥有的信息,这就是我要开始的地方。

答案 1 :(得分:0)

考虑使用图表数据库,其中包含一个包含N-Grams元素的单词表;以及包含N-Grams中包含的单词的N-Grams的表格。

作为实现,您可以使用同时具有Python库的neo4j: http://www.coolgarif.com/brain-food/getting-started-with-neo4j-in-python