Синтаксис XPDL
XPDL состоит из правил, которые описывают языковые паттерны и позволяют извлекать их элементы. Правила XPDL могут быть написаны в любом текстовом редакторе, но рекомендуется использовать редактор правил PolyAnalyst, в котором есть подсветка, проверка синтаксиса, навигация и другие дополнительные возможности. В этом разделе описывается структура XPDL-правила, объясняется значение его элементов и приводится несколько примеров.
Пример
Первый пример - это простое правило, с помощью которого можно извлечь названия улиц.
rule find streets { query:{phrase(case("улица" or [ул.]), case(title))}:str result: Match = $str }
Правило начинается с ключевого слова rule: , за которым следует название правила. Правило на Изображении 1 называется «find_streets». Названия правил должны состоять из буквенно-цифровых символов или символов подчеркивания (не допускаются специальные символы и знаки препинания, такие как % или @, точки, запятые, скобки и т.д.). Название правила может быть произвольным, однако рекомендуется использовать значимые, понятные названия для удобства поиска и навигации.
Правила могут быть последовательными, вложенными или сочетать эти виды (подробное описание иерархии правил см. в следующих разделах).
Тело правила заключено в фигурные скобки. Оно состоит из запроса и результата.
Раздел query является основным элементом правила и описывает паттерн, который нужно найти. Раздел начинается с ключевого слова query: , за ним следует поисковый запрос, написанный на языке PDL.
Примечания
-
Все функции PDL, кроме поиска по нескольким столбцам, поддерживаются в XPDL;
-
Этот документ не содержит описания языка PDL. Если Вы не знакомы с синтаксисом и функциями PDL, обратитесь к разделу «Введение в PDL».
Как показано на Изображении 1, запрос формирует именованную группу. Чтобы объявить именованную группу, запрос должен быть заключен в фигурные скобки, за которыми следует двоеточие и метка, заданная пользователем (имя). Именованная группа сохраняет найденный текст под названием, указанным в ее имени. К выражению, которому соответствует именованная группа, позже можно обратиться через обратную ссылку $метка. Именованные группы в XPDL похожи на захватывающие группы в регулярных выражениях.
Текст, сохраненный в именованной группе, может быть выведен как результат правила. В примере весь запрос хранится в именованной группе «str», поэтому все, что соответствует запросу, выводится в результат (например, «ул. Комсомольская», «улица Смольная»). Однако любой элемент запроса может быть сохранен как именованная группа. Для вывода только названий улиц (например, «Комсомольская», «Смольная») запрос должен выглядеть следующим образом:
Подробнее об иерархии правил см. раздел «Иерархическая организация правил».
Раздел «result» следует за разделом «query» и описывает вывод результата правила. Этот раздел определяет, какие части найденного паттерна должны быть включены в результат и под какими названиями. Раздел начинается с ключевого слова result: , за которым следуют пользовательское название результата, знак равенства и ссылка на именованную группу. Так, пример ниже выводит текст, соответствующий запросу под названием «Улица». Имя результата, указанное после result:, используется в отчете узла в качестве имени колонки, содержащей результаты.
Раздел «result» является необязательным и может отсутствовать, если правило находится вверху в иерархии правил. Результат может иметь опциональные атрибуты — его части или свойства. Атрибуты перечисляются после результата, для этого используется тот же синтаксис, но перед ними должно стоять ключевое слово attribute:. Названия результатов и атрибутов могут состоять из нескольких слов (например, «Название улицы», «Почтовый индекс»).
В XPDL поддерживаются как однострочные, так и многострочные комментарии. Чтобы написать однострочный комментарий, в начале строки нужно поставить двойной слеш //. Все символы в одной строке справа от // игнорируются. Если комментарий ограничен символами /* и */, он может быть как однострочным, так и многострочным.
XPDL-правило может также содержать опциональный раздел «достоверность»: она начинается с ключевого слова confidence:, за которым следует значение вероятности — число в диапазоне [0; 1]. Этот раздел должен быть расположен после раздела «запрос» и перед разделом «результат».
Если значение достоверности не указано, применяются настройки по умолчанию. Значение достоверности по умолчанию равно 1 для правил верхнего уровня, дочерние правила наследуют это значение от своего родительского правила. Значение достоверности не рассчитывается статистически, а отражает мнение разработчика правила о способности последнего извлекать релевантные результаты и указывает, будет ли это правило иметь приоритет над другими, если у них совпадают искомые паттерны.
Достоверность отображается в отчете узла и, таким образом, может быть использована для сортировки извлеченных вхождений или фильтрации вхождений со значением вероятности ниже или выше указанного порога.