集体智慧编程:提供推荐_为评论者打分

对具体的某一用户,根据其他用户的评价结果,计算出他与每一个用户的相似程度,找出相似程度最高的前N位。
在函数中,通过similarity指定使用的相关性算法。

"""
为评论者打分
"""  
#书中算法
def topMatches(prefs,person,n = 5,similarity = sim_pearson):
    score = [(similarity(prefs,person,other),other)
                    for other in prefs if other != person]
    
    score.sort()  #从小到大
    score.reverse()   #反过来排
    return score[0:n]

#自己编写
def topMatches2(prefs,person,n = 5,similarity = sim_pearson):
    score = {}
    for item in prefs:
        if item != person:
            score[item] = similarity(prefs,person,item)
    
    score_sort = sorted(zip(score.values(),score.keys()))
    score_sort.reverse()
    score_sort = score_sort[0:n]
    return score_sort

几个小笔记:

1、列表排序,从小排到大
score.sort()
注意,这个score由元组组成 [(相似度,人名),……],它会根据元组第一个值进行排序。

2、把列表元素顺序调转
score.reverse()

3、字典如何排序:
(1)zip(score.values(),score.keys()),把字典中每个值组成(value,key)的元组,通过zip把这些元组构成列表。
(2)score_sort = sorted(zip(score.values(),score.keys())),通过sorted函数,与scort.sort()等价。

4、取列表前N个:
score[0:n]

你可能感兴趣的:(集体智慧编程:提供推荐_为评论者打分)