Словоформы в грамматическом движке - это основной структурный элемент текста, с которым работает морфологический анализатор, правила синтаксического анализа, правила трансформации.
Каждая словоформа является достаточно сложным
контейнером, храня разнообразную информацию, полученную в результате морфологического разбора слова.
1. Текст - собственно это само слово (обычно),
либо цепочка слов. Цепочка слов может появится по двум основным
причинам. Во-первых, существуют словарные статьи с многословными грамматическими формами, например наречие до утра, глагол валять дурака или
предлог в сравнении с, которые токенизатором
выделяются из текста как единое целое. Во-вторых, в ходе
синтаксического анализа некоторые аналитические формы слов могут
сворачиваться, например будущее время для русских глаголов несовершенного вида буду читать, сравнительная степень некоторых прилагательных более крупный, или отрицательные формы не пиши. В-третьих, в ходе работы правил трансформации можно создавать произвольные многословные словоформы из соображений удобства.
2. Грамматические признаки в виде списка координатных пар. Обычно эти признаки выявляются в ходе морфологического разбора, но могут быть заданы также в правилах синтаксического анализа или трансформации.
3. Связанные словоформы, образующие
синтаксический граф (дерево). Деревья появляются либо в ходе
синтаксического анализа, либо во время перевода текста. Такие функции в
правилах трансформации, как link_count и link_get позволяют работать с ветками такого дерева.
4. Альтернативные варианты словоформ, находящиеся в той же позиции в тексте. Возникновение альтернативных вариантов связано с неоднозначностью морфологического разбора в некоторых случаях. К примеру, предложение Рой здесь. не дает возможности сделать однозначный выбор для первого слова между глаголом рыть и существительным рой.
Рассмотрим работу со словоформами в ходе морфологического анализа на примере двух словосочетаний.
вижу орел
Так как информация о регистре букв в текущей версии словаря не используется при морфологическом разборе, то существительные Орел (город) и орел (птица) являются омонимами на уровне базовых форм. В результате при морфологическом разборе словосочетания анализатор встает перед выбором - формой какой словарной статьи является второе слово. Используя контекст - глагол вижу и его свойства, а именно способность управлять прямым дополнением в винительном падеже, а также применяя эвристику для русского языка - существительное после глагола обычно не стоит в именительном падеже, морфологический анализатор на выходе дает такую цепочку словоформ:
Если контекст позволит, то морфологический анализатор уберет безусловно недопустимые варианты для второй словоформы. Например, такое словосочетание
вижу орла
даст в результате морфологического разбора
Анализатор учел, что глагол видеть сочетается только с винительным и творительным падежом прямого дополнения. Поэтому варианты родительного падежа для существительных орел и Орел он отбросил. В результате имеем две словоформы без альтернативных вариантов.
Морфологический анализ обоих примеров можно легко проверить с помощью утилиты syntax, запущенной с ключом -morphology. Она выводит в консоль сведения о количестве вариантов в каждой словоформе, если возникают альтернативы:
В процедурном API грамматического словаря есть несколько функций для получения информации о словоформе.
Во-первых, в результате морфологического разбора одиночного слова sol_ProjectWord полчается список альтернативных словоформ. Для работы со список есть функции:
sol_CountProjections - число альтернатив в списке словоформ.
sol_GetIEntry - получение id словарной статьи для указанной словоформы в списке.
sol_GetProjCoordState - определение грамматического признака для указанной словоформы в списке.
Другой набор функций API позволяет работать с результатами морфологического разбора предложения функциями sol_MorphologyAnalysis и sol_SyntaxAnalysis.
В качестве примера можно привести sol_GetNodeIEntry - получение id словарной статьи основного варианта словоформы, sol_GetNodeVersionCount - количество альтернативных вариантов словоформы.
Правила трансформации текста также позволяют манипулировать словоформами набором встроенных функций.
К примеру wordform_pack позволяет создать словоформу с несколькими вариантами, например в ходе перевода текста. Для отсева вариантов можно использовать функцию ngrams_filter.
© Козиев Илья 2019
![]() |
|
изменено 14-Jul-12 |