2009-05-21 52 views
26

输入标题后出现的相关问题以及查看问题时出现在右侧栏中的相关问题似乎暗示了非常恰当的问题。 Spolsky在一次演讲中表示,Stack Overflow只对SQL进行搜索,并且不使用特殊算法。Stack Overflow相关问题算法

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

回答

7

相关问题侧边栏会针对每个问题的标签来构建(基于标签重叠排名它们可能,所以5个标签通用> 4个标签通用等)。

其余的将建立在适合自然语言处理的启发式算法上。这些在通用目的语言中通常不是很好,但是一旦将词汇缩减到诸如编程之类的单个技术领域,其中大多数都非常好。

6

看看波特为stemming算法,如果你正在寻找“相关”的算法。

一种英语词干,例如, 应确定字符串“猫”(和 可能“猫爪”,“斤”等)的基础上,根“猫”作为 和 “词干“,”干扰“,”干扰“为基于”词干“的 。干扰算法 将“钓鱼”,“钓鱼”, “鱼”和“渔夫”这两个词缩写为根鱼字, “鱼”。

一旦处理完文档并完成了对其的处理,就可以通过计数将干扰词编入索引,然后与其他文档进行比较。这是解决这个问题的最基本的方法。

也要照顾到忽略stop words像“的”“的”,“一个”等

-1

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

0

这样的问题可以通过制作词干的“词组”来解决。这基本上是一个字数向量。对这些词进行预处理(词干)并用它们在句子中出现的概率进行加权(“该词”比“概率”具有更高的概率,因此应该加权得更小)。然后,你可以将这个词袋看作是欧几里得空间中的一个矢量,或者作为一个概率密度的样本。

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

18

如果你听Stack Overflow podcast 32(遗憾的是抄本没有太多内容),你可以听到杰夫阿特伍德谈论他是如何做到的。

好像算法是这样的:

  • 以问题
  • 在英语中取出最常用的词
  • (从列表中,他从谷歌获得)提交一份全面的文本搜索在SQL Server 2008中的全文搜索引擎

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

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