Документ Частота в Python

Я хочу подсчитать, в скольких документах появляется то или иное слово. Например, слово «Собака» появилось в 67 документах из 100.

1 документ соответствует 1 файлу.

Таким образом, частоту слова «собака» не нужно учитывать. Например, в документе 1 слово «Собака» появилось 250 раз, НО это будет считаться только одним подсчетом, поскольку моя цель состоит в том, чтобы подсчитать документы, а не сколько раз слово «Собака» появлялось в конкретном документе.

Пример:

  • Документ 1: Собака появлялась 250 раз
  • Документ 2: Собака появлялась 1000 раз
  • Документ 3: Собака появилась 1 раз
  • Документ 4: Собака появлялась 0 раз
  • Документ 5: Собака появлялась 2 раза

Значит ответ должен быть 4

У меня есть свой собственный алгоритм, но я считаю, что есть эффективный способ сделать это. Я использую Python 3.4 с библиотеками NLTK. Мне нужна помощь. Спасибо, ребята!

Вот мой код

# DOCUMENT FREQUENCY
for eachadd in wordwithsource:
    for eachaddress in wordwithsource:
        if eachaddress == eachadd:
            if eachaddress not in copyadd:
                countofdocs=0
                copyadd.append(eachaddress)
                countofdocs = countofdocs+1
                addmanipulation.append(eachaddress[0])

for everyx in addmanipulation:
    documentfrequency = addmanipulation.count(everyx)
    if everyx not in otherfilter:
        otherfilter.append(everyx)
        documentfrequencylist.append([everyx,documentfrequency])

#COMPARE WORDS INTO DOC FREQUENCY 
for everywords in tempwords:
    for everydocfreq in documentfrequencylist:
        if everywords.find(everydocfreq[0]) !=-1:
            docfreqofficial.append(everydocfreq[1])

for everydocfrequency in docfreqofficial:
    docfrequency=(math.log10(numberofdocs/everydocfrequency))
    docfreqanswer.append(docfrequency)

person Richter_Belmont    schedule 20.08.2015    source источник


Ответы (2)


Это можно сделать в gensim.

from gensim import corpora

dictionary = corpora.Dictionary(doc for doc in corpus)
dictionary.dfs

doc — это список токенов, а corpus — это список документов. Экземпляр Dictionary также хранит общую частотность терминов (cfs).

https://radimrehurek.com/gensim/corpora/dictionary.html

person Ryan Boch    schedule 18.09.2019

Вы можете сохранить частотный словарь для каждого документа и использовать другой глобальный словарь для частоты слов документа. Я использовал счетчик для простоты.

from collections import Counter

#using a list to simulate document store which stores documents
documents = ['This is document %d' % i for i in range(5)]

#calculate words frequencies per document
word_frequencies = [Counter(document.split()) for document in documents]

#calculate document frequency
document_frequencies = Counter()
map(document_frequencies.update, (word_frequency.keys() for word_frequency in word_frequencies))

print(document_frequencies)

>>>...Counter({'This': 5, 'is': 5, 'document': 5, '1': 1, '0': 1, '3': 1, '2': 1, '4': 1})
person gnub    schedule 27.08.2015