Php 如何构建';相关问题';引擎?

Php 如何构建';相关问题';引擎?,php,mysql,lamp,recommendation-engine,Php,Mysql,Lamp,Recommendation Engine,我们的一个较大的网站有一个部分,用户可以向网站所有者发送问题,由其员工亲自评估。 当同一个问题经常出现时,他们可以将此特定问题添加到Faq中 为了防止他们每天收到几十个类似的问题,我们想在这个网站上提供一个类似于“相关问题”的功能(堆栈溢出) 有哪些方法可以构建这种特性? 我知道我应该以某种方式评估问题,并将其与常见问题解答中的问题进行比较,但这种比较是如何工作的?关键词是否被提取?如果是,如何提取 可能值得一提的是,这个网站是建立在灯塔上的,因此这些都是可用的技术 谢谢 我不知道堆栈溢出是如何

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

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

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

可能值得一提的是,这个网站是建立在灯塔上的,因此这些都是可用的技术


谢谢

我不知道堆栈溢出是如何工作的,但我猜它使用标记查找相关问题。例如,在这个问题上,前几个相关问题都有标签
推荐引擎
。我猜稀有标签上的匹配比普通标签上的匹配更重要


您可能还想查看。

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


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

换句话说,如果有人在查询中输入了“我想买一头大象”,那么在查询中,单词“大象”可能是语料库中最不常见的单词。“买”可能是下一个。因此,您可以根据文档中包含“大象”一词的数量和包含“购买”一词的数量对文档(在您的例子中是以前的查询)进行排序。“I”、“to”和“an”可能在禁止名单中,所以你完全忽略它们。您可以根据匹配词的数量对每个文档(在您的例子中是上一个查询)进行排序(根据逆文档频率进行加权,即不常见词的高权重),并显示前几个

我已经过于简单化了,你需要仔细阅读这篇文章才能把它做好,但是用一种简单的方式实现它并不是非常复杂。维基百科页面可能是一个很好的起点:


如果您在一个灯堆中工作,那么您应该能够充分利用。我相信这对TF-IDF的原则是有效的,并且应该可以很容易地创建您想要的“相关问题”。

有一本很棒的O'Reilly书,涵盖了小组发现、建议和其他类似主题。从内存来看,这些示例是用Perl编写的,但我发现从PHP背景中很容易理解,并且在几个小时内就构建了类似于您所追求的东西


Yahoo在

上有一个关键字提取器webservice,可能是标签集之间的交集大小。我在O'reilly的p.C.I.预览中看到的示例是Python。可能是