Количество слов в тексте на Python: подробное объяснение

Раздел: Основы Python -> Строки

Подсчет количества слов в строке: основные методы

Наиболее эффективное решение: len(s.split())

Метод split() разбивает строку по любому пробельному символу (пробел, табуляция, перевод строки) и возвращает список слов (последовательностей непробельных символов). Функция len() возвращает количество элементов списка. Этот способ работает быстро и подходит для большинства задач, где слова разделены пробелами.

text = "Привет мир! Это Python 3.9"
count = len(text.split())
print(count)  # 5

Python strip (метод strip в python)

Типичные ошибки и их решения:

  • Пустая строка: "".split() возвращает пустой список, len() даёт 0 – корректно.
  • Строка из одних пробелов: " ".split() также возвращает [], результат 0.
  • Знаки препинания, прикреплённые к слову (например, "мир!") считаются частью слова. Если требуется их игнорировать, используйте регулярные выражения (см. варианты ниже).
  • Разделение по нескольким пробелам – split() обрабатывает их автоматически.

Цель использования:

Быстрый подсчёт слов в строке, где слова разделены произвольными пробельными символами, и не требуется очистка от пунктуации.

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

Используйте модуль re и шаблон \b\w+\b, который находит последовательности букв, цифр и символа подчёркивания (слова). Это отфильтровывает пунктуацию.

import re
text = "Привет, мир! Это Python 3.9."
words = re.findall(r'\b\w+\b', text)
print(len(words))  # 5

Python повторить строку (повторение строки в python)

Проблемы:

  • Для кириллицы шаблон \w работает, но может не захватывать апострофы или дефисы внутри слов. В таких случаях нужно уточнять шаблон, например [а-яА-ЯёЁa-zA-Z]+.
  • Регулярные выражения медленнее простого split(), но точнее для текстов с пунктуацией.

Когда использовать:

Для анализа естественного языка, обработки текстов с разными знаками препинания.

Как подсчитать количество слов без использования встроенных функций split и re?

Реализовать ручной подсчёт: пройти по строке и считать переходы от непробельного символа к пробельному.

def count_words_manual(text):
    count = 0
    in_word = False
    for ch in text:
        if ch.isspace():
            in_word = False
        else:
            if not in_word:
                count += 1
                in_word = True
    return count

text = "  Пример   строки с  пробелами"
print(count_words_manual(text))  # 4

Tuple в str python (преобразование кортежа в строку в python)

Ошибки:

  • Неправильная обработка начальных/конечных пробелов – в примере учтено.
  • Строка с одними пробелами даёт 0, что верно.

Цель:

Понимание алгоритма подсчёта, полезно для обучения и ситуаций, когда нужно изменить логику (например, считать только определённые символы).

Как подсчитать количество слов, разбивая только по пробелу (игнорируя табуляцию)?

Используйте split(' ') с одним пробелом, но он создаёт пустые строки при множественных пробелах. Надо отфильтровать их.

text = "слово1   слово2\tслово3"
parts = text.split(' ')
words = [w for w in parts if w]
print(len(words))  # 2 (табуляция не считается разделителем)

Python объект в строку (преобразование объекта в строку в python)

Проблемы:

Разделителем являются только пробелы. Табуляция, новая строка остаются частью слов (если они не в начале/конце). Обычно это нежелательно.

Когда нужно:

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

Как подсчитать количество слов, состоящих только из букв (без цифр и подчёркиваний)?

Используйте re.findall с шаблоном [a-zA-Zа-яА-ЯёЁ]+.

import re
text = "Python 3.9 code_test"
words = re.findall(r'[a-zA-Zа-яА-ЯёЁ]+', text)
print(len(words))  # 2 ('Python', 'code' – 'test' отпало из-за подчёркивания, но оно есть? 'code_test' – подчёркивание не буква, разобьётся на 'code' и 'test'? Нет, + не допускает подчёркивание, поэтому 'code_test' не будет найден целиком.)

Ошибка:

Слова с дефисом (например, «как-то») не будут распознаны, если не включить дефис в шаблон.

Применение:

Анализ текстов, где цифры и символы не считаются частью слов.

- функция разделить python (разделение строки на список в python)
- вывести символ строки python (вывод символа строки в python)
- вывести длину строки python (вывести длину строки в python)

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

Пример 1: Подсчёт слов в многострочном тексте из файла

Пример
with open('text.txt', 'r', encoding='utf-8') as f:
    content = f.read()
word_count = len(content.split())
print(f'Количество слов: {word_count}')
Количество слов: 1247

Пример 2: Использование генератора для экономии памяти

Пример
def word_count_generator(file_path):
    with open(file_path, 'r', encoding='utf-8') as f:
        for line in f:
            yield len(line.split())

total = sum(word_count_generator('large_text.txt'))
print(f'Всего слов: {total}')
Всего слов: 84590

Пример 3: Подсчёт только уникальных слов с помощью Counter

Пример
from collections import Counter
import re

text = "кот собака кот птица собака кот"
words = re.findall(r'\w+', text)
counter = Counter(words)
print(f'Количество уникальных слов: {len(counter)}')
print(f'Самые частые: {counter.most_common(2)}')
Количество уникальных слов: 3
Самые частые: [('кот', 3), ('собака', 2)]

Пример 4: Подсчёт слов с использованием filter и лямбда-функции

Пример
text = "Пример   строки с   несколькими   пробелами"
words = list(filter(None, text.split(' ')))
print(len(words))  # 4
4

Пример 5: Подсчёт слов, удовлетворяющих условию (длина > 3)

Пример
text = "Python Java C++ JavaScript Rust Go"
words = text.split()
long_words = [w for w in words if len(w) > 3]
print(f'Всего слов: {len(words)}, длинных (>3): {len(long_words)}')
Всего слов: 6, длинных (>3): 4

Пример 6: Использование map и sum для подсчёта слов в списке строк

Пример
lines = ["один два три", "четыре пять", "шесть"]
counts = list(map(lambda s: len(s.split()), lines))
total = sum(counts)
print(f'Всего слов: {total}')
Всего слов: 6

Пример 7: Подсчёт слов с определением границ вручную (для нестандартных разделителей)

Пример
def custom_word_count(text, delimiters=',;: '):
    import re
    pattern = '[' + re.escape(delimiters) + ']'
    parts = re.split(pattern, text)
    return len([p for p in parts if p])

text = "яблоко,груша;слива:персик апельсин"
print(custom_word_count(text))  # 5
5

Пример 8: Подсчёт слов с учётом регистра (считаем разные регистры как отдельные слова?)

Пример
import re
text = "Python python PYTHON"
words = re.findall(r'\w+', text)
print(f'Без приведения: {len(words)} уникальных? {len(set(words))}')
words_lower = [w.lower() for w in words]
print(f'С приведением: {len(set(words_lower))}')
Без приведения: 3 уникальных? 3
С приведением: 1

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

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