2016-11-01 63 views
0

我试图匹配两个不同数据帧df1和df2的公司名称。我试图在两列上实现tf-idf和余弦相似性 - df1中的company1和df2中的company2。在tf-idf中处理不兼容的矩阵形状

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

这真的是一个错误?你是否期望矩阵具有相同的形状?如果你不指望它们具有相同的形状,那么你想如何“修复”这个问题? – ASGM

+0

我是tf-idf的新手。我想找到每个公司名称之间的余弦相似度,这样我就可以找到匹配的公司。我的主要目标是找到匹配的公司。由于这个错误,我不知道如何继续下去。 – ComplexData

回答

0

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

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