Как посчитать слова в тексте с помощью Python

Раздел: Работа с данными -> Подсчёт и статистика

Подсчёт слов в Python: простое и точное решение

Как быстро получить количество слов, игнорируя лишние пробелы?

Самый простой и быстрый способ — использовать метод split(). Он разбивает строку по любым пробельным символам (пробел, табуляция, перевод строки) и автоматически удаляет пустые элементы. Результат — список слов, а его длина — искомое число.

text = "Программирование на Python     увлекательно!"
word_count = len(text.split())
print(word_count)  # 3

количество слов python (подсчёт количества слов в python)

Пояснение: split() без аргументов обрабатывает даже множественные пробелы и возвращает только непустые элементы. Это решение подходит для большинства задач, где не требуется учитывать знаки препинания как часть слова.

Типичная ошибка: использование split(' ') с явным пробелом. В этом случае строка с несколькими пробелами создаёт пустые строки в списке, и количество слов будет завышено. Решение — всегда применять split() без аргументов.

Как учесть знаки препинания и пунктуацию?

Если слово «Python!» должно считаться одним словом, а не «Python!» отдельно, используют регулярные выражения. Модуль re позволяет выделить только буквенно-цифровые последовательности.

import re
text = "Привет, мир! Сколько здесь слов?"
words = re.findall(r'\w+', text)
print(len(words))  # 5

вывести количество чисел в python (вывод количества чисел в python)

Примечание: шаблон \w+ соответствует буквам, цифрам и символу подчёркивания. Для русского языка это тоже работает, так как \w в Python учитывает Unicode.

Проблема: если текст содержит апострофы или дефисы внутри слов (например, «кое-как», «don't»), регулярка \w+ разобьёт их на части. Для сохранения таких слов используют r"[\w'-]+" или более сложные шаблоны.

Как подсчитать количество уникальных слов?

Для получения числа уникальных лексических единиц достаточно превратить список слов во множество set.

text = "Python Python java java C#"
unique = len(set(text.lower().split()))
print(unique)  # 3 (python, java, c#)

Важно: приведение к нижнему регистру помогает избежать дублирования из-за разного регистра.

Как подсчитать частоту каждого слова?

Используйте collections.Counter. Он возвращает словарь, где ключи — слова, значения — количество вхождений.

from collections import Counter
text = "яблоко груша яблоко апельсин груша яблоко"
counter = Counter(text.split())
print(counter)  # Counter({'яблоко': 3, 'груша': 2, 'апельсин': 1})

Ошибка: если в тексте есть знаки препинания, слова с одинаковым смыслом будут считаться разными. Перед подсчётом следует очистить текст регулярным выражением.

Как обработать большой файл, не загружая его целиком в память?

Читайте файл построчно и обновляйте счётчик на каждой итерации. Для экономии памяти можно использовать wc-подобный алгоритм.

def count_words_in_file(filename):
    total = 0
    with open(filename, 'r', encoding='utf-8') as f:
        for line in f:
            total += len(line.split())
    return total

print(count_words_in_file('example.txt'))

Совет: если нужна ещё и статистика по словам, используйте Counter с обновлением через counter.update(line.split()).

Как подсчитать слова, игнорируя цифры или специальные символы?

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

import re
text = "Тест123 и ещё тест."
words = re.findall(r'[а-яА-ЯёЁ]+', text)
print(len(words))  # 3

Проблема: при работе с разными языками шаблон может стать громоздким. Лучше использовать Unicode-свойства: p{L} с модулем regex (нестандартный пакет).

Все примеры можно комбинировать в зависимости от конкретной задачи. Основное решение через split() работает в 90% случаев и не требует дополнительных библиотек.

Расширенные примеры подсчёта слов

Ниже приведены более специфичные сценарии с подробными пояснениями.

1. Подсчёт слов определённой длины

Отбор слов, длина которых больше 5 символов:

Пример
text = "Программирование это искусство"
words = [w for w in text.split() if len(w) > 5]
print(words)  # ['Программирование', 'искусство']
print(len(words))  # 2
['Программирование', 'искусство']
2

2. Подсчёт слов с заглавной буквы

Регулярное выражение с учётом Unicode для поиска слов, начинающихся с заглавной:

Пример
import re
text = "Москва столица России. Рим древний город."
capital_words = re.findall(r'\b[А-ЯЁA-Z][а-яёa-z]*', text)
print(len(capital_words))  # 3 (Москва, Россия, Рим)
3

3. Частотный анализ с сортировкой по количеству

Вывод 3 самых частых слов с очисткой от пунктуации:

Пример
from collections import Counter
import re
text = "Яблоко, груша, яблоко, апельсин, груша, яблоко, банан."
words = re.findall(r'\w+', text.lower())
counter = Counter(words)
most_common = counter.most_common(3)
print(most_common)
[('яблоко', 3), ('груша', 2), ('апельсин', 1)]

4. Подсчёт слов в строке с эмодзи

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

Пример
import re
text = "Привет ? как дела? ??"
# Сохраним только эмодзи и буквы
words = re.findall(r'[\w?]+', text)
print(len(words))  # 4: ['Привет', '?', 'как', 'дела']
4

5. Потоковая обработка очень большого файла с подсчётом уникальных слов

Используем set и читаем файл построчно, чтобы не держать всё в памяти:

Пример
unique_words = set()
with open('big_file.txt', 'r', encoding='utf-8') as f:
    for line in f:
        # очищаем от пунктуации и приводим к нижнему регистру
        import re
        words = re.findall(r'\w+', line.lower())
        unique_words.update(words)
print(f"Уникальных слов: {len(unique_words)}")

6. Подсчёт слов, игнорируя стоп-слова

Фильтрация перед подсчётом:

Пример
stop_words = {'и', 'в', 'на', 'с', 'по', 'для', 'от'}
text = "Книга на столе и ручка в ящике"
words = [w.lower() for w in text.split() if w.lower() not in stop_words]
print(len(words))  # 4: книга, столе, ручка, ящике
4

7. Использование библиотеки NLTK для подсчёта слов с учётом токенизации

NLTK предоставляет более продвинутую токенизацию, учитывающую сокращения и пунктуацию:

Пример
from nltk.tokenize import word_tokenize
# предварительно скачать punkt: nltk.download('punkt')
text = "I can't do it."
tokens = word_tokenize(text)
print(tokens)
print(len(tokens))  # 5: ['I', 'ca', "n't", 'do', 'it', '.'] (пунктуация отдельно)
['I', 'ca', "n't", 'do', 'it', '.']
6

Обратите внимание: NLTK выделяет апостроф отдельно. Для подсчёта только слов можно отфильтровать знаки.

Примеры показывают гибкость Python при работе с текстовыми данными. Выбор метода зависит от требований к точности, производительности и контексту.

Подсчёт количества слов в Python - comments

En
количество слов python (python)