我正在尝试匹配两个不同数据框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)作为输出。如何纠正此错误?
答案 0 :(得分:0)
问题是因为您正在对两个数据集执行fit_transform。拟合的第一步是学习你在文档中使用的词汇(忽略hashingTF),因此矩阵1有31089个唯一词,而2个有46844个。
余弦相似性然后将两个矩阵相乘以产生相似性,因此每列匹配不同的项。但是因为你适合两次,你使用两个不同的词汇表。你需要适合一次,然后转换两次。
答案 1 :(得分:0)
基本上:
tfidf_matrix1 = v.fit_transform(df1['company1'])
tfidf_matrix2 = v.transform(df2['company2'])
您需要一次又一次地适应变换。