我正在研究一个项目,该项目试图根据用户的兴趣匹配城市中的事件。 基本上,前端的最终用户必须选择他的兴趣(文化,体育,娱乐,食物......其中有8个),其值范围从0到10。 在后端(创建所有事件的地方),网站管理员可以为每个类别选择一个分数(文化,体育,娱乐......与前端相同)。 根据用户输入找到最相关结果的最佳算法是什么? 我正在使用php(虽然我认为这不是特定于语言的问题)。
答案 0 :(得分:6)
将每个事件的得分与用户个人资料中的得分进行比较。偏差越小,事件越匹配用户的兴趣。
在SQL中它可能是这样的:
SELECT ... FROM `events` WHERE ...
ORDER BY (
ABS(`culture` - $culture)
+ ABS(`sports` - $sports)
+ ABS(`fun` - $fun)
+ ...
) ASC
您还可以根据用户个人资料中的积分分配对分数进行加权。这意味着如果用户有$culture = 10
和所有其他分数0,他对文化特别感兴趣,你可能会得到更好的结果
SELECT ... FROM `events` WHERE ...
ORDER BY (
(ABS(`culture` - $culture) * $cultureImportance)
+ (ABS(`sports` - $sports) * $sportsImportance)
+ (ABS(`fun` - $fun) * $funImportance)
+ ...
) ASC
其中每个分数的重要性是该分数与用户所有分数的平均值的偏差。
您还可以为重要性值添加“spice”,例如在超级碗期间推动体育赛事,使你的网站更具时代性。
答案 1 :(得分:0)
我不知道算法,但您可以将用户兴趣值与事件分数相乘,并将每个事件添加到所有事件中。这样您就可以为用户排列事件。
例如 用户1 答:8 B:6 C:0
用户2 A2 B:8 C:6
活动1 答:8 B:0 C:5
活动2 A2 B:6 C:0
用户1事件hitparade 事件1:64 事件2:52
用户2事件hitparade 事件2:52 事件1:46