Я не могу понять, как сопоставить самый верхний (# 1) самый похожий документ в моем списке с каждым элементом документа в моем исходном списке.
Я прошёл некоторую предварительную обработку, ngrams, лемматизацию,и TF IDF.Затем я использую линейный ядро Scikit.Я пытался использовать функции извлечения, но не уверен, как работать с ним в матрице csr ...
Пробовал разные вещи ( Использование csr_matrix сходства предметов, чтобы получить большинство похожих предметов для предмета X, не имеяпреобразовать csr_matrix в плотную матрицу )
import string, nltk
from sklearn.feature_extraction.text import TfidfVectorizer
from nltk.stem import WordNetLemmatizer
from sklearn.metrics.pairwise import cosine_similarity
import sparse_dot_topn.sparse_dot_topn as ct
import re
documents = 'the cat in the hat','the catty ate the hat','the cat wants the cats hat'
def ngrams(string, n=2):
string = re.sub(r'[,-./]|\sBD',r'', string)
ngrams = zip(*[string[i:] for i in range(n)])
return [''.join(ngram) for ngram in ngrams]
lemmer = nltk.stem.WordNetLemmatizer()
def LemTokens(tokens):
return [lemmer.lemmatize(token) for token in tokens]
remove_punct_dict = dict((ord(punct), None) for punct in string.punctuation)
def LemNormalize(text):
return LemTokens(nltk.word_tokenize(text.lower().translate(remove_punct_dict)))
TfidfVec = TfidfVectorizer(tokenizer=LemNormalize, analyzer=ngrams, stop_words='english')
tfidf_matrix = TfidfVec.fit_transform(documents)
from sklearn.metrics.pairwise import linear_kernel
cosine_similarities = linear_kernel(tfidf_matrix[0:1], tfidf_matrix).flatten()
related_docs_indices = cosine_similarities.argsort()[:-5:-1]
cosine_similarities
В моем текущем примере я получаю только первую строку против всех документов.Как получить вывод, который выглядит примерно так в кадре данных (обратите внимание, что исходные документы поступают из кадра данных).
original df col most similar doc similarity%
'the cat in the hat' 'the catty ate the hat' 80%
'the catty ate the hat' 'the cat in the hat' 80%
'the cat wants the cats hat' 'the catty ate the hat' 20%