“人格测验”风格对比[PHP]

时间:2011-11-12 19:27:00

标签: php algorithm similarity levenshtein-distance

我正在尝试考虑一种有效或合理的算法来获取用户提交的测试结果,并将它们与几个配置文件的值进行比较以找到匹配项(例如在线约会服务如何与您的答案相匹配配合)。

我真的不知道该怎么做。如果用户回答了10个关于他自己的问题并且有10个候选人与他匹配,我们正在通过数据库查看数千个比较。必须有更好的方法来做到这一点。

在我所做的研究中,也许我可以用Levenshtein距离函数完成这项工作,但我不知道该怎么做,因为我对此并不完全熟悉,我不明白好。但也许我可以做一些比较用户的结果串联到一个字符串(例如'AEBCDAABEAD')与每个候选人的答案并测量相似性的方式吗?

有什么建议吗?

非常感谢。

1 个答案:

答案 0 :(得分:4)

我认为使用确切的答案并不是一个足够灵活的解决方案,因为其他答案可能不会对某些配置文件类型产生深远的影响。 有1-2和3-4的人仍然会有一个不匹配的答案,即使这个人拿20-25是远离的。与Levensthein'AB'和'AC'的Afaik类似于'AZ'到'AB'。

Levensthein算法也是一个好主意,我猜你在某些情况下会得到更糟糕的匹配,如果你这样做基于问题的

当我读到你的问题时,让我描述一下我的脑海中会出现什么技术。

个人资料类别和答案权重

我正在考虑一种配置,您可以在其中描述一些配置文件或属性类别。 让我们以食物的味道为例。所以我们的类别可能如下: sweet, sour, spicy, normal等。

现在,对于您的调查,我会为每个问题配置一个类别权重。你可以累积。

实施例

你喜欢辣椒酱
是的 - spicy +3
不 - spicy -1

现在,您可以使用算法确定每个类别中的距离,并在计算中对它们进行加权。

(sweet | spicy | sour | normal)
    -5      15      2        8  // Person 1
    10      -5     10        2  // Person 2
     8      -8      7       12  // Person 3

现在你可以比较一下人的决定,看看[2]和[3]之间的距离小于[1]和[2]之间的距离。 注意:我不是在谈论Levensthein距离,因为这些值是数字的,计算结果比不匹配的字符更好。


我不确定这对你是否有帮助,但是我想到了这个问题,似乎是一个很好的解决方案。