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?
ausgezeichnet Dank sehr viel. – brucezepplin