Сохраните ваши слова в три .
Пройди свой текст. Каждый раз, когда вы начинаете слово, начинайте ходить по дереву. Если вы заканчиваете слово в конце слова в дереве, это слово вас заинтересует. В противном случае это не так.
У вас будут небольшие сложности с определением слова. В частности, несловарные символы обычно заканчиваются словом, но есть исключения, такие как don't
.
Обратите внимание, что некоторые механизмы регулярных выражений (Perl в любой недавней версии Perl для одного) достаточно умны, чтобы автоматически создавать три и пытаться сопоставить его. Следовательно, есть большая вероятность, что вы можете просто соединить свои слова вместе с конвейерами, добавить их в механизм регулярных выражений и получить хорошую производительность.
Если это не сработает, вы можете создать регулярное выражение, которое кодирует дерево. Например, учитывая список foo
, bar
, baz
, blat
, регулярное выражение /\b(foo|b(?:a(?:r|z)|lat))\b/
должно соответствовать этим словам и только этим словам. Вероятно, он не будет делать это так же эффективно, как свернутый вручную C (например, на движке Perl вы столкнетесь с проверками медленных сложных регулярных выражений, и он, скорее всего, сделает несколько глупых возвратов, которые ему не нужны) ) но это будет на много меньше работы, чтобы собрать вместе.