Распознавание части речи, падежа, рода, числа, времени, степени и других грамматических параметров для одного слова без учета контекста.
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;
}Приобретение SDK грамматического словаря
API layer C++ source code: grammar_engine_api.cpp
Вернуться к списку функций API
© Elijah Koziev 2010
Поисковая система
SDK Поисковой системы
Экранный переводчик
|
|
изменено 11-Dec-11 | ||||||||||||||||||||||||||||||||||||||