使用SpaCy实现电影推荐:获取最高相似度电影时遇TypeError问题
问题解决思路
你代码里有两个核心问题:
- 错误遍历了输入描述
x的每个字符(for token in x),导致每次处理单个字符而非整段描述,完全偏离了相似度计算的目标 - 没有将相似度值与对应电影存入可迭代容器,直接对单个
float值调用max()必然触发报错
修正后的代码
def movie_recommendation(x): # 读取并清理电影列表,去掉换行符 with open("movies.txt", "r", encoding='utf-8') as file_read: movie_list = [line.strip() for line in file_read.readlines()] # 处理输入的整段电影描述,生成SpaCy文档对象 input_doc = nlp(x) similarity_pairs = [] # 计算每个电影与输入描述的相似度,存储为(相似度, 电影描述)元组 for movie_desc in movie_list: movie_doc = nlp(movie_desc) similarity = input_doc.similarity(movie_doc) similarity_pairs.append((similarity, movie_desc)) # 提取相似度最高的电影(元组比较优先匹配第一个元素) max_similarity, recommended_movie = max(similarity_pairs) print(f"推荐电影:{recommended_movie}") print(f"相似度:{max_similarity}") return recommended_movie
关键说明
- 用列表推导式简化电影列表的读取和清理,比原循环更简洁高效
- 直接将整段输入描述传入
nlp()生成文档对象,避免了遍历单个字符的错误 - 用
similarity_pairs列表存储所有相似度与电影的配对,让max()可以遍历找到最大值 - 元组比较时会优先对比第一个元素(相似度值),因此
max(similarity_pairs)能直接返回相似度最高的电影条目
内容的提问来源于stack exchange,提问作者brdmrkcrn
相关产品推荐
相关产品推荐

