Python 如何通过余弦相似性传递用户输入?

Python 如何通过余弦相似性传递用户输入?,python,pandas,vectorization,recommendation-engine,content-based-retrieval,Python,Pandas,Vectorization,Recommendation Engine,Content Based Retrieval,我是一个绝对的编码初学者。有这个图书推荐系统,但我想在这里做一个小小的改变。目前,程序在收到用户的图书ID后会推荐类似的图书,但我希望它将图书标题作为用户的输入,并在将用户的输入与csv文件中的标题进行比较后找到类似的标题。任何关于代码如何工作的分步指南也将不胜感激:)。这是密码 import pandas as pd from sklearn.feature_extraction.text import TfidfVectorizer from sklearn.metrics.pairwise

我是一个绝对的编码初学者。有这个图书推荐系统,但我想在这里做一个小小的改变。目前,程序在收到用户的图书ID后会推荐类似的图书,但我希望它将图书标题作为用户的输入,并在将用户的输入与csv文件中的标题进行比较后找到类似的标题。任何关于代码如何工作的分步指南也将不胜感激:)。这是密码

import pandas as pd
from sklearn.feature_extraction.text import TfidfVectorizer
from sklearn.metrics.pairwise import cosine_similarity
ds = pd.read_csv("test1.csv") 
tf = TfidfVectorizer(analyzer='word', ngram_range=(1, 3), min_df=0, stop_words='english')


tfidf_matrix = tf.fit_transform(ds['Book Title'])
cosine_similarities = cosine_similarity(tfidf_matrix,tfidf_matrix)

results = {} # dictionary created to store the result in a dictionary format (ID : (Score,item_id))

for idx, row in ds.iterrows(): #iterates through all the rows
    # the below code 'similar_indice' stores similar ids based on cosine similarity. sorts them in ascending order. [:-5:-1] is then used so that the indices with most similarity are got. 0 means no similarity and 1 means perfect similarity
    similar_indices = cosine_similarities[idx].argsort()[:-5:-1] #stores 5 most similar books, you can change it as per your needs
    similar_items = [(cosine_similarities[idx][i], ds['ID'][i]) for i in similar_indices]
    results[row['ID']] = similar_items[1:]

#below code 'function item(id)' returns a row matching the id along with Book Title. Initially it is a dataframe, then we convert it to a list
def item(id):
    return ds.loc[ds['ID'] == id]['Book Title'].tolist()[0]
def recommend(id, num):
    if (num == 0):
        print("Unable to recommend any book as you have not chosen the number of book to be recommended")
    elif (num==1):
        print("Recommending " + str(num) + " book similar to " + item(id))

    else :
        print("Recommending " + str(num) + " books similar to " + item(id))

    print("----------------------------------------------------------")
    recs = results[id][:num]
    for rec in recs:
        print("You may also like to read: " + item(rec[1]) + " (score:" + str(rec[0]) + ")")

#the first argument in the below function to be passed is the id of the book, second argument is the number of books you want to be recommended
recommend(5,2)

欢迎来到堆栈溢出!你现在用一个ID来查找它,所以你可以把它换成标题吗
ds.loc[ds['ID']==ID]
->
ds.loc[ds['Book Title']==Book\u Title]
?如果没有示例输入,很难更加具体,请参阅:欢迎使用堆栈溢出!你现在用一个ID来查找它,所以你可以把它换成标题吗
ds.loc[ds['ID']==ID]
->
ds.loc[ds['Book Title']==Book\u Title]
?如果没有示例输入,很难更具体,请参见: