Задание 10: поиск слова в текстовом документе
Считаем, сколько раз слово встречается в большом тексте: приёмом «Найти и заменить» в редакторе и кодом на Python.
Вхождение слова — каждое его появление в тексте как отдельного слова (с учётом или без учёта регистра — смотрите по условию).
Что проверяет задание 10
Задание 10 — базовый уровень, 1 балл. К ЕГЭ прилагается большой текстовый документ (обычно фрагмент литературного произведения, файл .docx или .rtf). Вопрос: «Сколько раз в тексте встречается слово …?» Часто с уточнением: в любой форме / только в данной форме / с учётом регистра. Текст огромный — считать глазами нельзя, нужен инструмент.
Приём в Word / LibreOffice Writer
Самый быстрый способ — встроенный поиск:
- Откройте документ, нажмите Найти и заменить (Ctrl+H) или Найти (Ctrl+F).
- В поле поиска введите искомое слово.
- Нажмите Найти все — редактор покажет число совпадений.
Тонкости, которые решают балл:
- Регистр. Если важен регистр — включите «Учитывать регистр» (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для границ слова.