Russian (Русский) - Change language

Язык запросов скриптов извлечения

Поисковый запрос указывает, какие слова должны содержаться в документе и в каких комбинациях. Язык запросов основан на XML.

Простой поисковый запрос может выглядеть так:

  • <Request> — корневой элемент запроса.
  • <Query> — элементарный запрос. Содержит дерево запросов, в котором излагаются требования к искомой комбинации слов. Элементарный запрос может входить в комбинацию форм запроса более высокого уровня. Обязательный элемент.
  • <Contain> — указывает, какие слова или комбинации слов должен содержать документ. Может быть только один элемент <Contain>. Обязательный элемент.
    Внутри данного тега могут содержаться следующие элементы в произвольной последовательности и количестве:
    • <Required> — указывает форму слова или подзапрос, который обязательно должен присутствовать в комбинации. Необязательный элемент.
    • <Optional> — указывает форму слова или подзапрос, который может присутствовать в комбинации. Необязательный элемент.
    • <Except> — указывает форму слова или подзапрос, который должен отсутствовать в комбинации. Необязательный элемент.

Каждый из этих тегов содержит один тег:

  • <Query> — указывает, что цепочка форм слова включается в комбинацию или исключается из нее.
  • <Form> — указывает, что форма слова включается в комбинацию или исключается из нее.
    Замечание. Тег <Contain> обязательно должен содержать хотя бы один из тегов <Required> или <Optional>.  

Атрибуты тега <Contain>

На комбинацию форм слова может быть наложен ряд дополнительных условий, которые выражаются в виде атрибутов тега <Contain>.

Минимальное количество элементов в комбинации - MinCount

Параметр передается с помощью атрибута MinCount. Показывает, что комбинация не может содержать меньшее количество элементов. Каждый элемент — это либо форма, либо цепочка форм, возвращаемая подзапросом. По умолчанию параметр равен единице. Значение этого параметра не может превышать суммарного количества тегов <Required> и <Optional> в данной комбинации.

Параметр полезен, когда комбинация содержит один или несколько элементов <Optional>.

Пример запроса вида «первый параметр или второй параметр»:

В данном примере MinCount по умолчанию равен единице.

В качестве другого примера рассмотрим запрос, который требует наличия трех слов из четырех указанных, причем два слова в комбинации фиксированы:

Пример:

По такому запросу найдутся фразы “четыре черненьких чертенка”, “четыре чумазеньких чертенка” и “четыре черненьких чумазеньких чертенка”.

Учет порядка элементов - KeepOrder

Параметр передается с помощью атрибута типа bool - KeepOrder. По умолчанию его значение равно false.

Пример запроса:

Комбинация “первый третий второй третий” не будет удовлетворять запросу, хотя в нем и можно было бы найти цепочку слов с нужным порядком.

Учет порядка касается и элементов <Except> – они не должны стоять в цепочке между теми словами, между которыми стоят в запросе, но могут стоять на других позициях, не входя ни в одну из цепочек.

Например, если изменить предыдущий запрос, сделав форму “второй” не <Required>, а <Except>, то документ “первый третий второй” удовлетворял бы запросу (при этом слово «второй» в результат бы не вошло). В случае запроса без учета порядка этот документ не вошел бы в результат поиска, т. к. требовалось бы отсутствие формы “второй” во всем документе.

Учет расстояния - MinDistance, MaxDistance

Для учета расстояния служат атрибуты MinDistance и MaxDistance, ограничивающие минимальное и максимальное расстояние между элементами запроса. Они не имеют значений по умолчанию. Если какой-то из атрибутов не указан, то нет ограничений на соответствующее расстояние.

Расстояние - разница координат двух слов. Таким образом, расстояние между соседними словами равно единице. Минимальное значение для параметров MinDistance и MaxDistance равно единице. Параметр MaxDistance должен быть не меньше, чем MinDistance.

Дистанция между цепочками слов понимается следующим образом. Если диапазоны координат цепочек не перекрываются, то расстояние — это разница между левой координатой правой цепочки и правой координатой левой цепочки. Если диапазоны координат цепочек перекрываются, то расстояние считается равным нулю.

Например, во фразе “The quick brown fox jumped over the lazy dog.” расстояние между цепочками “quick fox” и “lazy dog” равно 4. Расстояние между цепочками “quick fox” и “brown lazy dog” равно нулю.

Для тегов <Except> расстояние учитывается следующим образом:

  • при значении KeepOrder="true" - элемент не должен находиться на указанном расстоянии от соседних с ним элементов цепочки (тех, между которыми он стоит). При этом расстояние между соседями элемента <Except> должно быть в пределах указанного диапазона.
  • при значении KeepOrder="false" - элемент не должен находиться на указанном расстоянии от любых элементов цепочки.

Пример запроса:

По этому запросу могут быть найдены фразы “спектр инфракрасного излучения”, “видимый спектр излучения”, “спектр жесткого ультрафиолетового излучения”.

Не будут найдены фразы “спектр жесткого рентгеновского излучения”, так как расстояние между словами “спектр” и “излучение” равно 3; “спектр видимого или ультрафиолетового излучения”, так как соседи слова «видимый» должны быть в указанном диапазоне, а в этой фразе он равен 3, а расстояние от «видимый» до «ультрафиолетовый» равно 2, что нарушает условия.

Запрос формы слова - <Form>

Запрос на одно слово передается с помощью тега <Form>. Внутри данного тега могут содержаться следующие элементы:

  • <Attributes>, опциональный. Содержит запрос к атрибутам формы слова.
  • <Text>, опциональный. Содержит текст формы слова в формате Unicode.
    Если текст формы слова не задан, это означает, что подходит любое слово, удовлетворяющее запросу атрибутов. В этом случае обязательно должен быть указан запрос на атрибуты.
  • Дополнительные условия поиска формы слова задаются с помощью атрибутов тега <Form>.

Тип поиска формы - SearchType

Задается с помощью атрибута SearchType тега <Form>. Атрибут может принимать следующие значения:

  • AllFormsSearch – поиск всех форм слова.
  • ExactSearch – поиск только указанной формы слова.
  • PrefixSearch – поиск всех форм, для которых указанная форма является префиксом.
  • FuzzySearch – нечеткий поиск указанной формы.
  • FuzzyPrefixSearch – нечеткий поиск всех форм, для которых указанная форма является префиксом.
    Замечание. Нечеткий поиск – это поиск всех слов в тексте, совпадающих с искомым словом с учетом заданных возможных различий.
    Например, при запросе «Машина» с допущением двух возможных ошибок в слове найдутся слова «Машинка», «Махина», «Малина», «Калина» и так далее.

Параметр SearchType является необязательным со значением по умолчанию AllFormsSearch.

Учет капитализации - CaseSensitive

Учет капитализации задается с помощью атрибута CaseSensitive тега <Form>. Атрибут является необязательным со значением по умолчанию false.

Пример запроса, показывающий использование атрибутов тега <Form>:

Данный запрос ищет аббревиатуру “ОПЕК” строго в указанной форме и с учетом капитализации, что позволяет избежать большого количества ненужных результатов в виде форм слов “опека” и “опекать”.

Запрос на атрибуты формы слова - <Attributes>

Запрос на атрибуты – это логическое выражение с использованием операций И, ИЛИ, НЕ. Операция НЕ является унарной, операции И и ИЛИ являются n-арными. Операндами данного логического выражения являются значения типа bool. Логическое выражение записывается в виде дерева. Результатами запроса являются те формы слова в документе, для которых это логическое выражение выполняется.

Запрос на атрибуты формы слова передается с помощью тега <Attributes>. Он может содержать один из следующих элементов:

  • <Attribute> — содержит текст требуемого атрибута слова. Лист дерева, описывающего логическое выражение.
  • <Or> ­— оператор ИЛИ. Узел дерева.
  • <And> — оператор И. Узел дерева.
  • <Not> — оператор НЕ. Узел дерева.

Тег <Not> устроен так же, как тег <Attributes>, и может содержать только один элемент из вышеперечисленных.

Теги <Or> и <And> должны содержать не менее двух элементов из вышеперечисленных.  

Тег <Attribute> имеет необязательный параметр SearchType, определяющий тип поиска атрибута. Параметр может принимать такие значения:

  • ExactSearch — атрибут ищется в точности так, как записан.
  • PrefixSearch — ищутся все атрибуты, для которых указанный текст является префиксом.

Атрибуты всегда ищутся с учетом капитализации. По умолчанию используется значение ExactSearch.

Предположим, что предварительно в тексте были выделены:

  • NER-объекты — вызовом функции ExtractNerObjects,
  • словоформы из слов пользовательского словаря с именем dictionary – вызовом функции ExtractWordsFromUserDictionary,
  • все объекты, удовлетворяющие переданному в качестве параметра регулярному выражению - вызовом функции ExtractRegularExpression.

Название результирующей коллекции этих объектов - regExp.

Замечание. Название коллекции можно использовать в xml-запросах к индексированному документу. Также по названию можно получить доступ к самой результирующей коллекции.

Тогда запрос на атрибуты формы может иметь следующий вид:

Этот запрос ищет фразу из двух слов, первое из которых подходит под регулярное выражение, а второе является названием организации, которое не входит с список запрещенных.

Цифра после имени атрибута нужна для того, чтобы выделить конкретное слово из найденного многословного объекта, проиндексированного этим атрибутом. Например, регулярное выражение с именем date находит дату в формате May 31, 2019. Тогда date 1 соответствует слову May, date 2 – числу 31, а date 3 – 2019.

Запрос множества форм слова - <FormSet>

Запрос множества форм слова передается с помощью тега <FormSet>.

Данный запрос объединяет логической операцией ИЛИ несколько запросов форм. Он эквивалентен запросу <Query>, все подзапросы которого - опциональные запросы формы слова.

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

Тег <FormSet> содержит следующие элементы:

  • <Attributes> - опциональный. Содержит запрос по атрибутам форм. Этот запрос объединяется по И с запросами атрибутов форм.
  • <Form> - обязательный. Запрос формы слова. Должен быть как минимум один такой элемент.

Пример xml-запроса для извлечения адреса

В результате выполнения xml-запроса будет найдена строка, которая содержит первое слово страны, первое слово улицы, первое слово города, первое слово штата, первое слово индекса в указанном порядке, отстоящие друг от друга не более, чем на 5 слов.

Составляющие одну компоненту слова, идущие подряд, нумеруются в индексе, начиная с 1. Например, слова, составляющие название улицы.

var xmlQuery = "<Request> \
<Query> \
     <Contain MaxDistance=\"5\" KeepOrder=\"true\"> \
          <Optional> \
               <Form><Attributes><Attribute>NerCountry1</Attribute></Attributes></Form> \
          </Optional> \
          <Optional> \
               <Form><Attributes><Attribute>NerStreet1</Attribute></Attributes></Form> \
          </Optional> \
          <Optional> \
               <Form><Attributes><Attribute>NerCity1</Attribute></Attributes></Form> \
          </Optional> \
          <Optional> \
               <Form><Attributes><Attribute>NerState1</Attribute></Attributes></Form> \
          </Optional> \
          <Required> \
               <Form><Attributes><Attribute>NerZipCode1</Attribute></Attributes></Form> \
          </Required> \
     </Contain> \
</Query> \
</Request>";
        

Результат такого запроса записывается в повторяемое поле xmlQueryResult:
this.RunQueryAndSaveToField( xmlQuery, "query", "xmlQueryResult" );

14.01.2021 14:17:24


Please leave your feedback about this article