Как я могу сделать сходство моего документа из проверки одной матрицы быстрее? - PullRequest
2 голосов
/ 12 апреля 2019

Я пытаюсь найти сходство документов по большому набору статей (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))

Теперь ожидаемые результаты в порядке, но для расчета требуется целая вечность.Любое предложение, как сделать это быстрее?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...