Морфологический разбор слова

Распознавание части речи, падежа, рода, числа, времени, степени и других грамматических параметров для одного слова без учета контекста.

C/C++:

HGREN_WCOORD sol_ProjectWord( HGREN hEngine, const wchar_t * Word, int Flags )

HGREN_WCOORD sol_ProjectWord8( HGREN hEngine, const char * WordUtf8, int Flags )

C#:

IntPtr sol_ProjectWord( IntPtr hEngine, string Word, int Flags )

Delphi:

function sol_ProjectWord( hEngine: PInteger; Word: PWideChar; Flags: Integer ): PInteger;

PHP:

sol_ProjectWord8( $hEngine, $Word, $Flags )

Аргументы:

hEngine - дескриптор экземпляра грамматического словаря.

Word - указатель на строку из широких символов с обрабатываемым словом. Для функции с суффиксом 8 строка должна быть в кодировке utf-8.

Flags - флаги, управляющие работой морфологического анализатора. Может иметь значение 0 для базового алгоритма морфологического разбора.

Возвращает:

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

Примечания

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

После завершения работы с результатами анализа, следует освободить занятую оперативную память с помощью вызова sol_DeleteProjections.

Некоторые слова могут быть распознаны неоднозначно. Функция sol_CountProjections позволяет узнать количество вариантов распознавания. Показанный ниже пример использования этой функции хорошо демонстрирует, насколько неоднозначным может быть распознавание слов в отрыве от синтаксического контекста. Слово кошки дает два варианта существительного в именительном и родительном падежах. Для слова ели ситуация осложняется тем, что оно распознается и как форма прошедшего времени глагола есть, и несколько падежных форм существительного ель.

Результаты морфологического анализа содержат такие данные, как первичные ключи словарных статей и ссылки на грамматическую форму статьи. Добраться до соответствующих данных можно с помощью функций sol_GetIEntry и sol_GetProjCoordState.

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

Примеры выполнения морфологического анализа из прикладного кода

C++:

#include <lem/solarix/solarix_grammar_engine.h>

int main( int argc, char *argv[] )
{
 HGREN hEngine = sol_CreateGrammarEngineEx8( "..\\..\\..\\..\\..\\bin-windows\\dictionary.xml", SOL_GREN_LAZY_LEXICON );
 char sentence[] = "Кошки ели мой корм"; // N.B.: file encoding=utf-8

 char * EntryName = new char[ sol_MaxLexemLen8(hEngine) ];
 char * PartOfSpeechName = new char[ sol_MaxLexemLen8(hEngine) ];
 char * Word = new char[ sol_MaxLexemLen8(hEngine) ];

 HGREN_STR hWords = sol_Tokenize8( hEngine, sentence, -1 );

 int nword = sol_CountStrings(hWords);
 for( int i=0; i<nword; ++i )
 {
  sol_GetString8( hWords, i, Word );

  HGREN_WCOORD hProjs = sol_ProjectWord8( hEngine, Word, 0 );

  int nprojs = sol_CountProjections(hProjs);
  
  for( int i=0; i<nprojs; ++i )
   {
    int id_entry = sol_GetIEntry(hProjs,i);
    int id_partofspeech = sol_GetEntryClass( hEngine, id_entry );

    sol_GetEntryName8( hEngine, id_entry, EntryName );
    sol_GetClassName8( hEngine, id_partofspeech, PartOfSpeechName );

    // ...
   }

  sol_DeleteProjections(hProjs);
 }

 sol_DeleteStrings(hWords);
 sol_DeleteGrammarEngine(hEngine);

 return 0;
}

Навигация по API грамматического словаря

Приобретение SDK грамматического словаря

API layer C++ source code: grammar_engine_api.cpp

Вернуться к списку функций API

  © Козиев Илья 2019
изменено 11-Dec-11