2

我正在尝试匹配两个不同数据框 df1 和 df2 的公司名称。我正在尝试在两列上实现 tf-idf 和余弦相似度——df1 中的 company1 和 df2 中的 company2。

from sklearn.feature_extraction.text import TfidfVectorizer
from sklearn.metrics.pairwise import cosine_similarity
v = TfidfVectorizer()
tfidf_matrix1 = v.fit_transform(df1['company1'])
tfidf_matrix2 = v.fit_transform(df2['company2'])
cosine_similarity(tfidf_matrix2, tfidf_matrix1)

这给了我一个错误:

ValueError: Incompatible dimension for X and Y matrices: X.shape[1] 
== 31089 while Y.shape[1] == 46844

这可能是因为:

tfidf_matrix1.shape

给我 (78684, 46844) 作为输出。和 -

tiff_matrix2.shape

给我 (39462, 31089) 作为输出。我该如何纠正这个错误?

4

2 回答 2

2

基本上:

tfidf_matrix1 = v.fit_transform(df1['company1'])

tfidf_matrix2 = v.transform(df2['company2'])

您只需要在变换后适应一次。

于 2020-04-15T18:16:09.867 回答
1

问题是因为您正在对两个数据集进行 fit_transform 。拟合的第一步是学习您在文档中使用的词汇表(忽略 hashingTF),因此矩阵 1 有 31089 个唯一术语,而矩阵 2 有 46844 个。

余弦相似度然后将两个矩阵相乘以产生相似度,因此每列匹配不同的术语。但是,因为您适合两次,所以您使用的是两个不同的词汇表。您需要适应一次,并转换两次。

于 2016-11-09T09:40:36.283 回答