ПРИЛОЖЕНИЕ
  1. Примеры простых XPDL-правил

  2. Примеры иерархически организованных XPDL-правил

Пример 1

Правило извлекает значение атмосферного давления в миллиметрах ртутного столба. Правило находит слова и словосочетания «атмосферное давление» или «АД», после которых на расстоянии 20 идет фраза, которая ищет последовательность элементов число, «мм», «рт.», «ст.» на расстоянии «0».

В результат, в колонку «Атмосферное давление», выводится именованная группа «m» и атрибуты «Значение» (именованная группа «value») и «Единица измерения». Последний атрибут имеет постоянное значение «Миллиметр ртутного столба».

XPDL правило

xpdl appendix ap rule rus
Фрагмент правила
 rule: atmospheric_pressure
 {
 query: {phrase(20,
 "атмосферное давление"
 or
 case(upper, ад),
 phrase(0, {char(numeral)}:value,
 "мм", "рт.", "ст."))}:m

 result: Атмосферное давление = $m
 attribute: Значение = $value
 attribute: Единица измерения = "Миллиметр ртутного столба"
 }

Текст

Атмосферное давление в столице к 6:00 четверга опустилось до 735,5 мм рт. ст., сообщает Гидрометцентр России. По прогнозу метеослужбы, атмосферное давление в городе продолжит падение и может достичь 732 мм рт. ст. Идеальным АД принято считать 750-765 мм рт. ст.

Результат

xpdl appendix ap result rus

Пример 2

Правило извлекает международный стандартный серийный номер (ISSN), позволяющий идентифицировать периодические издания. Правило ищет слово «ISSN», после которого идут четыре цифры, дефис, четыре цифры или три цифры и «x».

Номер ISSN образует именную группу «issn» и отображается в колонке «Номер», а атрибуту «Тип» присваивается постоянное значение «ISSN».

xpdl appendix issn rule rus
Фрагмент правила
 rule: ISSN
 {
 query: sfollow(case("ISSN"), not char(rb),
 {phrase(0, length(4,4, char(digit)),
 char("-"),
 length(4,4, char(digit)) or phrase(0, length(3,3, char(digit)), "x"))}:issn)

 result: Номер = $issn
 attribute: Tип = "ISSN"
 }

Текст

Вестник Академии экономической безопасности МВД России / учредитель Акад. экон. безопасности М-ва внутренних дел Рос. Федерации. – Москва, 2007 – . – ISSN 1997-1001. 2016, № 1-2. – 230 с.

Результат

xpdl appendix issn result rus

Пример 3

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

В результат в колонку «Match» выводится именованная группа «m» и атрибут «Река» (именованная группа «river»).

XPDL правило

xpdl appendix river rule rus
Фрагмент правила
 rule: rivers
 {
 /* Поиск названий рек после ключевых слов */
 query: {phrase(orn(берег, верховье, исток, низовье, приток, устье),
 {repeat(1,2, char(alpha, case(title, unknownword(Morphology))))}:river)}:m

 result: Match = $m
 attribute: Peкa = normalize($river)
 }

Текст

Председатель регионального отделения Союза архитекторов России Александр Зорин, предложил намыть набережную ниже «Дворца пионеров», углубить дно у устья Подборенки.

На берегах Хлыновки планируется в будущем создать ленточный парк от 2-го Опытного переулка до впадения реки в Вятку.

В низовье Москвы-реки за пределами столицы вода стала постепенно уходить.

Результат

xpdl appendix river result rus

Пример 4

Правило извлекает положительные и отрицательные отзывы об обслуживании клиентов. Верхнее правило «service_quality» ищет слова «обслуживание» или «обслуживание клиентов». Таким образом, из дальнейшего поиска исключаются тексты, в которых таких слов и словосочетаний не встречается. У этого правила есть два дочерних правила: «positive» и «negative». Правило «positive» находит последовательность, состоящую из позитивного прилагательного (например, «хороший») и того, что нашло родительское правило («обслуживание», «обслуживание клиентов»). В результат идет именованная группа «m» и ее атрибуты «Evaluation» (оценочное прилагательное) и «Object» (объект оценки).

Правило «negative» находит последовательность, состоящую из негативного прилагательного (например, «ужасный») и того, что нашло родительское правило («обслуживание», «обслуживание клиентов»). Как и в сестринском правиле, в результат идет именованная группа «m» и ее атрибуты «Evaluation» (оценочное прилагательное) и «Object» (объект оценки).

XPDL правило

xpdl appendix service rule rus
Фрагмент правила
 rule: service_quality
 // Поиск ключевых слов
 {
 query: {phrase(0, обслуживание, optional (клиент))}:object

 rule: positive
 // Поиск ключевых слов в позитивном контексте
 {
 query: // Хорошее обслуживание клиентов
 {phrase(0, {possible(хороший, отличный, прекрасный )}:evaluation, $object)}:m

 result: Match = $m
 attribute: Evaluation = $evaluation
 attribute: Object = $object
 }

 rule: negative
 // Поиск ключевых слов в негативном контексте
 {
 query: // Ужасное обслуживание
 (phrase_0, {possible(отвратительный, плохой, ужасный)}:evaluation, $object)}:m

 result: Match = $m
 attribute: Evaluation = $evaluation
 attribute: Object = $object
 }
}

Текст

Отличное обслуживание клиентов, вежливый персонал.

Прекрасное обслуживание, все быстро, а главное, аккуратно!

Ужасное обслуживание в данном заведении…​

Отвратительное обслуживание и издевательство над пациентами.

Результат

xpdl appendix service result rus

Пример 5

Правило извлекает факты о банкротстве компаний. Поисковый запрос верхнего правила «bankruptcy_context» ищет ключевые слова и фразы, определяющие контекст банкротства. Это могут быть существительные (входят в именованную группу «noun») или глаголы (входят в именованную группу «verb»). Правило работает как фильтр, исключая тексты, которые не имеют отношения к банкротству. Это увеличивает скорость выполнения правил. У верхнего правила есть два дочерних правила: «noun» и «verb».

Правило «noun» ищет компании и организации, которые встречаются в именных контекстах, найденных верхним правилом. У этого правила есть исключающее дочернее правило «negative_context», которое отбрасывает контексты с будущим временем и такими конструкциями, как «собираться + инфинитив», «ждать», «ожидать». То есть те случаи, когда факт банкротства возможен в будущем, но еще не подтвержден. Извлеченный поисковым запросом результат выводится в колонку «Match», а название обанкротившейся компании или организации в качестве атрибута «Company». Как видно на изображении ниже, контексты, исключенные с помощью этого правила, не выводятся в результат.

Правило «verb» ищет компании и организации, которые встречаются в глагольных контекстах, найденных верхним правилом. Извлеченный поисковым запросом результат выводится в колонку «Match», а название обанкротившейся компании или организации в качестве атрибута «Company».

Обратите внимание, что для правильной работы этого правила необходимо наличие выполненного узла «Извлечение сущностей».

XPDL правило

xpdl appendix bankruptcy rule rus
Фрагмент правила
 rule: bankruptcy_context
 // Поиск текстов, содержащих ключевые слова и фразы
 {
 query: {банкротство or банкрот or "иск о банкротстве"}:noun
 or
 {банкротиться or обанкротиться}:verb

 rule: noun
 // Поиск обанкротившихся компаний и организаций в контексте с ключевыми существительными
 {
 query: // Строительство остановили в 2014 году из-за банкротства строительной компании «Консоль».
 {phrase(0, $noun, {entity(Companies|Organizations) }:bankrupt)
 or
 // Авиакомпанию «Томск Авиа» признали банкротом в марте 2016 года.
 phrase(0, {entity(Companies|Organizations)}:bankrupt, optional (быть), объявить or признать, $noun)}:m

 rule_except: negative_context
 /* Нужно исключить компании, которые ещё не обанкротились. Такие контексты вводятся глаголами "ждать", "ожидать"
 будущим временем ("подадут иск"), а также конструкцией "собираться" + инфинитив */
 {
 query: phrase(7, ждать or ожидать or lemma(future, подать) or "собирается подать", $m)

 result: Match = $m
 attribute: Company = toentity(Companies|Organizations, $bankrupt, field:=Name)
 }
}

 rule: verb
 // Поиск обанкротившихся компаний и организаций в контексте с ключевыми глаголами
 {
 query: // Cambridge Analytica обанкротится из-за скандала с данными Facebook.
 {phrase(0, {entity(Companies|Organizations)}:bankrupt, $verb)
 or
 // Обанкротилась компания Tesla.
 phrase(0, $verb, {entity(Companies|Organizations) }:bankrupt)}:m

 result: Match = $m
 attribute: Company = toentity(Companies|Organizations, $bankrupt, field:=Name)
 }
}

Текст

Cambridge Analytica обанкротится из-за скандала с данными Facebook.

Напомним, авиакомпанию «Томск Авиа» признали банкротом в марте 2016 года.

Его строительство остановили в 2014 году из-за банкротства строительной компании «Консоль».

Результат

xpdl appendix bankruptcy result rus

Пример 6

Правило извлекает факт владения компанией или организацией физическим лицом. Поисковый запрос правила «filter_texts» находит тексты, где встречаются участники этого факта: такие сущности, как Люди, Компании и Организации.

У этого правила есть дочернее правило «key_words», которое находит слова и фразы, указывающие на владельца компаний или организаций в текстах, найденных верхним правилом («filter_texts»). Для краткости записи правило вызывает макрос «owner», где перечислены некоторые из этих слов. У правила есть дочернее фильтрующее правило «singular».

Фильтрующее правило «singular» оставляет только те тексты, найденные верхним правилом, где есть существительные и глаголы в единственном числе. У правила есть дочернее правило «owner_of».

Правило «owner_of» описывает варианты шаблонных фраз. Например, за именем человека (именованная группа «person») следуют опциональные аргументы (например, глаголы «быть», «стать», «назвать», «объявить», «владеть», «принадлежать»), слово «владелец» или его синонимы (именованная группа «owner_np»), а затем имя компании (именованная группа «company»). Или же название компании, слово «владеть» или «владелец» и их синонимы, имя человека (например, «Фирма "Вуолы-Эко" принадлежит Олегу Лебедю»). Наконец, слово «владеть» или «владелец» и их синонимы, название компании, имя человека («Основной владелец «Северстали» Алексей Мордашов»).

Правило выводит в качестве результата конкатенированные элементы «person», «owner_np» и «company» как «Match», имя владельца как «Владелец» и название компании как «Компания».

Обратите внимание, что для правильной работы этого правила необходимо предварительно выполнить узел «Извлечение сущностей».

XPDL правило

xpdl appendix owner rule rus
Фрагмент правила
rule: filter_texts
 // Поиск текстов, где встречаются ключевые компоненты: Люди, Компании и Организации
 {
 query: {entity(People, field:=Name)}:person
 or
 {entity(Companies|Organizations)}:company

 rule: key_words
 // Поиск ключевых слов и фраз в текстах с найденными выше ключевыми компонентами
 {
 query: {macro(owner)
 or orn(принадлежать, владеть, контролировать)}:owner_np
 and
 ($person or $company)

 rule_filter: singular
 /* Ограничение поиска только внутри тех текстов, где ключевые слова,
 обозначающие владельца, употреблены в единственном числе */
 {
 query: $owner_np & lemma(singular)

 rule: owner_of
 /* Поиск паттернов:
 — Александр Ильин, совладелец компании "Томский региональный платежный сервис".
 — Александр Филлипов был владельцем компании «Автореал».
 — Фирма "Вуолы-Эко" принадлежит Олегу Лебедю.
 Андрей Озеров владеет 000 "НФК" .
 — Основной владелец «Северстали» Алексей Мордашов.

 {
 query: phrase({$person}:owner,
 optional(orn(быть, стать)),
 optional(orn(назвать, объявить)),
 {$owner_np}:owner,
 {$company}:owner)
 or
 phrase({$company}:owner,
 {$owner_np}:owner,
 {$person}:owner)
 or
 phrase({$owner_np}:owner,
 {$company}:owner,
 {$person}:owner)

 result: Match = concat($owner_person, " ", $owner:owner np, " ", $owner:company)
 attribute: Владелец = toentity(People, $owner:person, field:=Name)
 attribute: Компания = toentity(Companies_Organizations, $owner:company, field:=Name)
 }
 }
 }
}

Текст

Александр Ильин, совладелец компании "Томский региональный платежный сервис".

Александр Филиппов был владельцем компании «Автореал».

Фирма "Вуолы-Эко" принадлежит Олегу Лебедю.

Основной владелец «Северстали» Алексей Мордашов.

Андрей Озеров владеет ООО "НФК".

Результат

xpdl appendix owner result rus