Типы правил

В дополнение к стандартным правилам язык XPDL имеет два специализированных типа правил: фильтрующее правило и исключающее правило. Они служат для сужения поиска, когда правило верхнего уровня слишком широкое и извлекает ненужные паттерны.

Рассмотрим задачу извлечения имен людей. Правило на Изображении 1 использует простой подход к этой задаче: извлекает слова из словаря имен людей, за которым следует слово с заглавной буквы (предположительно, фамилия человека).

xpdl spec rules 1.rus
Изображение 1. Правило для поиска имен людей

Правило отрабатывает на следующих текстах:

xpdl spec rules input rus

Примеры имен, которые находит это правило, приведены на Изображении 2:

xpdl spec rules namelist rus
Изображение 2. Примеры найденных имен

Среди результатов есть и некорректные вхождения (например, название компании, в котором фигурирует имя): «Евгений Герасимов и партнеры».

Чтобы исключить некорректные результаты, можно использовать вложенное правило, как показно на Изображении 3:

xpdl spec rules not.rus
Изображение 3. Расширенное правило

Вложенное правило «exceptions» извлекает фразы, хранящиеся в именованной группе «name», если за ними не следуют слова «и партнеры». Правило объявляет новую именованную группу «name1» для хранения результатов, которые соответствуют этому ограничению. Новая именованная группа необходима, поскольку стандартные правила не могут изменять содержимое ранее объявленных именованных групп.

xpdl spec rules output std rus
Изображение 4. Результат работы правила с Изображения 3

С помощью исключающего или фильтрующего правила можно решить эту задачу более компактным способом. В частности, нам не понадобится создавать именованную группу "name1".

Исключающее правило начинается с ключевого слова rule_except и описывает конструкции, которые нужно исключить из дальнейшей обработки. В нашем примере нужно убрать из группы «name» фразы, за которыми следуют слова «и партнеры». Тогда запрос будет выглядеть так, как показано на Изображении 5.

xpdl spec rules except decl rus
Изображение 5. Исключающее правило

После отработки исключающего правила из именованной группы "name" будут удалены фразы, за которыми следует «и партнеры».

На Изображении 6 показана пошаговая работа правила.

xpdl spec rules except rus
Изображение 6. Пошаговая работа исключающего правила

Теперь рассмотрим, как эта же задача может быть решена с использованием фильтрующего правила. Фильтрующее правило противоположно исключающему правилу: оно описывает конструкции, которые нужно сохранить для дальнейшей обработки. В нашем примере мы хотели бы сохранить в группе «name» только те фразы, за которыми НЕ следуют слова «и партнеры». Тогда запрос будет выглядеть так, как показано Изображении 7. Фильтрующее правило начинается с ключевого слова rule_filter:

xpdl spec rules filter decl rus
Изображение 7. Фильтрующее правило

После отработки фильтрующего правила из именованной группы "name" будут удалены фразы, за которыми следует «и партнеры».

На Изображении 8 показана пошаговая работа правила.

xpdl spec rules filter rus
Изображение 8. Пошаговая работа фильтрующего правила

Правила на Изображении 5 и на Изображении 7 приводят к одинаковому результату: в именованной группе "name" остаются только те фразы, за которыми не следует "и партнеры".

Фильтрующее и исключающее правила часто взаимозаменяемы. Если удобнее описать конструкции, которые следует сохранить для дальнейшей обработки, следует использовать фильтрующее правило. Если проще описать конструкции, которые следует исключить, следует использовать исключающее правило.

Стандартные и специализированные правила демонстрируют два разных подхода к извлечению паттернов. Первый подход заключается в извлечении основных элементов, а затем в постепенном расширении поиска для получения более полного вхождения («Бюро» → «Федеральное бюро» → «Федеральное бюро расследований»). Стандартные правила следуют этой логике.

Однако иногда требуется другой подход, поскольку может быть проще написать общее правило верхнего уровня, а затем постепенно отфильтровывать ненужные вхождения. В этом случае используются специальные правила, хотя фильтрация также может быть выполнена и с использованием стандартных правил, как было показано на примере на Изображении 3.

Выбор подхода зависит от задачи. Обычно иерархии правил включают в себя как стандартные, так и специализированные правила.