Поиск аргумента на определенной позиции в документе

Для поиска аргумента на определенной позиции в документе используется функция position().

Синтаксис

position()

position([номер_позиции], аргумент_1, аргумент_2…​)

У функции position() нет обязательных аргументов. В их отсутствие нужно указать опциональные именованные параметры, например:

position(max_snt:=1) находит первое предложение каждого текста.

Опциональный параметр номер_позиции позволяет указать максимальную позицию (в токенах) аргумента. При отсутствии данного параметра функция ищет аргументы на первой позиции. При расчете позиции не учитываются знаки пунктуации.

Функция также поддерживает следующие опциональные именованные параметры:

Параметр

Пояснение

scope:=line/sentence/paragraph/text/table_cell/table_name/table_row_name/table_column_name/heading/page

указывает позицию в строке/предложении/параграфе/тексте/таблице/заголовке/странице

mode:=forward/backward

указывает позицию от начала/конца выбранного диапазона

min_pos

указывает минимальную позицию аргумента

max_pos

указывает максимальную позицию аргумента

min_snt

указывает минимальный номер предложения

max_snt

указывает максимальный номер предложения

Примечание

  • По умолчанию параметры принимают следующие значения: scope:=text, mode:=forward.

  • Параметр max_pos аналогичен первому опциональному аргументу номер_позиции.

  • Если для параметра min_snt указана минимальная позиция аргумента min_pos, то она будет отсчитываться от начала этого предложения. Аналогичное поведение будет для параметра max_snt с указанием максимальной позиции max_pos.

  • Если указана только позиция, без номера предложения, то она считается от начала параметра scope.

  • Если нужно считать позиции от конца предложений, то следует указывать отрицательные значения для параметров min_pos и max_pos.

Пример

position(1, встреча, scope:=sentence) находит слово «встреча», если оно является первым словом в предложении, например, «Встреча прошла в рамках третьего заседания комитета по сотрудничеству».

position(2, встреча, совещание) находит слова «встреча» или «совещание», если их позиция < = 2 от начала документа, например, «Провел совещание руководитель исполкома района Вячеслав Козлов», «Встреча и регистрация посетителей салона», «На встречу приехали руководители Туристической администрации города», «Совещание прошло в декабре».

position(1, встреча, scope:=sentence, mode:=backward) = position(встреча, scope:=sentence, mode:=backward, max_pos:=1) находит слово «встреча», если оно является последним словом в предложении, например, «Не надо преувеличивать значимость предстоящей встречи».

position(1, встреча, mode:=backward) = position(встреча, mode:=backward, max_pos:=1, scope:=text) находит слово «встреча», если оно является последним словом в документе.

position(2, встреча, scope:=sentence, mode:=backward) = position(встреча, scope:=sentence, mode:=backward, max_pos:=2) находит слово «встреча», если его позиция < = 2 от конца предложения, например, «…сообщается в материалах к встрече лидеров», «Не надо преувеличивать значимость предстоящей встречи».

position(встреча, min_pos:=2, max_pos:=4, scope:=sentence) находит слово «встреча», если его позиция находится в интервале [2;4] от начала предложения, например, «Итоги встречи окажут значимое влияние на динамику сырьевых товаров», «Российскую сторону на встрече представляет министр энергетики».

position(встреча, min_pos:=3, max_pos:=3, scope:=sentence, mode:=backward) находит слово «встреча», если оно находится на третьей позиции от конца предложения, например, «Об итогах этой закрытой для прессы встречи не сообщается».

position(таблетка or сироп, scope:=table_row_name) находит слова «таблетка» и/или «сироп», если они находятся на первой позиции в названии строки таблицы.

position(min_snt:=1, min_pos:=1, max_snt:=1, max_pos:=2, mode:=backward) находит первые два слова в последнем предложении.

position(min_snt:=1, min_pos:="-1") находит токены начиная с последнего слова первого предложения.

position(max_pos:=1, scope:=line) находит первое слово в каждой строке.

position(scope:=page, max_pos:=1) находит первое слово каждой страницы.

position(scope:=page, sentence(), max_snt:=1, mode:=backward) находит последнее предложение каждой страницы.

Пример задачи: Найти тексты, в начале которых упоминается Москва

Можно написать запрос position(min_pos:=1, max_pos:=4, Москва, scope:=text), который позволит найти статьи, где слово Москва стоит на 1, 2, 3 или 4 позиции в начале текста.

pdl position 1 rus

Однако такой запрос не найдет упоминание Москвы в конце документа. Для этого нужно изменить запрос, задав значение именованного параметра mode: position(min_pos:=1, max_pos:=4, Москва, scope:=text, mode:=backward).

pdl position 2 rus