我最近发布了我的humble side project,并希望在查看提交时添加“相关提交”部分。正如SO在这里做的那样 - 见右栏,标题为“相关”
考虑到每个提交都有一个标题和一组标签,最有效(最佳结果),最有效(快速,内存友好)的方式来查询数据库的相关提交?
我可以想到一种方法来做到这一点(我将作为答案发布),但我很想知道别人有什么要说的。或许已经有了实现这一目标的标准方法?
答案 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