Sklearn cosine_s Аналогия между вектором tfidf и массивом векторов tfidf - PullRequest
1 голос
/ 26 апреля 2019

Я пытаюсь получить косинусное сходство между текстом и текстами, содержащимися в массиве.

Я работал над этим кодом:

import numpy as np
from sklearn.feature_extraction.text import TfidfVectorizer
from sklearn.metrics.pairwise import cosine_similarity

text1 = 'Hola me llamo Luis'
text2 = 'Ayer Juan se compró una casa'
text3 = 'Casiguagua está más gordo que un manatí'
text4 = 'Y encima le huelen los pies'
text5 = 'HOlA ME LLAMO PEPE'

tweets = [text1, text2, text3, text4]

vectorizer = TfidfVectorizer(max_features=10000)
vectorizer.fit(tweets)

text1_vector = vectorizer.transform([text1])
text2_vector = vectorizer.transform([text2])
text3_vector = vectorizer.transform([text3])
text4_vector = vectorizer.transform([text4])
text5_vector = vectorizer.transform([text5])

buffer = []

buffer.append(text1_vector)
buffer.append(text2_vector)
buffer.append(text3_vector)
buffer.append(text4_vector)

similarity = cosine_similarity(text5_vector.reshape(1,-1), buffer)

Мой тип векторов:

scipy.sparse.csr.csr_matrix

Итак, я думаю, мне придется передать свой буфер в csr_matrix, но я не знаю, как это сделать.

Я также пытался инициализировать свой буферкак np.array([]) объект, но я не могу добавить векторы в буфер позже.Есть идеи, что мне не удается?

1 Ответ

1 голос
/ 26 апреля 2019

Вы не можете добавить sparse rows к numpy array, что вы можете сделать так: stack dense numpy arrays, используя vstack и toarray:

buffer = np.vstack([text1_vector.toarray(),
                text2_vector.toarray(),
                text3_vector.toarray(),
                text4_vector.toarray()])

similarity = cosine_similarity(text5_vector.toarray(), buffer)
...