29

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

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

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

4

6 回答 6

19

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

看起来算法是这样的:

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

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

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

于 2009-05-21T08:48:24.147 回答
8

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

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

于 2009-05-21T07:40:55.390 回答
7

如果您想了解“相关”算法,请查看 Porter stemming 的词干算法。

例如,英语词干分析器应根据词根“cat”识别字符串“cats”(可能还有“catlike”、“catty”等),并将“stemmer”、“stemming”、“stemmed”识别为基于“干”。词干算法将单词“fishing”、“fished”、“fish”和“fisher”简化为词根“fish”。

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

还要注意忽略停用词,如“the”、“an”、“of”等。

于 2009-05-21T08:11:05.390 回答
6

这篇文章将帮助你有没有一种算法可以告诉两个短语的语义相似度

于 2009-05-21T07:34:23.967 回答
1

我不知道 SO 是如何实现的,但我的直觉是他们使用了近似字符串匹配的变体。

于 2009-05-21T07:32:34.737 回答
0

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

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

于 2009-05-21T08:46:42.137 回答