C/C++:
HGREN_RESPACK sol_MorphologyAnalysis( HGREN hEngine, const wchar_t * Sentence, int Flags, int UnusedFlags, int LanguageID )
HGREN_RESPACK sol_MorphologyAnalysis8( HGREN hEngine, const char * SentenceUtf8, int Flags, int UnusedFlags, int LanguageID )
HGREN_RESPACK sol_MorphologyAnalysisA( HGREN hEngine, const char * Sentence, int Flags, int UnusedFlags, int LanguageID )
C#:
IntPtr sol_MorphologyAnalysis( IntPtr hEngine, string Sentence, int Flags, int UnusedFlags, int LanguageID )
Delphi:
function sol_MorphologyAnalysis( hEngine: PInteger; Sentence: PWideChar; Flags: Integer; UnusedFlags: Integer; LanguageID: Integer ): PInteger;
Аргументы:
hEngine - дескриптор экземпляра грамматического словаря.
Sentence - указатель на строку из широких символов, из которой будет извлечен список лексем. Для функций с суффиксом 8 и A строка должна быть в кодировке utf-8 или текущей системной однобайтовой соответственно.
Flags - флаги, управляющие работой морфоанализатора. Может иметь значение 0 для базового алгоритма анализа или быть побитовым объединением следующих значений:
SOL_GREN_ALLOW_FUZZY - разрешено использовать алгоритмы нечеткого морфологического анализа слов в случаях, когда анализатор встречает неизвестное ему слово. Также этот флаг разрешает применять разнообразные правила определения морфологических признаков слова по его аффиксу. Может несколько понизить производительность.
SOL_GREN_COMPLETE_ONLY - используется главным образом для автоматизированных тестов; задает требование, чтобы анализатор нашел правило, описывающее структуру всего предложения, иначе считать анализ невыполненным.
SOL_GREN_PRETOKENIZED - вместо использования внутреннего токенизатора использовать символ с кодом 0x1F как указатель границ слов. Это позволяет разбить предложений по своим правилам, если имеющиеся в словаре не устраивают.
LanguageID - ID языка, правила которого нужно применять для токенизации, либо -1 для автоматического определения языка. По возможности следует указывать язык, тогда анализатор не будет тратить время на дополнительный анализ текста и устранит вероятность ошибки для предложений с латиницей и диакритическими значками.
Возвращает:
Дескриптор объекта, хранящего результаты морфологического разбора. После окончания работы с результатами его нужно удалить вызовом функции sol_DeleteResPack.
Функция выполняет несколько этапов обработки исходного предложения. Прежде всего, выполняется разбивка на отдельные слова с учетом правил и исключений для выбранного языка, то есть токенизация. Затем происходит объединение устойчивых сочетаний слов, представляющих обособленные лексические единицы, то есть chunking. Затем для каждого слова определяется его часть речи и грамматические признаки, в том числе падеж, род, число, время, степень и так далее. Этот этап обычно называется part-of-speech tagging. В случае неоднозначного определения этих признаков у слова анализатор примеряет правила, учитывающие контекст, то есть соседние слова и законы согласования в языке. Таким образом, выполняется disambiguation. Если неоднозначность таким способом не удается устранить, например из-за свободного порядка слов в русском языке, то используются разнообразные эвристики. Например, часто существительное-подлежащее в именительном падеже идет перед сказуемым-глаголом, а прямое дополнение в винительном падеже - после.
Для работы с результатами морфоанализа следует использовать функции sol_CountGrafs, sol_CountRoots, sol_GetRoot, sol_GetNodeIEntry, sol_GetNodeVerIEntry, sol_GetNodePosition, sol_GetNodeContents, sol_GetNodeCoordState, sol_GetNodeVersionCount, sol_GetNodeCoordPair, sol_GetNodeVerCoordPair, sol_GetNodePairsCount, sol_GetNodeVerPairsCount, sol_GetNodePairCoord, sol_GetNodeVerPairCoord, sol_GetNodePairState, sol_GetNodeVerPairState.
Если нужно определить связи слов в предложении, то следует использовать функцию sol_SyntaxAnalysis.
C++:
int Flags = SOL_GREN_ALLOW_FUZZY;
HGREN_RESPACK hs = sol_MorphologyAnalysisW( hEngine, L"Девчонки и мальчишки валяли дурака весь день", Flags, 0, 300000, id_language );
const int nroot = sol_CountRoots(hs,0);
for( int i=1; i<nroot-1; ++i )
{
HGREN_TREENODE hNode = sol_GetRoot( hs, 0, i );
// ...
}
sol_DeleteResPack(hs);
C#:
Приобретение SDK грамматического словаря
API layer C++ source code: grammar_engine_api.cpp
Вернуться к списку функций API
© Elijah Koziev 2010
Поисковая система
SDK Поисковой системы
Экранный переводчик
|
|
изменено 13-Mar-12 | ||||||||||||||||||||||||||||||||||||||