#python #pandas #machine-learning #tf-idf #cosine-similarity
#python #pandas #машинное обучение #tf-idf #косинусное сходство
Вопрос:
Я пытаюсь найти сходство документа из большого набора статей (460 файлов, содержащих 4000 строк в каждом). Но cosine similarity
для вычисления требуется много времени.
Я не могу использовать библиотеки python sklearn или scipy. Итак, я попытался реализовать raw tf-idf vectorizer
и cosine similarity
. Векторизатор выдает мне список списков.
Матрица выглядит следующим образом:
[[0.0,0.0,...…,0.35480,0.0,0.0],[0.0,.....]]
Мой код:
def computeTFIDFVector(document):
tfidfVector = [0.0] * len(wordDict)
for i, word in enumerate(wordDict):
if word in document:
tfidfVector[i] = document[word]
return tfidfVector
def cosine_similarity(vector1, vector2):
dot_product = sum(p*q for p,q in zip(vector1, vector2))
magnitude = math.sqrt(sum([val**2 for val in vector1])) * math.sqrt(sum([val**2 for val in vector2]))
if not magnitude:
return 0
return dot_product/magnitude
duplicates=[]
count=0
for i in range(len(tfidfVector)):
for j in range(i 1, len(tfidfVector)):
count=count 1
clear_output()
print(count)
similarity=cosine_similarity(tfidfVector[i],tfidfVector[j])
duplicates.append((i,j,similarity))
Теперь ожидаемые результаты в порядке, но для вычисления требуется вечность. есть предложения, как сделать это быстрее?
Комментарии:
1. Можете ли вы использовать
DataFrame
? Их векторные реализации могут значительно ускорить это.2. Спасибо 🙂 я попробую.