2016-11-01 3 views
0

Ich versuche, Firmennamen von zwei verschiedenen Datenrahmen DF1 und DF2 zu entsprechen. Ich versuche, Tf-IDF und Cosinus-Ähnlichkeit in zwei Spalten zu implementieren - company1 in df1 und company2 in df2.Griff unvereinbar Matrizen Formen in 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) 

Das gibt mir eine Fehlermeldung:

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

Dies ist wahrscheinlich, weil:

tfidf_matrix1.shape 

mir gibt (78684, 46844) als Ausgang. Und -

tiff_matrix2.shape 

gibt mir (39462, 31089) als die Ausgabe. Wie behebe ich diesen Fehler?

+0

Ist das wirklich ein Fehler? Erwarten Sie, dass die Matrizen die gleiche Form haben oder nicht? Wenn Sie nicht erwarten, dass sie die gleiche Form haben, wie wollen Sie dann das Problem "beheben"? – ASGM

+0

Ich bin neu bei tf-idf. Ich möchte die Kosinusähnlichkeit zwischen jedem Firmennamen finden, damit ich die passenden Firmen finden kann. Mein primäres Ziel ist es, die passenden Firmen zu finden. Ich weiß nicht, wie ich wegen dieses Fehlers weiter vorgehen soll. – ComplexData

Antwort

0

Das Problem ist, weil Sie den fit_transform auf Ihren beiden Datensätze tun. Der erste Schritt der Anpassung besteht darin, das Vokabular zu lernen, das Sie in Ihren Dokumenten verwenden (Ignorieren von HashingTF), sodass Matrix 1 31089 eindeutige Terme hat, während 2 46844 hat. Die Kosinusähnlichkeit multipliziert dann die beiden Matrizen, um die Ähnlichkeit zu erzeugen , so entspricht jede Spalte einem anderen Begriff. Da Sie jedoch zweimal passen, verwenden Sie zwei verschiedene Vokabulare. Sie müssen einmal anpassen und zweimal transformieren.