用于查找相关提交的高效算法

时间:2009-10-13 11:05:20

标签: c# database performance algorithm memory

我最近发布了我的humble side project,并希望在查看提交时添加“相关提交”部分。正如SO在这里做的那样 - 见右栏,标题为“相关”

考虑到每个提交都有一个标题和一组标签,最有效(最佳结果),最有效(快速,内存友好)的方式来查询数据库的相关提交?

我可以想到一种方法来做到这一点(我将作为答案发布),但我很想知道别人有什么要说的。或许已经有了实现这一目标的标准方法?

2 个答案:

答案 0 :(得分:3)

这是我的两分钱解决方案:
为了获得最佳输出,我们需要在查询结果上加上“权重”。

首先,假设数据库中的每个提交的权重为零。 然后,如果“池”中的提交与当前提交共享一个标记,我们将向找到的提交添加+3。因此,如果发现另一个提交与当前提交共享两个标签,我们将+6添加到权重。

接下来,我们拆分/标记当前提交的标题并删除“停用词” 我已经看到谷歌的停止词列表,但是现在我将我的停止词定义为:[“of”,“a”,“the”,“in”]

例:
标题“所有时间的最佳提交”
结果数组:[“The”,“Best”,“Submission”,“of”,“All”,“Times”] 删除停用词:[“最佳”,“提交”,“全部”,“时间”]

然后我们在数据库中查询包含任何提到的标题的提交,并为每个结果添加权重:+2
最后按重量对列表进行排序,并取得前N个结果。

你怎么看? (温柔!)

答案 1 :(得分:0)

如果我理解得很好,你需要一种技巧来找出两个帖子是否相互“相似”。您可能希望使用概率模型:

http://en.wikipedia.org/wiki/Mutual_information

这个想法是说,如果两个帖子共享很多“不常见”的话,他们可能就同一主题发表意见。对于检测不常见的单词,根据您的应用程序,您可以使用一般频率表,或者更好,自己在帖子的单词世界中构建它(但是你需要有足够的它们才能有相关的东西)

我不会限制自己的标题和标签,但我会在研究中超重。

这种想法在垃圾邮件过滤中非常常见。不幸的是,我有时间进行全面审核,但快速谷歌搜索给出了:

http://www.aclweb.org/anthology/P/P04/P04-3024.pdf karlmicha.googlepages.com/acl2004_poster.pdf