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

В этом учебнике вы узнаете, как использовать Python для подсчета количества слов и частот слов как в строке, так и в текстовом файле. Умение считать слова и частоты слов — это полезный навык. Например, знание того, как это делать, может быть важно в алгоритмах машинного обучения для классификации текста.

К концу этого учебника вы узнаете:

  • Как подсчитать количество слов в строке

  • Как подсчитать количество слов в текстовом файле

  • Как вычислять частоты слов с использованием Python

Содержание

  • Подсчет количества слов в Python с использованием split()

  • Подсчет количества слов в Python с использованием Regex

  • Вычисление частот слов в Python

  • Заключение

  • Дополнительные ресурсы

Чтение текстового файла в Python

Процессы подсчета слов и вычисления частот слов, показанные ниже, одинаковы для строки и для всего текстового файла. Поэтому в этом разделе кратко описывается, как читать текстовый файл в Python.

Если вы хотите получить более подробное руководство по чтению текстового файла в Python, ознакомьтесь с этим учебником. Вот быстрый пример кода, который можно использовать для загрузки содержимого текстового файла в строку Python:

# Чтение текстового файла в Python
file_path = '/Users/datagy/Desktop/sample_text.txt'

with open(file_path) as file:
    text = file.read()

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

Подсчет количества слов в Python с использованием split()

Один из самых простых способов подсчитать количество слов в строке Python — использовать функцию split(). Функция split() выглядит следующим образом:

# Понимание функции split()
str.split(
   sep=None     # Разделитель для разделения
   maxsplit=-1  # Количество разделений
)

По умолчанию Python будет рассматривать последовательности пробелов как единый разделитель. Это означает, что если в нашей строке было несколько пробелов, они будут рассматриваться как единый разделитель. Давайте посмотрим, что возвращает этот метод:

# Разделение строки с помощью .split()
text = 'Welcome to datagy! Here you will learn Python and data science.'
print(text.split())

# Возвращает: ['Welcome', 'to', 'datagy!', 'Here', 'you', 'will', 'learn', 'Python', 'and', 'data', 'science.']

Мы видим, что метод теперь возвращает список элементов. Поскольку мы можем использовать функцию len() для подсчета количества элементов в списке, мы можем создать подсчет слов. Давайте посмотрим, как это выглядит:

# Подсчет слов с помощью .split()
text = 'Welcome to datagy! Here you will learn Python and data science.'
print(len(text.split()))

# Возвращает: 11

Подсчет количества слов в Python с использованием Regex

Еще один простой способ подсчитать количество слов в строке Python — использовать библиотеку регулярных выражений re. Библиотека включает функцию findall(), которая позволяет искать различные шаблоны строк.

Поскольку мы можем использовать регулярные выражения для поиска шаблонов, сначала нужно определить наш шаблон. В этом случае мы хотим шаблоны алфавитно-цифровых символов, разделенных пробелами.

Для этого мы можем использовать шаблон \w+, где \w представляет любой алфавитно-цифровой символ, а + обозначает одно или несколько вхождений. Как только шаблон встречает пробел, например, пробел, он останавливает шаблон там.

Давайте посмотрим, как мы можем использовать этот метод для создания подсчета слов с использованием библиотеки регулярных выражений re:

# Подсчет слов с использованием регулярных выражений
import re
text = 'Welcome to datagy! Here you will learn Python and data science.'
print(len(re.findall(r'\w+', text)))

# Возвращает: 11

Вычисление частот слов в Python

Для вычисления частот слов мы можем использовать либо класс defaultdict, либо класс Counter. Частоты слов представляют, как часто определенное слово встречается в тексте.

Использование defaultdict для вычисления частот слов в Python

Давайте посмотрим, как мы можем использовать defaultdict для вычисления частот слов в Python. Класс defaultdict расширяет обычный словарь Python, предоставляя полезные функции для инициализации отсутствующих ключей.

Благодаря этому мы можем пройтись по тексту и подсчитать количество вхождений каждого слова. Давайте посмотрим, как мы можем использовать его для создания частот слов для данной строки:

# Создание частот слов с использованием defaultdict
from collections import defaultdict
import re

text = 'welcome to datagy! datagy will teach data. data is fun. data data data!'

counts = defaultdict(int)
for word in re.findall(r'\w+', text):
    counts[word] += 1

print(counts)

# Возвращает:
# defaultdict(<class 'int'>, {'welcome': 1, 'to': 1, 'datagy': 2, 'will': 1, 'teach': 1, 'data': 5, 'is': 1, 'fun': 1})

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

  • Мы импортировали как функцию defaultdict, так и библиотеку re

  • Мы загрузили текст и создали экземпляр defaultdict с использованием функции int

  • Затем мы прошли по каждому слову в списке слов и добавили одно для каждого вхождения

Использование Counter для создания частот слов в Python

Другой способ сделать это — использовать класс Counter. Преимущество этого подхода заключается в том, что мы можем легко определить самое частотное слово. Давайте посмотрим, как мы можем использовать этот подход:

# Создание частот слов с использованием Counter
from collections import Counter
import re

text = 'welcome to datagy! datagy will teach data. data is fun. data data data!'
counts = Counter(re.findall(r'\w+', text))
print(counts)

# Возвращает:
# Counter({'data': 5, 'datagy': 2, 'welcome': 1, 'to': 1, 'will': 1, 'teach': 1, 'is': 1, 'fun': 1})

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

  • Мы импортировали необходимые библиотеки и классы

  • Мы передали результирующий список из функции findall() в класс Counter

  • Мы напечатали результат этого класса

Одним из преимуществ этого подхода является то, что мы можем легко найти самое частотное слово, используя функцию .most_common(). Эта функция возвращает отсортированный список кортежей, упорядочивая элементы от самого частого к наименее частому. Благодаря этому мы можем просто получить доступ к 0-му индексу, чтобы найти самое частое слово:

# Поиск самого частого слова
from collections import Counter
import re

text = 'welcome to datagy! datagy will teach data. data is fun. data data data!'
counts = Counter(re.findall(r'\w+', text))
print(counts.most_common()[0])

# Возвращает:
# ('data', 5)

Заключение

В этом учебнике вы узнали, как создавать подсчеты слов и частоты слов с использованием Python. Вы узнали несколько различных способов подсчета слов, включая использование метода .split() и библиотеки re. Затем вы узнали различные способы создания частот слов с использованием defaultdict и Counter. Используя метод Counter, вы смогли найти самое частое слово в строке.

Дополнительные ресурсы

Чтобы узнать больше о связанных темах, ознакомьтесь с учебниками ниже:

  • Python Defaultdict: Обзор и примеры

  • Python: Подсчет количества вхождений в списке (6 способов)

  • Python: Подсчет количества вхождений в строке (4 способа!)

  • Python re: Официальная документация

Last updated