Возможно, вы захотите изучить алгоритм Aho-Corasick . Если у вас есть набор строк, которые вы хотите найти, вы можете потратить линейное время на предварительную обработку этих строк и с этого момента в течение O (n) времени проверить все возможные совпадения этих строк в текстовом корпусе. длиной n. Другими словами, с небольшим временем предварительной обработки, чтобы настроить алгоритм один раз, вы можете чрезвычайно эффективно сканировать многочисленные входные данные снова и снова в поисках этих ключевых слов.
Интересно, что алгоритм был специально придуман для создания быстрого индекса (то есть для поиска множества различных ключевых слов в огромном объеме текста) и, как утверждается, превосходил другие методы в десять раз. Я думаю, что это будет отлично работать в вашем приложении.
Надеюсь, это поможет!