Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 3.x 使用Python在某些文本输入上显示错误消息_Python 3.x_Csv - Fatal编程技术网

Python 3.x 使用Python在某些文本输入上显示错误消息

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

我对python非常陌生,目前正在执行一项任务,以实现一个电影推荐系统。我有一个.csv文件,其中包含给定电影属性的各种描述。我要求用户输入电影标题,然后系统返回类似的电影

数据集名为movie_dataset.csv,来自GitHub上的以下文件夹:

我遇到的问题是,当我要求用户输入电影标题时,该程序仅适用于某些标题

守则:

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)在少于线性时间内完成搜索: