Stack Overflow相关问题算法

时间:2009-05-21 07:26:47

标签: sql search full-text-search nlp

输入标题后出现的相关问题以及查看问题时位于右侧栏中的相关问题似乎都提出了非常恰当的问题。

Spolsky在一次演讲中说,

Stack Overflow只对它进行SQL搜索并且不使用任何特殊算法。

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

7 个答案:

答案 0 :(得分:18)

如果你听Stack Overflow podcast 32(不幸的是成绩单没有多少),你可以听到杰夫阿特伍德谈到他是如何做到的。

似乎算法类似于:

  • 提出问题
  • 删除最常用的英文单词(来自他从谷歌获得的列表)
  • 将全文搜索提交到SQL Server 2008全文搜索引擎

有关全文搜索的更多详细信息,请访问:http://msdn.microsoft.com/en-us/library/ms142571.aspx

这可能已经过时了 - 他们正在谈论转向更好/更快的全文搜索,例如Lucene,我依稀记得杰夫在播客中说这已经完成了。

答案 1 :(得分:8)

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

其余的将基于适用于自然语言处理的启发式算法和算法。这些在通用语言中通常不是很好,但是一旦词汇量缩减到单个技术领域(例如编程),它们中的大多数都非常好。

答案 2 :(得分:6)

如果您想要进入“相关”算法,请查看Porter为stemming算法提取的内容。

  

例如,英语的词干分析器,   应该识别字符串“猫”(和   可能是“catlike”,“catty”等)   基于根“猫”,和   “词干”,“词干”,“词干”为   基于“干”。一种词干算法   减少“钓鱼”,“钓鱼”等字样,   “鱼”和“渔民”的根词,   “鱼”。

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

还要注意忽略{“3”},如“the”,“an”,“of”等。

答案 3 :(得分:5)

答案 4 :(得分:1)

我不知道SO如何实现它,但我的预感是他们使用approximate string matching的变体。

答案 5 :(得分:0)

这些问题可以通过制作词干的“词袋”来解决。这基本上是一个字数矢量。对这些单词进行预处理(词干)并加权,并将其概率发生在句子中(“the”的概率高于“概率”,因此应加权较少)。然后,您可以将这个词语作为欧几里德空间中的向量或作为概率密度的样本来感知。

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

答案 6 :(得分:-1)

使用SQL Server的全文搜索功能。