📜  使用 TF-IDF 向量化和余弦相似度的基于情节摘要的电影推荐器(1)

📅  最后修改于: 2023-12-03 15:06:51.405000             🧑  作者: Mango

使用 TF-IDF 向量化和余弦相似度的基于情节摘要的电影推荐器

本程序是一款基于情节摘要的电影推荐器,使用了 TF-IDF 向量化和余弦相似度计算相似度。用户输入想要搜索的电影名字,系统会根据其情节摘要给出与之相似的几部电影的名字和评分。

程序流程
  1. 数据准备:从 IMDB 数据集中读取电影名字、情节等信息,并进行预处理。
  2. 用户交互:获取用户想要搜索的电影名字。
  3. 计算相似度:使用 TF-IDF 向量化情节信息,计算用户搜索的电影和其他电影之间的余弦相似度。
  4. 推荐结果:根据相似度排序,返回与用户搜索的电影最相似的几部电影名字和评分。
代码片段
数据准备
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}")

以上代码片段演示了程序的核心部分,包括了数据准备、计算相似度和推荐结果的流程。用户可以根据自己的需要进行调整。