我正在开发一种PHP算法,以根据对表单中问题的响应来匹配兼容性。
在这种情况下,用户A和用户B会被问到完全相同的问题。让我们说这些是一些问题:
Cleanliness
No preference
Somewhat Clean
Tidy but cluttered
Strictly organized
Person B Cleanliness Preference
Whatever
Can't be too different
Must Match
Room Temperature
Cold
Comfortable
Hot
现在会有更多的问题,但它继续这种类似的趋势。有具体的问题,然后有关于人B的问题(以及你希望他们如何回应)
我希望算法根据人们对答案的相似性来匹配人,显然,B人的条件语句会增加他们对这些问题的答案的权重。
我想可能为每个答案分配一个分值,但我仍然不确定我是如何做到的。
有人有任何建议吗?
答案 0 :(得分:1)
点值系统可以工作。这是我的想法:
对于他们回答问题的每个值,该答案在数据库中获取ID。当您尝试“匹配”或“比较”两个人时,您可以通过比较答案ID来计算他们共有多少个答案。然后由你决定他们是否有足够的共同点。例如,如果他们有共同的8/10答案,他们可能是一个匹配。
mysql> SELECT * FROM users LIMIT 1;
+----+---------------+
| id | name |
+----+---------------+
| 1 | Dalton Conley |
+----+---------------+
mysql> SELECT * FROM questions;
+----+--------------------------+
| id | value |
+----+--------------------------+
| 1 | Do you like to program? |
+----+--------------------------+
mysql> SELECT * FROM answers;
+----+-------------+-------+
| id | question_id | value |
+----+-------------+-------+
| 1 | 1 | yes |
| 2 | 1 | no |
+----+-------------+-------+
mysql> SELECT * FROM user_answers;
+---------+-------------+-----------+
| user_id | question_id | answer_id |
+---------+-------------+-----------+
| 1 | 1 | 2 |
+---------+-------------+-----------+
答案 1 :(得分:1)
我会调查一下okcupid的匹配方式:http://www.okcupid.com/faaaq
答案 2 :(得分:1)
排列您在调查问卷中询问用户的所有“字段”。要么使你的范围非常有限(总是,有时,从不),并为它们分配常数值,如1,2,3。循环每个人以匹配响应。生成可能的兼容匹配列表 - 然后您可以根据应用程序的需要对其进行排序。
样品
define('FEMALE', 0);
define('MALE', 1);
$user1 = array(
'name' => 'John Doe',
'gender' => MALE,
'interseted_in' => FEMALE,
'cleanliness' => 3,
// etc
);
$potentials = array();
foreach($users as $u)
{
if($user['gender'] != $user1['interested_in'])
{
continue;
}
// More checking
// ...
// At the end of checking, add to the potentials.
$potentials[] = $u;
}