Python 3.x 使用Python在某些文本输入上显示错误消息
我对python非常陌生,目前正在执行一项任务,以实现一个电影推荐系统。我有一个.csv文件,其中包含给定电影属性的各种描述。我要求用户输入电影标题,然后系统返回类似的电影 数据集名为movie_dataset.csv,来自GitHub上的以下文件夹: 我遇到的问题是,当我要求用户输入电影标题时,该程序仅适用于某些标题 守则:Python 3.x 使用Python在某些文本输入上显示错误消息,python-3.x,csv,Python 3.x,Csv,我对python非常陌生,目前正在执行一项任务,以实现一个电影推荐系统。我有一个.csv文件,其中包含给定电影属性的各种描述。我要求用户输入电影标题,然后系统返回类似的电影 数据集名为movie_dataset.csv,来自GitHub上的以下文件夹: 我遇到的问题是,当我要求用户输入电影标题时,该程序仅适用于某些标题 守则: import pandas as pd import numpy as np from sklearn.feature_extraction.text import Co
import pandas as pd
import numpy as np
from sklearn.feature_extraction.text import CountVectorizer
from sklearn.metrics.pairwise import cosine_similarity
#helper functions#
def get_title_from_index(index):
return df[df.index == index]["title"].values[0]
def get_index_from_title(title):
return df[df.title == title]["index"].values[0]
df = pd.read_csv("movie_dataset.csv")
#print (df.columns)
features = ['keywords','cast','genres','director']
for feature in features:
df[feature] = df[feature].fillna('')
def combine_features(row):
return row['keywords'] +" "+ row['cast'] +" "+ row['genres'] +" "+ row['director']
df["combine_features"] = df.apply(combine_features, axis=1)
#print (df["combine_features"].head())
cv = CountVectorizer()
count_matrix = cv.fit_transform(df["combine_features"])
#MTitle = input("Type in a movie title: ")
cosine_sim = cosine_similarity(count_matrix)
movie_user_likes = 'Avatar'#MTitle
movie_index = get_index_from_title(movie_user_likes)
similar_movies = list(enumerate(cosine_sim[movie_index]))
sorted_similar_movies = sorted(similar_movies, key= lambda x:x[1], reverse=True)
i = 0
for movie in sorted_similar_movies:
print (get_title_from_index(movie[0]))
i=i+1
if i>10:
break
当我进入“蝙蝠侠”时,程序运行良好。但当我运行“哈利波特”时,我得到:
索引器错误回溯(最近一次调用)
在里面
30电影\u用户\u likes=MTitle
31
--->32电影索引=从电影标题获取电影索引(电影用户喜欢)
33
34相似电影=列表(枚举(余弦电影索引)
从标题(标题)中获取索引
8.
9 def从标题中获取索引(标题):
--->10返回df[df.title==title][“index”].值[0]
11
12 df=pd.read\u csv(“movie\u dataset.csv”)
索引器错误:索引0超出大小为0的轴0的界限
电影《哈利波特》的数据库中根本没有条目
您应该为这些情况添加一些测试,例如:
def get_index_from_title(title):
try:
return df[df.title == title]["index"].values[0]
except IndexError:
return None
当然,在调用代码中,您必须测试是否从函数中获得了
None
,并相应地采取行动。电影《哈利波特》的数据库中没有条目
您应该为这些情况添加一些测试,例如:
def get_index_from_title(title):
try:
return df[df.title == title]["index"].values[0]
except IndexError:
return None
当然,在调用代码中,您必须测试是否从函数中得到了
None
,并相应地采取行动。谢谢,但我用excel在数据库中搜索了“哈利波特”,它被列出了两次。@James否。您需要一个精确的匹配项。《哈利波特》没有一个条目。有《哈利波特与混血王子》等,但没有《哈利波特》@James顺便说一句,如果你需要输入《哈利波特》来匹配《哈利波特与混血王子》,有很多方法可以做到这一点。一般术语可能是模糊文本匹配。或者,您也可以简单地在标题之间进行搜索,以查找包含作为子字符串的查询的标题。您可以使用文本搜索引擎(如“嗖”声)在不到线性时间内完成搜索:谢谢,但我使用excel在数据库中搜索了“哈利·波特”,它被列出了两次。@James否。您需要一个精确的匹配项。《哈利波特》没有一个条目。有《哈利波特与混血王子》等,但没有《哈利波特》@James顺便说一句,如果你需要输入《哈利波特》来匹配《哈利波特与混血王子》,有很多方法可以做到这一点。一般术语可能是模糊文本匹配。或者,您也可以简单地在标题之间进行搜索,以查找包含作为子字符串的查询的标题。您可以使用文本搜索引擎(如Whoosh)在少于线性时间内完成搜索: