В этой статье мы разберем, как при помощи Python посчитать слова в строке и текстовом файле, а также – как определить частотность слов. Подсчет слов – полезный навык, он может пригодиться при работе с алгоритмами машинного обучения.
Чтение текстового файла в Python
Процессы подсчета слов и вычисления их частотности, которые мы разберем, одинаковы как для строк, так и для всего текстового файла. Поэтому давайте быстренько припомним, как читать текстовый файл в Python.
# Reading a Text File in Python file_path = '/Users/datagy/Desktop/sample_text.txt' with open(file_path) as file: text = file.read()
Примечание редакции: подробнее о работе с текстовыми файлами читайте в статье “Как обрабатывать текстовые файлы в Python 3”.
Подсчет слов с помощью функции split()
Одним из самых простых способов подсчета количества слов в строке Python является использование функции split()
. Функция split()
выглядит следующим образом:
# Разбор функции split() str.split( sep=None # Разделитель, по которому будет разбиваться строка maxsplit=-1 # Число разбиений )
По умолчанию Python рассматривает последовательные пробельные символы как один разделитель. Это означает, что если в нашей строке идут несколько пробелов подряд, то они будут считаться одним разделителем. Давайте посмотрим, что возвращает этот метод:
# Разделение строки при помощи .split() text = 'Welcome to PythonTurbo! Here you will learn Python.' print(text.split()) # Вывод: # ['Welcome', 'to', 'PythonTurbo!', 'Here', 'you', 'will', 'learn', 'Python.']
Как видите, метод возвращает список элементов. Поскольку для подсчета количества элементов в списке можно использовать функцию len()
, мы можем организовать подсчет слов. Давайте посмотрим, как это выглядит:
# Разделение строки при помощи .split() text = 'Welcome to PythonTurbo! Here you will learn Python.' print(len(text.split())) # Вывод: 8
Подсчет количества слов с помощью regex
Еще один простой способ подсчитать количество слов в строке Python – использовать библиотеку регулярных выражений re
. Библиотека поставляется с функцией findall()
, которая позволяет искать различные шаблоны строк.
Поскольку поиск при помощи регулярных выражений происходит по шаблону, сначала мы должны определить наш шаблон. В данном случае нам нужен шаблон из буквенно-цифровых символов, разделенных пробелами.
Для этого мы можем использовать шаблон \w+
, где \w
обозначает любой буквенно-цифровой символ, а +
– одно или несколько вхождений. Пробельные символы в шаблон не попадают.
Давайте посмотрим, как можно использовать этот метод для подсчета слов:
# Подсчет слов при помощи регулярных выражений import re text = 'Welcome to PythonTurbo! Here you will learn Python.' print(len(re.findall(r'\w+', text))) # Вывод: 8
Вычисление частотности слов в Python
Чтобы определить, как часто в тексте встречаются те или иные слова, можно использовать либо класс defaultdict
, либо класс Counter
.
Использование defaultdict для вычисления частотности слов
defaultdict
расширяет возможности обычного словаря Python, предоставляя полезные функции для инициализации отсутствующих ключей. Благодаря этому мы можем перебирать фрагменты текста и подсчитывать количество вхождений каждого слова.
Давайте рассмотрим пример.
# Определение частотности слов при помощи defaultdict from collections import defaultdict import re text = 'Welcome to PythonTurbo! Python is fun! Python, Python, Python!' counts = defaultdict(int) for word in re.findall('\w+', text): counts[word] += 1 print(counts) # Вывод: # defaultdict(<class 'int'>, {'Welcome': 1, 'to': 1, 'PythonTurbo': 1, 'Python': 4, 'is': 1, 'fun': 1})
Давайте разберем, что мы здесь сделали:
- Мы импортировали функцию
defaultdict
и библиотекуre
. - Мы загрузили некоторый текст и создали defaultdict, используя функцию
int
. - Затем мы перебрали список слов, добавляя единицу к счетчику при каждой встрече слова.
Использование Counter для вычисления частотности слов
Другой способ посчитать вхождения слов – использовать класс Counter
. Преимущество этого подхода в том, что мы можем даже легко определить наиболее часто встречающееся слово. Давайте посмотрим, как это работает:
# Определение частотности слов при помощи Counter from collections import Counter import re text = 'Welcome to PythonTurbo! Python is fun! Python, Python, Python!' counts = Counter(re.findall('\w+', text)) print(counts) # Вывод: # Counter({'Python': 4, 'Welcome': 1, 'to': 1, 'PythonTurbo': 1, 'is': 1, 'fun': 1})
Давайте разберем, что мы здесь сделали:
- Импортировали необходимые библиотеки и классы
- Передали полученный список из функции
findall()
в классCounter
- Распечатали результат
Одним из преимуществ этого подхода является то, что мы можем легко найти самое частотное слово с помощью функции .most_common()
. Эта функция возвращает отсортированный список кортежей, упорядочивая элементы от наиболее частотного к наименее частотному. Поэтому, чтобы найти слово, которое встречается чаще всего, можно просто обратиться к индексу 0:
# Поиск наиболее частотного слова from collections import Counter import re text = 'Welcome to PythonTurbo! Python is fun! Python, Python, Python!' counts = Counter(re.findall('\w+', text)) print(counts.most_common()[0]) # Вывод: # ('Python', 4)
Заключение
Из этой статьи вы узнали, как узнать количество слов и их частотность с помощью Python. Мы разобрали несколько подходов, включая использование метода .split()
и библиотеки re
. Также мы рассмотрели применение defaultdict
и Counter
для определения частоты вхождения слов.
Перевод статьи «Python: Count Words in a String or File».