基于Django框架的电影推荐系统当跳转到推荐结果界面时发生错误
def recommend1(request):
USERID = int(request.GET["userIdd"]) + 1000
Insertposter.objects.filter(userId=USERID).delete()
#selectMysql()
read_mysql_to_csv('users/static/users_resulttable.csv',USERID) #追加数据,提高速率
ratingfile = os.path.join('users/static', 'users_resulttable.csv')
usercf = UserBasedCF()
#userid = '1001'
userid = str(USERID)#得到了当前用户的id
print(userid)
usercf.generate_dataset(ratingfile)
usercf.calc_user_sim()
usercf.recommend(userid) #得到imdbId号
def recommend(self, user):
''' Find K similar users and recommend N movies. '''
matrix.clear() #每次都要清空
K = self.n_sim_user # 这里等于20
N = self.n_rec_movie # 这里等于10
rank = dict() # 用户对电影的兴趣度
# print(self.initialset[user])
watched_movies = self.trainset[user] # user用户已经看过的电影 只包括训练集里的
# 这里之后不能是训练集
# watched_movies = self.initialset[user]
for similar_user, similarity_factor in sorted(user_sim_mat[user].items(),
key=itemgetter(1), reverse=True)[
0:K]: # itemgetter(1)表示对第2个域(相似度)排序 reverse=TRUE表示降序
for imdbid in self.trainset[similar_user]: # similar_user是items里面的键,就是所有用户 similarity_factor是值,就是对应的相似度
if imdbid in watched_movies:
continue # 如果该电影用户已经看过,则跳过
# predict the user's "interest" for each movie
rank.setdefault(imdbid, 0) # 没有值就为0
rank[imdbid] += similarity_factor #rank[movie]就是各个电影的相似度
# 这里是把和各个用户的相似度加起来,而各个用户的相似度只是基于看过的公共电影数目除以这两个用户看过的电影数量积
#print(rank[movie])
# return the N best movies
# rank_ = dict()
rank_ = sorted(rank.items(), key=itemgetter(1), reverse=True)[0:N] #类型是list不是字典了
for key,value in rank_:
matrix.append(key) #matrix为存储推荐的imdbId号的数组
#print(key) #得到了推荐的电影的imdbid号
print(matrix)
#return sorted(rank.items(), key=itemgetter(1), reverse=True)[0:N]
return matrix