Задание 10: поиск слова в текстовом документе

Считаем, сколько раз слово встречается в большом тексте: приёмом «Найти и заменить» в редакторе и кодом на Python.

Вхождение слова — каждое его появление в тексте как отдельного слова (с учётом или без учёта регистра — смотрите по условию).

Что проверяет задание 10

Задание 10 — базовый уровень, 1 балл. К ЕГЭ прилагается большой текстовый документ (обычно фрагмент литературного произведения, файл .docx или .rtf). Вопрос: «Сколько раз в тексте встречается слово …?» Часто с уточнением: в любой форме / только в данной форме / с учётом регистра. Текст огромный — считать глазами нельзя, нужен инструмент.

Приём в Word / LibreOffice Writer

Самый быстрый способ — встроенный поиск:

  1. Откройте документ, нажмите Найти и заменить (Ctrl+H) или Найти (Ctrl+F).
  2. В поле поиска введите искомое слово.
  3. Нажмите Найти все — редактор покажет число совпадений.

Тонкости, которые решают балл:

  • Регистр. Если важен регистр — включите «Учитывать регистр» (Match case). Иначе «Кот» и «кот» считаются вместе.
  • Целое слово. Включите «Только слово целиком» (Whole words only), иначе поиск «кот» найдёт и внутри «котёл», «скоты».
  • Все формы. Если нужно «в любой форме» (кот, кота, коту, котом), ищите по основе или перебирайте формы — обычная находка по «кот» как части слова часто и решает такую формулировку, но осторожно с лишними совпадениями.

Используя «Найти и заменить»: заменить слово само на себя — редактор сообщит число выполненных замен, это и есть количество вхождений.

Аналог на Python

Тот же подсчёт кодом. Текст разбиваем на слова и считаем. Для «целого слова» удобнее split и count по списку слов; для «подстроки» — метод строки count.

import re

text = "корова коровка коробка корона корову Корова король корова"

# 1) Целое слово "корова" без учёта регистра
words = re.findall(r"\w+", text.lower())   # разбили на слова, привели к нижнему регистру
target = "корова"
print("Слово 'корова' целиком (без регистра):", words.count(target))

# 2) Слово "корова" с учётом регистра (только нижний регистр)
words_cs = re.findall(r"\w+", text)
print("Слово 'корова' (с учётом регистра):", words_cs.count("корова"))

# 3) Как подстрока "коро" (внутри любых слов)
print("Подстрока 'коро' раз:", text.lower().count("коро"))

Вывод:

Слово 'корова' целиком (без регистра): 3
Слово 'корова' (с учётом регистра): 2
Подстрока 'коро' раз: 8

Видно, как формулировка меняет ответ: «целиком без регистра» — 3 (включая «Корова»), «с учётом регистра» — 2, «как подстрока» — 8 (попадает «коровка», «коробка», «корону» и т. д.). Поэтому на экзамене сначала точно поймите, что именно спрашивают.

Регулярное выражение для «целого слова»

Можно искать сразу регуляркой с границами слова \b:

import re

text = "кот котёл скот кот, кота Кот"
# целое слово "кот" без учёта регистра
matches = re.findall(r"\bкот\b", text, flags=re.IGNORECASE)
print("Вхождений целого слова 'кот':", len(matches))

Вывод:

Вхождений целого слова 'кот': 3

Граница \b не даёт совпасть «котёл» и «скот», а флаг IGNORECASE ловит «Кот». Запятая после «кот» — не буква, поэтому граница слова там есть.

Подсчёт всех форм слова сразу

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

import re

text = "Кот спит. У кота миска. Дал коту корм. Любуюсь котом. Думаю о коте и о собаке."
words = re.findall(r"\w+", text.lower())

forms = ["кот", "кота", "коту", "котом", "коте"]
total = sum(words.count(f) for f in forms)

print("Слов всего:", len(words))
for f in forms:
    print(f"  форма '{f}':", words.count(f))
print("Всего форм слова 'кот':", total)

Вывод:

Слов всего: 16
  форма 'кот': 1
  форма 'кота': 1
  форма 'коту': 1
  форма 'котом': 1
  форма 'коте': 1
Всего форм слова 'кот': 5

Перебор форм по списку слов даёт ровно 5, не цепляя «собаке» или другие слова. Это аккуратнее, чем поиск подстроки, и точнее отвечает на формулировку «в любой форме».

Типичные ошибки

  • Поиск подстроки вместо целого слова. «кот» внутри «скоты» — лишнее совпадение; включайте «Только слово целиком» или \b.
  • Игнорируют регистр, когда он важен. Прочитайте условие: «с заглавной буквы» — это другой подсчёт.
  • Знаки препинания. «кот.» и «кот,» — это слово «кот»; разбиение по \w+ отбрасывает пунктуацию.
  • Формы слова. «в любой форме» — это не одно и то же, что точная форма; уточняйте по условию.

Итог

  • В Word/Writer считайте вхождения через «Найти все» или «Найти и заменить» (число замен).
  • Внимательно настройте «учитывать регистр» и «только слово целиком» — они меняют ответ.
  • На Python: re.findall(r"\w+", text.lower()) + count для целых слов; \b…\b для границ слова.
Проверьте себя
1. Нужно сосчитать слово «кот» именно как отдельное слово. Что включить в поиске редактора?
AУчитывать регистр
BТолько слово целиком (Whole words only)
CПоиск по шаблону
DЗамену на пустую строку
2. Что найдёт re.findall(r"коро", text) по сравнению с целым словом «корова»?
AРовно слова «корова»
BБольше совпадений: «коро» попадёт и в «коробка», «коровка»
CМеньше совпадений
DТолько слова с заглавной буквы
3. Условие: считать без учёта регистра. Как привести текст перед подсчётом по списку слов?
Atext.upper() только у искомого слова
BПривести и текст, и искомое слово к одному регистру, например .lower()
CНичего не делать
DУдалить все пробелы
Поддержать проект