2017-10-16 7 views
0

Ich möchte TfidfVectorizer() für eine Datei verwenden, die viele Zeilen enthält, jede eine Phrase. Ich möchte dann eine Testdatei mit einer kleinen Teilmenge von Phrasen machen, TfidfVectorizer() machen und dann die Kosinusähnlichkeit zwischen der Original- und der Testdatei nehmen, so dass ich für eine gegebene Phrase in der Testdatei die besten N Übereinstimmungen innerhalb abrufe die ursprüngliche Datei. Hier ist mein Versuch:Python: Elemente in zwei verschiedenen Tfidf-Matrizen unterschiedlicher Dimensionen vergleichen

corpus = tuple(open("original.txt").read().split('\n')) 
test = tuple(open("test.txt").read().split('\n')) 


from sklearn.feature_extraction.text import TfidfVectorizer 

tf = TfidfVectorizer(analyzer='word', ngram_range=(1,3), min_df = 0, stop_words = 'english') 
tfidf_matrix = tf.fit_transform(corpus) 
tfidf_matrix2 = tf.fit_transform(test) 

from sklearn.metrics.pairwise import linear_kernel 


def new_find_similar(tfidf_matrix2, index, tfidf_matrix, top_n = 5): 
    cosine_similarities = linear_kernel(tfidf_matrix2[index:index+1], tfidf_matrix).flatten() 
    related_docs_indices = [i for i in cosine_similarities.argsort()[::-1] if i != index] 
    return [(index, cosine_similarities[index]) for index in related_docs_indices][0:top_n] 


for index, score in find_similar(tfidf_matrix, 1234567): 
     print score, corpus[index] 

Allerdings erhalte ich:

for index, score in new_find_similar(tfidf_matrix2, 1000, tfidf_matrix): 
     print score, test[index] 
Traceback (most recent call last): 

    File "<ipython-input-53-2bf1cd465991>", line 1, in <module> 
    for index, score in new_find_similar(tfidf_matrix2, 1000, tfidf_matrix): 

    File "<ipython-input-51-da874b8d3076>", line 2, in new_find_similar 
    cosine_similarities = linear_kernel(tfidf_matrix2[index:index+1], tfidf_matrix).flatten() 

    File "C:\Users\arron\AppData\Local\Continuum\Anaconda2\lib\site-packages\sklearn\metrics\pairwise.py", line 734, in linear_kernel 
    X, Y = check_pairwise_arrays(X, Y) 

    File "C:\Users\arron\AppData\Local\Continuum\Anaconda2\lib\site-packages\sklearn\metrics\pairwise.py", line 122, in check_pairwise_arrays 
    X.shape[1], Y.shape[1])) 

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

ich nicht beide Dateien dagegen würde die Kombination und dann verwandeln, aber ich möchte sicher b Ich vergleiche nicht jeder der Sätze aus die Testdatei mit einer der anderen Phrasen innerhalb der Testdatei.

Irgendwelche Zeiger?

Antwort

1

die TfidfVectorizer mit Daten aus Korpus montieren, dann mit dem bereits montierten vectorizer die Testdaten umwandeln (das heißt, nicht nennen fit_transform zweimal):

tfidf_matrix = tf.fit_transform(corpus) 
tfidf_matrix2 = tf.transform(test) 
+0

ausgezeichnet Dank sehr viel. – brucezepplin

Verwandte Themen