Методы подсчёта слов в текстах с помощью Python

Раздел: Текст -> Обработка строк

Основные методы подсчета слов в Python

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

Базовый метод: split() и len()

Самый простой и быстрый способ - разбить строку по пробелам с помощью split() и вычислить длину полученного списка:

text = "Пример текста для подсчета слов"
word_count = len(text.split())
print(word_count)

заменить символ на другой python (замена символа в строке на python)

4

Strip строки python (метод strip для строк в python)

Метод split() без аргументов разбивает строку по любым последовательностям пробельных символов (пробел, табуляция, перевод строки) и корректно обрабатывает лишние пробелы. Однако знаки препинания становятся частью слов. Если требуется их удалить, нужно предварительно очистить текст.

Типичные проблемы и их решения

  • Пустая строка: len("".split()) даст 0.
  • Слова с дефисами: "как-то" считается одним словом. Для разделения на части нужна дополнительная обработка (например, замена дефиса на пробел).
  • Знаки препинания: Если они не нужны, применяют text.replace(',','') или используют регулярные выражения.

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

Регулярные выражения помогают выделить только буквенные последовательности.

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

Python знак в строке (проверка наличия символа в строке python)

4

Python убрать пробелы (удаление пробелов из строки в python)

Шаблон \b\w+\b находит слова, состоящие из букв, цифр и символа подчеркивания. Для кириллицы флаг re.UNICODE (по умолчанию в Python 3) обеспечивает корректную работу.

Проблемы регулярного подхода

  • Символы типа апострофа ("don't") могут быть разбиты. Для их сохранения шаблон усложняется.
  • Производительность на больших текстах ниже, чем у split().

Как подсчитать слова в файле большого размера?

Построчное чтение экономит память:

total = 0
with open('text.txt', 'r', encoding='utf-8') as f:
    for line in f:
        total += len(line.split())
print(total)

числа в строке python задача (задача: числа в строке в python)

Для каждого файла можно адаптировать кодировку. Если требуется учет пунктуации, применяют re.findall к каждой строке.

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

Множество set автоматически убирает дубликаты:

text = "слово слово слово уникальное"
unique = set(text.split())
print(len(unique))

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

2

Python слово в строке (поиск слова в строке python)

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

Модуль collections.Counter возвращает словарь с количеством вхождений:

from collections import Counter
text = "кошка собака кошка птица кошка"
word_counts = Counter(text.split())
print(word_counts.most_common(2))

разделить слово python (разделение строки на слова в python)

[('кошка', 3), ('собака', 1)]

Как подсчитать слова, удовлетворяющие условию?

Например, слова длиннее 4 символов:

words = text.split()
long = [w for w in words if len(w) > 4]
print(len(long))

Как обработать текст с HTML-тегами?

Удаление тегов с помощью регулярного выражения:

import re
html = "<p>Текст абзаца</p><br/>"
clean = re.sub(r'<[^>]+>', '', html)
print(len(clean.split()))
2

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

1. Подсчет слов с учетом Unicode и апострофов

Для текстов на английском с сокращениями вроде "don't" используется шаблон, сохраняющий апостроф внутри слова:

Пример
import re
text = "Don't count the words, but the meaning."
pattern = r"[a-zA-Z]+(?:'[a-zA-Z]+)?"
words = re.findall(pattern, text)
print(len(words))
7

2. Подсчет слов с удалением стоп-слов

Стоп-слова (предлоги, союзы) часто исключаются при анализе. Пример со списком стоп-слов:

Пример
stop_words = {'и', 'в', 'на', 'с', 'по', 'для', 'о', 'от', 'к', 'у'}
text = "Кошка и собака играют на лужайке"
words = text.lower().split()
filtered = [w for w in words if w not in stop_words]
print(len(filtered))
3

3. Подсчет биграмм (пар слов)

Количество последовательных пар слов может дать информацию о коллокациях:

Пример
from collections import Counter
text = "Python язык программирования высокого уровня"
words = text.split()
bigrams = zip(words, words[1:])
bigram_counts = Counter(bigrams)
print(bigram_counts.most_common(2))
[(('Python', 'язык'), 1), (('язык', 'программирования'), 1)]

4. Подсчет слов в нескольких файлах с использованием генератора

Генератор позволяет обрабатывать файлы без загрузки всего содержимого в память:

Пример
import os

def word_generator(filenames):
    for fname in filenames:
        with open(fname, 'r', encoding='utf-8') as f:
            for line in f:
                for word in line.split():
                    yield word

files = ['file1.txt', 'file2.txt']
total = sum(1 for _ in word_generator(files))
print(total)

5. Подсчет слов после лемматизации (пример с библиотекой pymorphy2)

Лемматизация приводит слова к начальной форме, что может изменить подсчёт (например, "бежал", "бежать" считаются одним словом). Пример:

Пример
import pymorphy2
morph = pymorphy2.MorphAnalyzer()
text = "бежал бежать бегут"
lemmas = [morph.parse(w)[0].normal_form for w in text.split()]
print(len(set(lemmas)))  # уникальные леммы
2

6. Подсчет слов в PDF-документе с помощью PyPDF2

Извлекается текст со всех страниц, затем подсчитываются слова:

Пример
import PyPDF2
reader = PyPDF2.PdfReader('document.pdf')
text = ''.join(page.extract_text() for page in reader.pages)
print(len(text.split()))

7. Параллельный подсчет слов в большом тексте

Для ускорения можно разбить текст на части и обработать их в пуле потоков:

Пример
from multiprocessing import Pool

def count_words_chunk(chunk):
    return len(chunk.split())

with open('big_file.txt', 'r', encoding='utf-8') as f:
    data = f.read()
# Разделяем на 4 равные части
n = len(data) // 4
chunks = [data[i:i+n] for i in range(0, len(data), n)]
with Pool(4) as p:
    results = p.map(count_words_chunk, chunks)
print(sum(results))

Этот подход дает выигрыш при очень больших текстах и многоядерных процессорах.

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

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