Отбор строк, содержащих заданные ключевые слова

Для совпадения целых слов храните ключи в set и читайте texts.txt построчно. Для поиска подстрок по тысяче шаблонов подходит автомат Ахо—Корасик.

Короткий ответ

Что ответить на собеседовании

Для совпадения целых слов храните ключи в set и читайте texts.txt построчно. Для поиска подстрок по тысяче шаблонов подходит автомат Ахо—Корасик.

Подробный разбор

Ответ с пояснениями

Условие

Дано:

  1. Текстовый файл keywords.txt, в котором каждое слово‑ключ находится на отдельной строке (примерно 1000 строк).
  2. Текстовый файл texts.txt, содержащий около миллиона строк, каждая из которых представляет отдельную фразу.

Необходимо написать программу, которая формирует новый файл, включающий только те строки из texts.txt, в которых встречается хотя бы одно слово из keywords.txt.

Пример входных данных: keywords.txt:

foo
bar
baz

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

Ответ

Для совпадения целых слов храните ключи в set и читайте texts.txt построчно. Для поиска подстрок по тысяче шаблонов подходит автомат Ахо—Корасик.

Ниже выбрана регистронезависимая проверка целых буквенных слов:

import re

with open('keywords.txt', encoding='utf-8') as source:
    keywords = {line.strip().casefold() for line in source if line.strip()}

with open('texts.txt', encoding='utf-8') as source, \
     open('matched.txt', 'x', encoding='utf-8') as target:
    for line in source:
        words = re.findall(r'[^\W\d_]+', line.casefold())
        if any(word in keywords for word in words):
            target.write(line)

Память не зависит от общего числа строк текста. Исходная строка записывается не более одного раза. Если ключ должен находиться внутри другого слова, правила другие: наивная тысяча in на каждую строку дорогая; предварительный многопаттерновый автомат уменьшит повторные проходы.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее