Подсчет элементов списка с помощью счетчика - PullRequest
1 голос
/ 30 сентября 2019

Я новичок в python и программировании, и мне нужна ваша помощь.

Я пытаюсь посчитать самые распространенные слова в тексте, используя nltk.word_tokenize и Counter. Когда я получаю список всех элементов текста и хочу подсчитать их все, Counter считает только буквы.

Это код:

from nltk.tokenize import word_tokenize

word_counter = Counter()

test3 = "hello, hello, how are you? It's me - Boris"
words = word_tokenize(test3)
print(words)
['hello', ',', 'hello', ',', 'how', 'are', 'you', '?', 'It', "'s", 'me', '-', 'Boris']

for word in words:
    word_counter.update(word)
print(word_counter)

Вывод:

Counter({'o': 5, 'e': 4, 'l': 4, 'h': 3, ',': 2, 'r': 2, 's': 2, 'w': 1, 'a': 1, 'y': 1, 'u': 1, '?': 1, 'I': 1, 't': 1, "'": 1, 'm': 1, '-': 1, 'B': 1, 'i': 1})

Как я мог решить это? Я просматриваю некоторые темы, они решают это с помощью text.split(), но это не так точно, как nltk.

Спасибо!

1 Ответ

1 голос
/ 30 сентября 2019

Просто используйте Counter следующим образом:

word_counter = Counter(words)

Counter.update берет итерацию и обновляет счетчик для элементов, которые итерация производит. В вашем цикле это будут буквы слова (помните, что строки являются итеративными). Если бы вы использовали update, вы могли бы сделать:

word_counter = Counter()
# ...
words = word_tokenize(test3)
word_counter.update(words)

Но нет необходимости разделять инициализацию счетчика и фактический счет, если вы не хотите повторить второй шаг для нескольких списковслова.

...