Stack Overflow相关问题算法

问题描述 投票:26回答:7

输入标题后出现的相关问题,以及查看问题时右侧栏中显示的相关问题似乎表明非常恰当的问题。

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

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

sql search full-text-search nlp
7个回答
8
投票

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

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


18
投票

如果你听Stack Overflow podcast 32(不幸的是成绩单没有多少),你可以听到Jeff Atwood对他如何做到这一点。

似乎算法类似于:

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

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

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


6
投票

如果您想进入“相关”算法,请查看Porter为stemming算法进行干预。

例如,英语的词干分析器应该根据根“cat”和“stemmer”,“stemming”,“stemmed”识别字符串“cats”(可能还有“catlike”,“catty”等)。基于“干”。词干算法将词语“钓鱼”,“钓鱼”,“鱼”和“渔夫”简化为词根“鱼”。

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

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



1
投票

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


0
投票

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

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


-1
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.