Найти тему
EasyCode

Python - как узнать частоту слов в тексте

Например, мы хотим определить частоту слов в тексте. В Python есть стандартная библиотека collections, она предоставляет нам очень хороший способ отслеживать частоты слов, с помощью специального объекта collections.Counter.

Объект collections.Counter не только отслеживает частоты, но и предоставляет некоторые специальные методы для извлечения наиболее распространенных записей.

Пример:

>>> txt = "Далеко-далеко за словесными горами в стране гласных и согласных живут рыбные тексты. Вдали от всех живут они в буквенных домах на берегу Семантика большого языкового океана. Маленький ручеек Даль журчит по всей стране и обеспечивает ее всеми необходимыми правилами."

>>> from collections import Counter

>>> counts = Counter(txt.split())

>>> counts

Counter({'в': 2, 'стране': 2, 'и': 2, 'живут': 2, 'Далеко-далеко': 1, 'за': 1, 'словесными': 1, 'горами': 1, 'гласных': 1, 'согласных': 1, 'рыбные': 1, 'тексты.': 1, 'Вдали': 1, 'от': 1, 'всех': 1, 'они': 1, 'буквенных': 1, 'домах': 1, 'на': 1, 'берегу': 1, 'Семантика': 1, 'большого': 1, 'языкового': 1, 'океана.': 1, 'Маленький': 1, 'ручеек': 1, 'Даль': 1, 'журчит': 1, 'по': 1, 'всей': 1, 'обеспечивает': 1, 'ее': 1, 'всеми': 1, 'необходимыми': 1, 'правилами.': 1})

Сортируем по частоте по убыванию:

>>> counts.most_common()

[('в', 2), ('стране', 2), ('и', 2), ('живут', 2), ('Далеко-далеко', 1), ('за', 1), ('словесными', 1), ('горами', 1), ('гласных', 1), ('согласных', 1), ('рыбные', 1), ('тексты.', 1), ('Вдали', 1), ('от', 1), ('всех', 1), ('они', 1), ('буквенных', 1), ('домах', 1), ('на', 1), ('берегу', 1), ('Семантика', 1), ('большого', 1), ('языкового', 1), ('океана.', 1), ('Маленький', 1), ('ручеек', 1), ('Даль', 1), ('журчит', 1), ('по', 1), ('всей', 1), ('обеспечивает', 1), ('ее', 1), ('всеми', 1), ('необходимыми', 1), ('правилами.', 1)]

или можно так:

>>> sorted(counts.items(), key=lambda pair: pair[1], reverse=True)

[('в', 2), ('стране', 2), ('и', 2), ('живут', 2), ('Далеко-далеко', 1), ('за', 1), ('словесными', 1), ('горами', 1), ('гласных', 1), ('согласных', 1), ('рыбные', 1), ('тексты.', 1), ('Вдали', 1), ('от', 1), ('всех', 1), ('они', 1), ('буквенных', 1), ('домах', 1), ('на', 1), ('берегу', 1), ('Семантика', 1), ('большого', 1), ('языкового', 1), ('океана.', 1), ('Маленький', 1), ('ручеек', 1), ('Даль', 1), ('журчит', 1), ('по', 1), ('всей', 1), ('обеспечивает', 1), ('ее', 1), ('всеми', 1), ('необходимыми', 1), ('правилами.', 1)]

Получаем ТОП-3 самых частотных слов:

>>> counts.most_common(3)

[('в', 2), ('стране', 2), ('и', 2)]

Получаем ТОП-3 самых непопулярных, редких слов:

>>> counts.most_common()[:-4:-1]

[('правилами.', 1), ('необходимыми', 1), ('всеми', 1)]

Получим частоту в тексте слова "стране":

>>> counts['стране']

2

Наука
7 млн интересуются