Общие сведения о языке PDL
PDL (pattern definition language) – язык для поиска лингвистических конструкций в неструктурированных текстах. Он предназначен для нахождения в тексте фактов, событий, сущностей и прочих объектов, представляющих интерес для конкретной предметной области. Такими объектами могут быть, например, географические объекты и компании, марки автомобилей, виды поломок и дефектов, названия лекарств и химических соединений, научные публикации, стихийные бедствия и эпидемии, цены акций, курсы валют и т.д.
Большинство подобных объектов можно извлечь из текста, описав соответствующие им лингвистические конструкции.
Например, найти названия компаний можно с помощью запроса для поиска последовательности, состоящей из слов «ОАО» или «ЗАО», за которыми следуют одно или более слов с заглавной буквы в кавычках (ЗАО «Микросистема», ОАО «Аэропорты регионов» и т.д.). Чтобы найти упоминания министерств, можно составить запрос для поиска слова «министерство», за которым следуют существительные (и опционально прилагательные) в родительном падеже (Министерство финансов, Министерство иностранных дел и т.д.).
PDL представляет собой удобный механизм для описания языковых конструкций любой сложности.
В PDL существует множество способов описания элементов конструкции (например, в виде перечисления конкретных слов или частей речи, слов из определенных словарей и словарных списков, вложенных конструкций и т.д.) и их свойств (например, ограничения на регистр слова и морфологические характеристики). Также можно описывать свойства всей языковой конструкции (указывать обязательные и опциональные элементы, удаленность элементов друг от друга и порядок следования, наличие пунктуации, отрицаний, определенного контекста, ограничивать поиск определенными разделами документа или диапазоном и т.д.)
Структура языка PDL
PDL-запрос представляет собой комбинацию функций, операторов и строк.
Функции
Чаще всего функции вызываются явно: через имя или через условные операторы (кавычки, квадратные скобки). Однако для некоторых функций также возможен неявный вызов (например, запрос из одного слова сводится к неявному вызову функции stem()).
Имя функции всегда сопровождается скобками, в которых перечисляются аргументы и параметры (при их наличии).
Синтаксис
Пример
Параметры функций
Многие функции PDL поддерживают параметры, позволяющие изменить поведение функции по умолчанию. Обычно значение параметра передается в качестве первого опционального аргумента функции.
Пример
Также многие функции PDL поддерживают именованные параметры.
Синтаксис
Пример
Полный список именованных параметров, поддерживаемых определенной функцией, приведен в описании этой функции в разделе «Описание функций PDL».
Порядок перечисления именованных параметров, а также их позиция относительно аргументов функции значения не имеют. Однако для улучшения читаемости запроса рекомендуется указывать именованные параметры после аргументов функции.
Пример
Операторы
Операторы применяются либо к выражениям, между которыми они записаны (бинарные операторы), либо к выражению, перед которым они записаны (унарные операторы).
Синтаксис
Пример
В следующей таблице приведен полный список операторов PDL.
Оператор |
Имя |
Тип |
not |
НЕ |
унарный |
and |
И |
бинарный |
or |
ИЛИ |
бинарный |
xor |
исключающее ИЛИ |
бинарный |
& |
пересечение множеств |
бинарный |
/ |
вычитание множеств |
бинарный |
Подробнее об использовании операторов можно узнать в разделе «Операторы».
Функции и операторы могут быть вложены друг в друга таким образом, что результат одной функции (оператора) будет являться аргументом функции (оператора) более высокого уровня. Поэтому обычно PDL-запрос представляет собой комбинацию функций, операторов и строк.
Пример
Подробнее о составлении сложных запросов можно узнать в разделе «Пример и описание PDL-запроса»