📅  最后修改于: 2023-12-03 15:06:51.405000             🧑  作者: Mango
本程序是一款基于情节摘要的电影推荐器,使用了 TF-IDF 向量化和余弦相似度计算相似度。用户输入想要搜索的电影名字,系统会根据其情节摘要给出与之相似的几部电影的名字和评分。
import pandas as pd
from sklearn.feature_extraction.text import TfidfVectorizer
# 读取 IMDB 数据集
df = pd.read_csv("imdb_data.csv")
# 数据预处理
df["plot"] = df["plot"].str.replace("[^a-zA-Z]", " ")
df["plot"] = df["plot"].str.lower()
# 向量化情节信息
vectorizer = TfidfVectorizer(stop_words='english')
X = vectorizer.fit_transform(df["plot"])
# 将电影名字和向量对应起来
movie_map = {}
for idx, movie in enumerate(df["title"]):
movie_map[idx] = movie
from sklearn.metrics.pairwise import cosine_similarity
# 获取用户搜索的电影名字
user_input = input("请输入你要搜索的电影名字:")
# 找到用户搜索的电影对应的向量
movie_id = df[df["title"] == user_input].index[0]
search_vector = X[movie_id]
# 计算相似度
similarity_scores = cosine_similarity(search_vector, X)[0]
# 排序并推荐结果
similar_movies = []
for idx, score in enumerate(similarity_scores):
if idx != movie_id:
movie_name = movie_map[idx]
rating = df[df["title"] == movie_name]["rating"].values[0]
similar_movies.append((movie_name, rating, score))
similar_movies = sorted(similar_movies, key=lambda x: x[2], reverse=True)[:5]
# 输出推荐结果
print(f"\n和电影 '{user_input}' 相似的电影有:")
for movie in similar_movies:
print(f"{movie[0]},评分 {movie[1]},相似度 {movie[2]:.3f}")
以上代码片段演示了程序的核心部分,包括了数据准备、计算相似度和推荐结果的流程。用户可以根据自己的需要进行调整。