堆栈溢出相关问题算法[关闭]

Posted

技术标签:

【中文标题】堆栈溢出相关问题算法[关闭]【英文标题】:Stack Overflow Related questions algorithm [closed] 【发布时间】:2010-10-27 20:47:25 【问题描述】:

输入标题后出现的相关问题,以及查看问题时右侧栏中的问题似乎都在暗示非常贴切的问题。

Spolsky 在一次演讲中说,Stack Overflow 只对其进行 SQL 搜索,不使用特殊算法。

存在哪些算法可以在这种情况下给出好的答案。 在这种情况下如何进行数据库搜索?使标题可搜索并搜索关键字或搜索标签和那些在顶部有很多投票的问题?

【问题讨论】:

【参考方案1】:

如果您收听 Stack Overflow podcast 32(不幸的是,成绩单并没有太多内容),您可以听到 Jeff Atwood 讲述了他是如何做到的。

算法好像是这样的:

回答问题 删除最常用的英语单词(从他从 google 获得的列表中) 向 SQL Server 2008 全文搜索引擎提交全文搜索

关于全文搜索的更多细节可以在这里找到:http://msdn.microsoft.com/en-us/library/ms142571.aspx

现在这可能已经过时了 - 他们正在讨论转向更好/更快的全文搜索,例如 Lucene,我隐约记得 Jeff 在播客中说这已经完成了。

【讨论】:

【参考方案2】:

相关问题侧边栏将建立在每个问题的标签上(可能是根据标签重叠对它们进行排名,因此共有 5 个标签 > 共有 4 个标签等)。

其余部分将建立在适用于自然语言处理的启发式和算法之上。这些在通用语言中通常不是很好,但是一旦将词汇减少到编程等单一技术领域,它们中的大多数都非常好。

【讨论】:

标签重叠可能不是唯一涉及的东西;因为这个问题的最相关问题与这个问题没有共同的标签。:) 最上面的问题(有没有算法告诉你...)有标签nlp,和这个问题一样还有另外两个标签。下面的一个有 nlp 和 4 个其他标签。 #3 有 nlp、4 个其他标签,并且比 #2 更少的支持。不过还有一些别的东西,因为 #4 有 nlp、3 个其他标签和比 #3 更多的赞成票,所以可能对标题也进行了一些处理 :)【参考方案3】:

如果您想了解“相关”算法,请查看 Porter stemming for a stemming 算法。

英语词干分析器,例如, 应该识别字符串“cats”(和 可能是“catlike”、“catty”等)作为 基于根“猫”,和 “stemmer”、“stemming”、“stemmed”为 基于“干”。词干算法 减少单词“钓鱼”,“钓鱼”, “鱼”和“渔夫”到词根, “鱼”。

处理完文档并对其进行词干提取后,您可以按计数对词干词进行索引,然后与其他文档进行比较。这是解决这个问题的最基本的方法。

还要注意忽略stop words,如“the”、“an”、“of”等。

【讨论】:

【参考方案4】:

这篇文章会帮助你Is there an algorithm that tells the semantic similarity of two phrases

【讨论】:

事实上这是目前排名最高的相关问题;) @SillyMonkey 正是我要说的! 哈哈我明白了!这很有趣【参考方案5】:

我不知道 SO 是如何实现的,但我的直觉是他们使用了approximate string matching 的变体。

【讨论】:

【参考方案6】:

这些问题可以通过制作词干词的“词袋”来解决。这基本上是一个字数向量。这些词被预处理(词干)并根据它们在句子中出现的概率加权(“the”的概率高于“probability”,因此应该减少加权)。然后,您可以将这个词包感知为欧几里得空间中的向量或概率密度的样本。

您可以将算法应用为最近邻搜索或语义哈希。后者似乎是 SOTA(参见http://www.cs.toronto.edu/~rsalakhu/papers/semantic_final.pdf)。

【讨论】:

以上是关于堆栈溢出相关问题算法[关闭]的主要内容,如果未能解决你的问题,请参考以下文章

使用 JWT 身份验证登录时堆栈溢出 [关闭]

Java分治算法堆栈溢出错误

堆栈溢出格式如何工作? [关闭]

堆栈溢出所需的外部 JavaScript 问题 [关闭]

OpenGL应用程序导致d3d11.dll中的堆栈溢出[关闭]

如何在我的递归快速排序算法中防止堆栈溢出