Мои вложенные циклы занимают так много времени при расчете частоты-члена - PullRequest
0 голосов
/ 30 марта 2020

У меня есть список «total_vocabulary» со всеми уникальными словами в коллекции из 56 документов. Есть еще один список со словами каждого документа "rest_do c". Я хочу вычислить частоту появления каждого слова из «total_vocabulary» в «rest_do c», поэтому список «term_freq» будет списком списка того же размера, что и total_vocabulary, и по каждому индексу term_freq будет списком размером 56 представляя общее вхождение каждого слова в каждом документе. Проблема в том, что вложенные циклы занимают так много времени, почти минуту, чтобы бежать. есть ли способ сделать это быстрее? код:

for i in range(len(total_vocabulary)):
    doc = []
    for j in range(len(rest_doc)):
        counter = 0
        for k in range(len(rest_doc[j])):
            if total_vocabulary[i] == rest_doc[j][k]:
                counter = counter + 1
        doc.append(counter)
    term_freq.append(doc)  

вот мой код.

1 Ответ

0 голосов
/ 30 марта 2020

Вы повторяете слова в каждом документе много раз - по одному разу для каждого слова в total_vocabulary.

Было бы намного быстрее, если бы вы перебирали слова в каждом документе просто один раз , и вы можете сделать это, переставив l oop, а также превратив total_vocabulary в набор вместо списка , поскольку поиск по множеству происходит намного быстрее.

vocab_set = set(total_vocabulary)
for document in documents:
    for word in document:
        if word in vocab_set:
            counter = counter + 1
...