我正在做一个项目,试图根据用户的兴趣来匹配城市中的事件。基本上,前端的最终用户必须选择自己的兴趣爱好(文化、体育、乐趣、food...there是其中的8个),其值从0到10不等。在后端(所有事件都是创建的),网站管理员可以为每个类别选择一个得分(文化、体育、fun...the与前端相同)。根据用户输入找出最相关结果的最佳算法是什么?我正在使用php (虽然我认为这不是一个特定于语言的问题)。
发布于 2011-01-25 11:46:51
将每个事件的分数与用户配置文件中的分数进行比较。偏差越小,事件越符合用户的兴趣。
在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其中,每个分数的重要性是该分数与用户所有分数的平均值的偏差。
你也可以添加“香料”的重要性价值,例如推动运动项目在超级碗期间,使您的网站更具有时代精神。
发布于 2011-01-25 11:48:05
我不知道algoritm,但您可以将用户的兴趣值与事件分数相乘,并将它们全部添加到每个事件中。这样您就可以为用户对事件进行排序。
例如,用户1 A:8 B:6 C:0
用户2 A:2 B:8 C:6
活动1 A:8 B:0 C:5
活动2 A:2 B:6 C:0
用户1事件列队活动1: 64活动2: 52
用户2活动列队活动2: 52活动1: 46
https://stackoverflow.com/questions/4792193
复制相似问题