题目描述
假设已有若干用户名字及其喜欢的音乐歌曲清单,现假设有用户A,已听过并喜欢一些歌曲,现在想找一首新歌曲听听,又不知道听什么好。
思路:根据已有数据,查找与该用户A爱好最相似的用户B,也就是听过并喜欢的音乐歌曲与该用户A最接近,然后从用户B喜欢的音乐列表中选取一个当前用户A还没有听过的歌曲,进行推荐
代码采用字典嵌套集合(听过并喜欢的歌曲)来存放数据,格式为{用户1:{歌曲名称1,歌曲名称2,等等},用户2:{.-}}
实现代码
def find_similar_user(user_dict, target_user):
max_similarity = -1
similar_user = None
for user, songs in user_dict.items():
if user == target_user:
continue
similarity = len(songs.intersection(user_dict[target_user]))
if similarity > max_similarity:
max_similarity = similarity
similar_user = user
return similar_user
def recommend_song(user_dict, target_user):
similar_user = find_similar_user(user_dict, target_user)
if similar_user is None:
return "No recommendation available."
target_songs = user_dict[target_user]
similar_songs = user_dict[similar_user]
for song in similar_songs:
if song not in target_songs:
return song
return "No recommendation available."
# 示例数据
user_dict = {
"A": {"Song1", "Song2", "Song3"},
"B": {"Song2", "Song4", "Song5"},
"C": {"Song1", "Song2", "Song6"},
"D": {"Song3", "Song7", "Song8"}
}
target_user = "A"
recommendation = recommend_song(user_dict, target_user)
print("Recommended song for {}: {}".format(target_user, recommendation))
在上述代码中,find_similar_user
函数用于找到与目标用户最相似的用户,即喜欢的歌曲与目标用户最接近。然后,recommend_song
函数根据找到的相似用户给出一个新的推荐歌曲。
在示例数据中,用户 A 喜欢 “Song1″、”Song2” 和 “Song3″,那么根据与用户 A 最相似的用户 B(喜欢 “Song2″、”Song4” 和 “Song5″),我们可以推荐给用户 A “Song4” 或 “Song5” 中的一个。
© 版权声明
本站资源来自互联网收集,仅供用于学习和交流,请勿用于商业用途。如有侵权、不妥之处,请联系站长并出示版权证明以便删除。敬请谅解!
THE END