【问题标题】:Efficient algorithm for finding related submissions查找相关提交的高效算法
【发布时间】:2010-12-06 06:48:07
【问题描述】:

我最近启动了我的humble side project,并希望在查看提交时添加“相关提交”部分。就像 SO 在这里所做的一样 - 见右栏,标题为“相关”

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

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

【问题讨论】:

    标签: c# database performance algorithm memory


    【解决方案1】:

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

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

    接下来,我们拆分/标记当前提交的标题并删除“停用词”。
    我从 google 看到了停用词列表,但现在我将停用词定义为:[“of”、“a”、“the”、“in”]

    示例:
    标题“有史以来最好的提交”
    结果数组:[“The”、“Best”、“Submission”、“of”、“All”、“Times”]
    删除停用词:[“Best”、“Submission”、“All”、“Times”]

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

    你怎么看? (要温柔!)

    【讨论】:

      【解决方案2】:

      如果我理解得很好,您需要一种技术来确定两个帖子是否彼此“相似”。您可能希望为此使用概率模型:

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

      我们的想法是,如果两个帖子共享很多“不常见”的词,那么他们可能在谈论同一个主题。为了检测不常见的单词,根据您的应用程序,您可以使用通用频率表,或者更好的是,在您的帖子单词的宇宙中自己构建它(但您需要有足够多的频率才能获得相关的内容) .

      我不会限制自己的标题和标签,但我会在研究中过度重视它们​​。

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

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

      【讨论】:

        猜你喜欢
        • 2011-06-17
        • 1970-01-01
        • 1970-01-01
        • 2020-11-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多