Я делаю систему рекомендаций (из статей), используя подход фильтрации контента. Для этого я использую Cosine Similarity.
Я пробовал скрипт (из учебника), который в основном возвращает 'n' статей на основе данной статьи / прочитано
Это мой скрипт, который я пробовал
import pandas as pd
from sklearn.feature_extraction.text import TfidfVectorizer
from sklearn.metrics.pairwise import cosine_similarity
ds = pd.read_csv("Booksss.csv")
tf = TfidfVectorizer(analyzer='word', ngram_range=(1, 3), min_df=0, stop_words='english')
tfidf_matrix = tf.fit_transform(ds['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():
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:]
def item(id):
return ds.loc[ds['ID'] == id]['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]
test=[]
for rec in recs:
test.append(item(rec[1]))
#print("You may also like to read: " + item(rec[1]) + " (score:" + str(rec[0]) + ")")
return test,item(id)
метод def рекомендует (id, num) принимает рекомендованный идентификатор книги и n статей, но что нужно сделать, чтобы изменить скрипт так, чтобы он брал несколько идентификаторов из списка идентификаторов книг, которые пользователь прочитал, и возвращает рекомендацию на основе этих идентификаторов