PHP计算 - 获得相关性分数

时间:2011-02-25 15:20:24

标签: php

我有一个将数据存储在数据库中的应用程序。我需要搜索功能来处理这个数据库。

为了实现这一点,我需要一个“相关性”分数,这个分数是根据一组标准计算出来的,然后输出为一个可用于订购一组数据的值。

例如,用户输入三个关键字:X,Y和Z - 我需要根据数据库条目生成分数。我希望这些标准与每次出现的次数有关。

示例:

数据库输入A - X出现8次Y出现一次,Z出现一次。得分为10分。

数据库输入B - X出现24次Y未出现且Z未出现。得分为24分。

这是我的问题。数据库输入A基于XYZ的搜索更相关,因为它具有所有三个数据库条目,而不仅仅是一个,但标准计算会将数据库条目B分类为更相关。

我需要找出一种计算结果的方法,并根据每个关键字的出现次数给出结果的数字分数,同时根据显示多个关键字的结果给出更高的分数,指数级(即输入10个关键字会显示结果,其中所有10个显示在具有大量一个的上面的那些)。

我需要用PHP来实现这一点,它将检索我的数据库结果并将它们反馈到我的网站页面。

2 个答案:

答案 0 :(得分:2)

您可以计算两个相关性分数。一个根据提供匹配的字段数进行评级,然后定期“找到匹配项”。从您的示例中可以看出:

Example A - field_count: 3, match_count: 10
Example B - field_count: 1, match_count: 24

然后让您的查询执行

ORDER BY field_count, match_count

以便与更多字段的匹配首先排序。

答案 1 :(得分:0)

由于关键字的(第一个)存在非常重要,因此给它一个比其他事件更好的分数。例如:

$score = 0;
foreach ($keywords as $count) {
  $score += $count==0 ? 0 : 1000000;
  $score += $count;
}

如果您将此算法应用于您的示例,您将拥有:

Entry1 ---> (1000000 + 8) + (1000000 + 1) + (1000000 + 1) = 3000010
Entry2 ---> (1000000 + 24) = 1000024

因此,Entry1的得分比Entry2要好。