Как рассчитать количество документов, в которых встречается термин при использовании python? - PullRequest
0 голосов
/ 14 февраля 2020

Я пытаюсь вычислить значения IDF для векторизации TF-IDF. Я пытаюсь подсчитать количество документов, которые содержат каждое уникальное слово вокаба.

Это корпус:

corpus = ['это первый документ', 'этот документ второй документ ',' и это третий ',' это первый документ ']

мой код:

...

значения IDF:

for i in range(0,len(corpus)):
    o=corpus[i].split(' ')
    c=0
    for wor in n:
        for k in range(0,len(corpus)):
            if wor in o[k]:
            c=c+1
        print(wor, c) 

...

Вывод получен: и 0 документ 0 первый 1 равен 3 один 3 второй 3 4 третий 4 этот 5 и 0 документ 1 первый 1 равен 3 один 3 второй 3 4 третий 4 этот 5 и 1 документ 1 первый 1 является 3 один 3 второй 3 4 4 третий 4 этот 5 и 0 документ 0 первый 1 является 3 один 3 второй 3 4 третий 4 этот 5

Вывод, который мне нужен: это 4 - это 4, 4, первые 2 документа, 3, 1 и 1, третий 1, один 1

Ответы [ 3 ]

0 голосов
/ 14 февраля 2020

Идеально подходит для класса Counter из пакета collections

from collections import Counter

words = ' '.join(corpus)
output = Counter(words.split()).most_common()
0 голосов
/ 14 февраля 2020

Вы можете сделать это. однако то, что вы пытаетесь рассчитать, не является IDF. Это просто частота конкретного слова во всех документах.

 for i in range(0,len(corpus)):
   words=corpus[i].split(' ')
   for word in words:
     if word in freq:
       freq[word] = freq[word] + 1
     else:
       freq[word] = 1
 print(freq)
0 голосов
/ 14 февраля 2020

Я предполагаю, что n содержит ваш словарный запас. Тогда вы можете сделать это:

wordsets = [ frozenset(document.split(' ')) for document in corpus ]
results = []
for word in n:
    count = sum( 1 for s in wordsets if word in s )
    results.append((count, word))
for count, word in sorted(results, reverse=True):
    print(word, count)
...