6

我们其中一个较大的网站有一个部分,用户可以在其中向网站所有者发送问题,由他的员工亲自评估。当经常出现相同的问题时,他们可以将此特定问题添加到常见问题解答中。

为了防止他们每天收到几十个类似的问题,我们想提供一个类似于本网站“相关问题”的功能(堆栈溢出)。

有什么方法可以构建这种功能?我知道我应该以某种方式评估问题并将其与常见问题解答中的问题进行比较,但是这种比较如何工作?是否提取了关键字?如果是,如何提取?

可能值得一提的是,这个站点是建立在 LAMP 堆栈上的,因此这些是可用的技术。

谢谢!

4

5 回答 5

4

如果你想自己从头开始构建这样的东西,你会使用一种叫做 TF/IDF:词频/逆文档频率的东西。这意味着,为了极大地简化它,您可以在查询中找到在整个语料库中不常见的单词,并找到包含这些单词的文档。

换句话说,如果有人输入了一个带有“我想买一只大象”的查询,那么在查询中的单词中,“大象”这个词可能是你的语料库中最不常见的词。“购买”可能是下一个。因此,您对文档(在您的情况下是先前的查询)进行排名,它们包含多少“大象”一词,然后它们包含多少“购买”一词。单词“I”、“to”和“an”可能在停用列表中,所以你完全忽略它们。您根据有多少匹配词(根据逆文档频率加权 - 即不常见词的高权重)对每个文档(在您的情况下是先前的查询)进行排名并显示前几个。

我已经过分简化了,您需要阅读此内容才能使其正确,但以简单的方式实现并不是非常复杂。维基百科页面可能是一个不错的起点:

http://en.wikipedia.org/wiki/Tf%E2%80%93idf

于 2010-02-02T08:48:02.540 回答
3

我不知道 Stack Overflow 是如何工作的,但我猜它使用标签来查找相关问题。例如,在这个问题上,前几个相关问题都带有标签recommendation-engine。我猜想稀有标签上的匹配比普通标签上的匹配更重要。

您可能还想查看词频-逆文档频率

于 2010-02-02T08:26:51.620 回答
1

假设您在 LAMP 堆栈中工作,那么您应该能够充分利用MySQL 的全文搜索功能。我相信这适用于 TF-IDF 原则,并且应该可以很容易地创建您想要的“相关问题”。

于 2010-02-02T10:29:59.187 回答
1

有一本很棒的 O'Reilly 书 - Programming Collective Intelligence - 涵盖了小组发现、推荐和其他类似主题。根据记忆,示例是在 Perl 中,但我发现它很容易理解来自 PHP 背景,并且在几个小时内构建了类似于您所追求的东西。

雅虎在http://developer.yahoo.com/search/content/V1/termExtraction.html有一个关键字提取器网络服务

于 2010-02-02T10:49:00.487 回答
0

您可以使用拼写检查,其中语料库是现有常见问题解答条目的标题/文本:

你如何实现“你的意思是”?

于 2010-02-02T08:29:56.920 回答