Counter () - это тройной счет во вложенном списке - PullRequest
0 голосов
/ 29 октября 2019

Я хочу найти в текстовом файле по определенным ключевым словам, а затем создать словарь с абсолютным количеством и относительной частотой каждого ключевого слова. Я использую Counter () во вложенном цикле, который должен искать каждое ключевое слово в моем списке, а затем подсчитывать, как часто каждое из них появляется в документе. Но, хотя Counter правильно подсчитывает каждое ключевое слово, он затем умножает это количество на общее количество ключевых слов. Я думаю, что неправильно настраиваю свой вложенный цикл.

from nltk.tokenize import word_tokenize
from nltk.corpus import stopwords
from nltk import FreqDist
import io
from collections import Counter


with io.open('copy.txt','r', encoding='utf-8') as tempFile:
    rawText =  tempFile.read()
    rawText = rawText.lower()

cnt = Counter()

tokens = word_tokenize(rawText)

keywords = ['kingdom', 'phylum', 'class', 'status']

for keyword in keywords:
    for keyword in tokens:
        cnt[keyword] += 1

for keyword in keywords:
    d = {'Keyword': keyword, 'Count': cnt[keyword], 'Frequency':cnt[keyword]/float(len(tokens))}
    print(d)

Я должен увидеть:

{'Count': 2, 'Frequency': 0.000882223202470225, 'Keyword': 'kingdom'}
{'Count': 6, 'Frequency': 0.002646669607410675, 'Keyword': 'phylum'}
{'Count': 14, 'Frequency': 0.0061755624172915745, 'Keyword': 'class'}
{'Count': 2, 'Frequency': 0.000882223202470225, 'Keyword': 'status'}

Но вместо этого я вижу:

{'Count': 8, 'Frequency': 0.000882223202470225, 'Keyword': 'kingdom'}
{'Count': 24, 'Frequency': 0.002646669607410675, 'Keyword': 'phylum'}
{'Count': 56, 'Frequency': 0.0061755624172915745, 'Keyword': 'class'}
{'Count': 8, 'Frequency': 0.000882223202470225, 'Keyword': 'status'}

Ответы [ 2 ]

0 голосов
/ 29 октября 2019

Я думаю, что мой цикл for был изменен. Кажется, это работает:

for token in tokens:
    if token in keywords:
        cnt[token] += 1
0 голосов
/ 29 октября 2019

Проблема здесь

for keyword in keywords:
    for keyword in tokens:
        cnt[keyword] += 1

Вы снова и снова рассчитываете длину своего ключевого слова.

Если вы можете опубликовать свой rawtext, я могу предоставить полныйрешение.

...