处理tf-idf

时间:2016-11-01 18:19:27

标签: python pandas tf-idf cosine-similarity sklearn-pandas

我正在尝试匹配两个不同数据框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)作为输出。如何纠正此错误?

2 个答案:

答案 0 :(得分:0)

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

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

答案 1 :(得分:0)

基本上:

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

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

您需要一次又一次地适应变换。