Поиск словосочетаний
Для поиска аргументов в произвольном порядке внутри словосочетания используется функция chunk(). Под словосочетанием подразумевается простейшая синтаксическая единица, например, глагольная или именная группа. Группа состоит из одного или более слов связанных по смыслу и грамматически. Обязательным элементом является главное слово (вершина), кроме того группа может содержать зависимые слова. Тип группы определяется частью речи ее вершины.
Синтаксис
У функции chunk() нет обязательных аргументов — при их отсутствии функция найдет все словосочетания.
Опциональный аргумент тип_словосочетания определяет тип словосочетания и может принимать следующие значения:
Тип |
Синоним |
Пояснение |
Пример |
NP |
Pnou |
именная группа |
резким похолоданием; состояние радиационной обстановки |
VP |
Pver |
глагольная группа |
можно будет считать; была передана; продолжают |
JP |
Padj |
группа прилагательного |
значительно сложнее; очень велик; потерянным |
PP |
Ppre |
предложная группа |
в связи с; в; несмотря на |
RP |
Padv |
наречная группа |
еще больше; теперь; уже сейчас |
В колонке «Синоним» приводится допустимое альтернативное написание типа.
Если указан только тип словосочетания без искомых аргументов, функция находит все словосочетания указанного типа. При наличии типа и аргументов, функция находит все словосочетания указанного типа, содержащие эти аргументы.
Опциональные именованные параметры функции
Параметры allow_punct и allow_space регулируют, соответственно, допустимость знаков препинания и пробелов внутри последовательности.
Параметр match регулирует объем текста, извлекаемого функцией.
Параметр level позволяет извлекать более крупные словосочетания, объединяющие несколько групп. Тип объединенного словосочетания также определяется его вершиной. Данный параметр удобен, когда необходимо извлечь достаточно крупный синтаксически связанный фрагмент текста, к примеру, описание проблемы или задачи.
Параметр whole:=yes позволяет извлекать словосочетания, состоящие только из аргументов поискового запроса.
Параметры принимают следующие значения:
Параметр |
Значение |
Пояснение |
allow_punct allow_space |
arguments (значение по умолчанию) |
Извлекаются только аргументы, перечисленные в функции. |
range |
Извлекается фрагмент текста от первого до последнего найденного аргумента. |
|
match |
yes (значение по умолчанию) |
Пробелы/Знаки пунктуации между аргументами последовательности допускаются. |
no |
Пробелы/Знаки пунктуации между аргументами последовательности не допускаются. |
|
level |
low (значение по умолчанию) |
Извлекаются простейшие словосочетания |
top |
Извлекаются объединенные словосочетания |
|
whole |
yes |
Извлекаются словосочетания, состоящие только из аргументов поискового запроса. |
Примечания
Для разбивки текста на словосочетания используется встроенный в «Полианалист» алгоритм чанкинга (сегментации текста на синтагмы). Результаты работы этого алгоритма можно посмотреть в узле «Разметка текста».
При иcпользовании опционального именованного параметра level:=top, результаты соответствуют разметке с выбранной опцией «Объединить смежные именованные группы».
В отличие от запроса phrase(0, большой, компания) запрос chunk(большой, компания) найдет не только «большая компания», но и «большая строительная компания», потому что функция phrase() ищет последовательность аргументов в строго указанном порядке на расстоянии «0» друг от друга, а chunk() находит словосочетание полностью, со всеми зависимыми словами.
Пример
Пример задачи: найти в тексте упоминания всех университетов
Запрос chunk(университет, match:=range) позволит найти названия всех университетов. Кроме того, этот запрос найдет «различные университеты страны», «лаборатория университета» и «история Московского университета».
Заметим, что без параметра match:=range будет выделено подсветкой только слово «университет», без зависимых от него слов.
Пример задачи: найти в тексте описание неполадок
Запрос chunk(неполадка, level:=top, match:=range) позволит найти описания различных неполадок. Обычно неполадки описываются в свободной форме, а потому использование функции chunk() существенно упрощает запрос, так как избавляет от необходимости описывать все многообразие возможных формулировок.
Заметим, что без параметра match:=range будет выделено подсветкой только слово «неполадка», без зависимых от него слов.