Python Sklearn tfidf向量和tfidf向量数组之间的余弦_相似性

Python Sklearn tfidf向量和tfidf向量数组之间的余弦_相似性,python,numpy,scikit-learn,sklearn-pandas,Python,Numpy,Scikit Learn,Sklearn Pandas,我试图得到文本和数组中包含的文本之间的余弦相似性 我一直在研究以下代码: 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 = 'C

我试图得到文本和数组中包含的文本之间的余弦相似性

我一直在研究以下代码:

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_矩阵,但我不知道怎么做


我还尝试将我的缓冲区初始化为
np.array([])
对象,但我无法在以后将向量添加到缓冲区。你知道我失败的地方是什么吗?

你不能将
稀疏行
附加到
numpy数组
,你能做的就是使用
vstack
toarray
像这样堆叠
密集的numpy数组

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

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

谢谢,效果很好。但是现在想象一下,我想用一个None值或一个空数组初始化我的缓冲区,并在每个循环中使用回答中使用的
np.vstack()
方法添加一个文本向量。我如何定义它,使它在第一个循环中的余弦相似性(文本向量,缓冲区)不会给我带来任何问题,因为缓冲区变量是一个无值?换句话说,如果我第一次不知道向量器生成的向量的长度,我如何将缓冲区初始化为空数组?嗯,你可以创建第一个传递空文本的数组吗?是的,这就是我现在想的。我将使用它从语料库中过滤垃圾邮件,因此我想我将使用随机词的向量初始化缓冲区,该向量不会出现在任何文档中,然后在每个循环中将其他向量叠加到它。谢谢你的时间