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

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

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

near() принимает в качестве аргументов слова и фразы в любой форме, а также другие функции поиска слов или последовательностей.

Синтаксис

near([расстояние,] аргумент_1, аргумент_2,..)

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

Опциональные параметры функции

Следующие параметры регулируют расстояние между элементами последовательности:

Параметр

Пояснение

distance

Определяет точную разницу в позициях между первым и последним токеном последовательности.

min_distance

Определяет минимальную разницу в позициях между первым и последним токеном последовательности.

max_distance

Определяет максимальную разницу в позициях между первым и последним токеном последовательности. Равнозначен опциональному параметру расстояние.

range

Определяет точную длину последовательности в токенах.

min_range

Определяет минимальную длину последовательности в токенах.

max_range

Определяет максимальную длину последовательности в токенах.

gap

Определяет точное количество токенов между аргументами последовательности.

min_gap

Определяет минимальное количество токенов между аргументами последовательности.

max_gap

Определяет максимальное количество токенов между аргументами последовательности.

interval

Определяет точную разницу в позициях между соседними аргументами последовательности.

min_interval

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

max_interval

Определяет максимальную разницу в позициях между соседними аргументами последовательности.

Параметры allow_punct и allow_space регулируют, соответственно, допустимость знаков препинания и пробелов внутри последовательности. Параметры принимают следующие значения:

Значение

Пояснение

yes (значение по умолчанию)

Пробелы/Знаки пунктуации между аргументами последовательности допускаются.

no

Пробелы/Знаки пунктуации между аргументами последовательности не допускаются.

Примечание

Специальные символы, такие как знак решетки (#), амперсанд (&) или коммерческое at (@), не относятся к знакам препинания и учитываются при расчете расстояния.

Примеры

near(документ, number()) найдет «документ: 110», но не найдет «документ # 110».

near(2, документ, number()) найдет «документ: 110» и «документ # 110».

Параметр match регулирует объем текста, извлекаемого функцией. Параметр принимает следующие значения:

Значение

Пояснение

arguments (значение по умолчанию)

Будут извлечены только аргументы, перечисленные в функции.

range

Будет извлечен фрагмент текста от первого до последнего найденного аргумента.

Пример

near(компания, директор) = near(1, компания, директор) найдет «главный креативный директор компании» и «является в компании директором по производственным вопросам».

near(3, компания, производство) = near(компания, производство, max_range:=4) = near(компания, производство, max_gap:=2) найдет «компания, специализирующаяся на производстве мясной продукции», «На сколько уменьшены объемы производства, компания не разглашает» и «Об этом ТАСС сообщили в штаб-квартире компании. Перспективы возобновления производства пока не определены».

near(компания, прибыль, убыток, max_interval:=7, match:=range) найдет «По итогам 2014 года компания получила чистый убыток в размере 17,1 млрд рублей против прибыли 7,3 млрд рублей годом ранее».

Примечания

  1. Для поиска последовательности аргументов в произвольном порядке в пределах одного предложения используется функция snear(), аналогичная sentence(near()).

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

Функции поддерживают те же именованные параметры, что и функция near().

Примеры

snear(3, компания, производство) найдет «компания, специализирующаяся на производстве мясной продукции» и «На сколько уменьшены объемы производства, компания не разглашает», но не «Об этом ТАСС сообщили в штаб-квартире компании. Перспективы возобновления производства пока не определены».

fnear(компания, проект, max_gap:=2) найдет «компания разработала проект колонизации Марса», но не «проект будет запущен компанией».

Поиск аргументов в произвольном порядке в пределах предложения

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

sentence() принимает в качестве аргументов слова и фразы в любой форме, а также другие функции поиска слов или последовательностей.

Синтаксис

sentence([расстояние, ] [аргумент_1,] [аргумент_2,..])

У функции sentence() нет обязательных аргументов — при их отсутствии найдутся все предложения. Опциональный параметр расстояние определяет максимальное количество предложений, в пределах которых ищутся аргументы. При его отсутствии функция ищет аргументы в пределах одного предложения.

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

  • match, который позволяет регулировать объем текста, извлекаемого функцией;

  • whole:=yes, который позволяет извлекать предложения, состоящие только из аргументов, указанных в запросе.

Значение

Пояснение

match:=arguments (значение по умолчанию)

Будут извлечены только аргументы, перечисленные в функции.

match:=range

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

whole:=yes

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

Примеры

sentence(компания, проект) найдет «Глава компании подчеркнул, что за два года существования проекта работа проделана существенная» и «"Все, проект закрыт", - сказал глава компании журналистам».

sentence("7", января) найдет «С 03:00 (мск) 7 января аэропорт принимает и отправляет воздушные суда» и «7 января».

sentence("7", января, whole:=yes) найдет «7 января».

Примечания

  1. Для поиска аргументов в заданном порядке в пределах одного предложения используется функция sfollow(), аналогичная функции sentence(follow()) или follow(1,).

  2. Для поиска последовательности аргументов на заданном расстоянии в пределах одного предложения используется функция snear(), аналогичная sentence(near()).

Поиск аргументов в произвольном порядке в пределах нескольких строк

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

Синтаксис

line([число_строк,] [аргумент_1] [, аргумент2])

У функции нет обязательных аргументов — при их отсутствии найдутся все строки.

line() принимает в качестве аргументов слова и фразы в любой форме, а также другие функции поиска слов или последовательностей.

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

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

Значение

Пояснение

match:=arguments (значение по умолчанию)

Будут извлечены только аргументы, перечисленные в функции.

match:=range

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

whole:=yes

Будут полностью извлечены строки, которые содержат аргументы запроса.

min_length

Задает минимальную длину строки в токенах.

max_length

Задает максимальную длину строки в токенах.

Примечание

При работе функции line пустые строки игнорируются.

Пример

line(3, математика, победитель) найдет все упоминания слов «математика» и «победитель» в пределах трех непустых строк текста.

pdl near sentence 1 rus
pdl near sentence 2 rus

Пример задачи: Найти имена и даты жизни лауреатов Нобелевской премии по физике в статьях Википедии

Для того, чтобы решить эту задачу, можно составить запрос line(follow(entity(people), entity(dates), form(лауреат нобелевской премии по физике))). Он находит имя человека, за которым следуют дата и словосочетание «лауреат Нобелевской премии по физике» в пределах 1 предложения и 1 строки.

Подробнее о функции entity() можно узнать в разделе "Поиск объектов, извлеченных другими узлами текстового анализа".

pdl near sentence 3 rus
Поиск аргументов в произвольном порядке в пределах нескольких абзацев

Для поиска последовательности аргументов в произвольном порядке в пределах указанного числа абзацев, используется функция paragraph().

Синтаксис

paragraph([число_абзацев, ] [аргумент_1] [, аргумент2])

У функции нет обязательных аргументов — при их отсутствии найдутся все абзацы.

paragraph() принимает в качестве аргументов слова и фразы в любой форме, а также другие функции поиска слов или последовательностей.

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

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

  • match, который позволяет регулировать объем текста, извлекаемого функцией;

  • whole:=yes, который позволяет извлечь абзацы, состоящие только из аргументов, указанных в запросе.

Значение

Пояснение

arguments (значение по умолчанию)

Будут извлечены только аргументы, перечисленные в функции.

range

Будут извлечены абзацы, содержащие найденные аргументы, целиком.

whole:=yes

Будут извлечены абзацы, состоящие только из аргументов, указанных в запросе.

Примечание

Разбиение текста на абзацы можно увидеть в узлах Индекс или Разметка текста.

Пример

pdl near sentence 4 rus
pdl near sentence 4.1 rus

Пример задачи: Поиск контактной информации

Для того, чтобы решить эту задачу, можно составить запрос paragraph(2, entity(Post Addresses), entity(Phone Numbers)). Подробнее о функции entity() можно узнать в разделе "Поиск объектов, извлеченных другими узлами текстового анализа".

Этот запрос найдет последовательность из предварительно найденных адреса и телефона. Область поиска состоит из двух абзацев, поскольку адрес и телефон могут быть разделены пустой строкой.

pdl near sentence 5 rus

Поиск внутри датасета

Функция document() используется для поиска документов внутри датасета.

Синтаксис

document([минимальный_номер,] [максимальный_номер,] [аргумент_1,] [аргумент_2,…​])

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

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

Параметр

Пояснение

match:=range

Документы, содержащие найденные аргументы, будут извлечены целиком.

match:=arguments

Будут извлечены только аргументы, перечисленные в функции.

whole:=yes

Будут извлечены документы, состоящие только из аргументов, указанных в запросе.

allow_punct:=yes/no

Знаки пунктуации между аргументами последовательности допускаются или запрещаются (по умолчанию allow_punct:=yes).

allow_space:=yes/no

Пробелы между аргументами последовательности допускаются или запрещаются (по умолчанию allow_space:=yes).

min_doc:=<numeral>

Задает минимальный номер документа в датасете.

max_doc:=<numeral>

Задает максимальный номер документа в датасете.

mode:=forward/backward

Указывает позицию от начала/конца датасета.

Примечание

Если первый и/или второй аргумент функции является числом, то он будет трактоваться как минимальный_номер и максимальный_номер соответственно.

Если указаны как первые числовые аргументы минимальный_номер и максимальный_номер, так и именованные параметры min_doc и max_doc, то приоритет будет отдаваться последним.

Пример

document(1, 2) найдет первые два документа в датасете.

document(1, 2, mode:=backward) найдет последние два документа в датасете.

Функция document() может использоваться совместно с функциями типа case(), length(), lemma().

Пример

case(upper, document()) найдет все документы, написанные в верхнем регистре.

case(upper, document(abc)) найдет те документы, где есть ABC в верхнем регистре.

length(2, document(), count:=word) найдет все документы, содержащие от двух слов.

lemma(noun, document()) найдет документы, состоящие только из существительных.

Пример задачи: Найти упоминание авиасообщений в 50 последних предложениях датасета

Для того, чтобы решить эту задачу, можно составить запрос document(1, 50, авиасообщение, mode:=backward)

pdl near sentence 6 rus