[英]How to build a recommendation system using tf-idf and cosine similarity?
我一直在嘗試構建啤酒推薦引擎,因此我決定僅使用tf-idf和Cosine相似度來使其成功。
到目前為止,這是我的代碼:
import pandas as pd
import re
import numpy as np
from bs4 import BeautifulSoup
from sklearn.feature_extraction.text import TfidfVectorizer
from nltk.corpus import stopwords
from nltk.stem import WordNetLemmatizer
wnlzer = WordNetLemmatizer()
train = pd.read_csv("labeledTrainData.tsv" , header = 0 , \
delimiter = '\t' , quoting = 3)
def raw_string_to_list_clean_string( raw_train_review ):
remove_html = BeautifulSoup( raw_train_review ).text
remove_punch = re.sub('[^A-Za-z ]' , "" , remove_html)
token = remove_punch.lower().split()
srm_token = [wnlzer.lemmatize(i) for i in token if not i in set(stopwords.words('english'))]
clean_text = " ".join(srm_token)
return(clean_text)
ready_train_list = []
length = len(train['review'])
for i in range(0 , length):
if (i%100 == 0):
print "doing %d of %d of training data set" % (i+1 , length)
a = raw_string_to_list_clean_string(train['review'][i])
ready_train_list.append(a)
vectorizer = TfidfVectorizer(analyzer = "word" , tokenizer = None , preprocessor = None , \
stop_words = None , max_features = 20000)
training_our_vectorizer = vectorizer.fit_transform(ready_train_list)`
現在,我知道如何使用余弦相似度,但是我無法弄清楚:
一個簡單的實現是使用cdist
計算到其他啤酒的距離,然后使用argsort
返回您的建議:
from scipy.spatial.distance import cdist
import numpy as np
vec = TfidfVectorizer()
beerlist = np.array(['heinekin lager', 'corona lager', 'heinekin ale', 'budweiser lager'])
beerlist_tfidf = vec.fit_transform(beerlist).toarray()
beer_tfidf = vec.transform(['heinekin lager']).toarray()
rec_idx = cdist(beer_tfidf, beerlist_tfidf, 'cosine').argsort()
print(beerlist[rec_idx[0][1:]])
#['heinekin ale' 'corona lager' 'budweiser lager']
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.