电影名称匹配功能异常:复制数据集内名称仍返回None
电影名称匹配功能异常:复制数据集内名称仍返回None
嘿,我完全懂你现在的挫败感——明明从自己的数据集里直接复制电影名称输入,结果匹配函数还是返回None,这实在太闹心了。咱们来一步步排查问题,找到解决办法:
首先,揪出最可能的核心问题:你的数据合并方式把部分电影给过滤掉了!
你看,你用pd.merge(movies_pd, movie_stats, on="movieId")做合并,这个默认是内连接(inner join)——也就是说,只有同时出现在movies_pd(电影列表)和movie_stats(有评分记录的电影)里的影片才会被保留到pd1里。如果你复制的是movies.csv里某部没有任何评分记录的电影,那它根本不在pd1的title列里,自然匹配不到,返回None。
解决办法1:保留所有电影(包括无评分的)
把合并方式改成左连接(left join),这样不管电影有没有评分,都会保留在pd1里:
pd1 = pd.merge(movies_pd, movie_stats, on="movieId", how="left")
这样即使某部电影没有评分,它的标题也会出现在候选列表里,你复制的名称就能匹配到了。另外建议把变量books改成movie_titles,避免和书籍混淆,代码可读性会更好。
其他可能的排查点
- 去掉过于宽泛的try-except:你现在的
find_book函数里用了except:捕获所有异常,这会掩盖很多潜在错误(比如参数类型问题)。建议暂时去掉try-except,或者只捕获特定异常,这样能看到具体的报错信息,方便调试。 - 验证字符串是否真的一致:有时候看起来一样的字符串可能藏着隐藏字符(比如全角空格、换行符),可以在代码里加几行验证:
如果这里输出为空,就说明你复制的电影确实不在# 查看输入字符串的原始形式 print("输入的字符串原始格式:", repr(user_input)) # 检查数据集中是否存在完全匹配的标题 match_in_data = pd1[pd1["title"].str.strip().str.lower() == user_input] print("数据集中的匹配结果:", match_in_data)pd1里,左连接的修改就能解决问题。 - 确认匹配分数逻辑:完全匹配的字符串score应该是100,肯定会满足
score>70的条件,所以如果匹配不到,大概率是数据里根本没有这个标题,而不是分数阈值的问题。
调整后的示例代码
我把几个关键修改点整合到代码里了:
from surprise import SVD, Dataset from surprise import Reader import pandas as pd from fuzzywuzzy import process def find_movie(user_input, movie_titles): result = process.extractOne(user_input, movie_titles) if result: match, score = result if score > 70: return match return None movies_pd = pd.read_csv('movies.csv') rating_pd = pd.read_csv('ratings.csv') movie_stats = rating_pd.groupby("movieId").agg( avg_rating = ("rating","mean"), ).reset_index() # 改成左连接,保留所有电影 pd1 = pd.merge(movies_pd, movie_stats, on="movieId", how="left") # 变量名改成movie_titles,语义更清晰 movie_titles = pd1["title"].str.strip().str.lower() user_input = input("what movie have you watched? ").strip().lower() # 新增验证步骤,方便排查 print("输入的字符串原始格式:", repr(user_input)) match_in_data = pd1[pd1["title"].str.strip().str.lower() == user_input] print("数据集中的匹配结果:", match_in_data) match_movie = find_movie(user_input, movie_titles) print(match_movie)
备注:内容来源于stack exchange,提问作者reza
相关产品推荐
相关产品推荐

