Подсчет слов в строке или файле при помощи Python

В этой статье мы разберем, как при помощи 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})

Давайте разберем, что мы здесь сделали:

  1. Мы импортировали функцию defaultdict и библиотеку re.
  2. Мы загрузили некоторый текст и создали defaultdict, используя функцию int.
  3. Затем мы перебрали список слов, добавляя единицу к счетчику при каждой встрече слова.

Использование 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})

Давайте разберем, что мы здесь сделали:

  1. Импортировали необходимые библиотеки и классы
  2. Передали полученный список из функции findall() в класс Counter
  3. Распечатали результат

Одним из преимуществ этого подхода является то, что мы можем легко найти самое частотное слово с помощью функции .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».

Оставьте комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *