2016-11-01 18 views
0

Я пытаюсь сопоставить названия компаний двух разных фреймов данных df1 и df2. Я пытаюсь реализовать сходство tf-idf и косинус на двух столбцах - company1 в df1 и company2 в df2.Обработка несовместимых форм матриц в 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 на обоих ваших наборах данных. Первый шаг подгонки - изучить словарь, который вы используете в своих документах (игнорируя hashingTF), поэтому матрица 1 имеет 31089 уникальных терминов, а 2 имеет 46844.

Косинус-сходство затем умножает две матрицы для получения сходства , поэтому каждый столбец соответствует другому термину. Однако, поскольку вы вписываетесь дважды, вы используете два разных словаря. Вам нужно поместиться один раз и преобразовать дважды.

 Смежные вопросы

  • Нет связанных вопросов^_^