Морфологический анализатор грамматического словаря

Морфологический анализ и синтез

Морфологический анализ - это одна из элементарных операций, выполняемых грамматической машиной. В зависимости от области применения, прикладной программист может выбрать нужную процедуру, достигая компромисса между скоростью и полнотой выполняемых действий. К примеру, вместо полного морфологического анализа слова, который дает множество вариантов из-за омонимии, в ряде случаев достаточно использовать быстрый поиск, который возвращает только один результат, отбрасывая другие. К примеру, поисковый движок использует оба подхода, так что обработка текстов с большим количеством слов выполняется очень быстро (см. benchmarks).

Кроме таких широко используемых процедур, как лемматизация слов sol_TranslateToBase и генерация всевозможных форм из базовой sol_FindStringsEx, морфологический анализатор позволяет также выяснять грамматические признаки слова (род, падеж и т.д.) - например, sol_GetNounGender, склонять sol_GetNounForm и спрягать sol_GetVerbForm слова, получать псевдокорень (стемминг) sol_Stemmer, а также работать с тезаурусом - например, процедура sol_TranslateToNoun приводит глагол хромировать к существительному хромирование и хром.

В качестве демонстрации основных технических решений можно также использовать служебные программы, входящие в SDK:

lexicon - консольный отладчик морфологического анализатора,

debugger - оконная версия (MS Windows) морфологического анализатора,

syntax - консольный отладчик синтаксического анализатора и синтезатора.

Программа Грамматический Словарь Русского Языка также позволяет удобно просматривать морфологические свойства слов, их склонение и спряжение, а также прослеживать связи слов - синонимы, антонимы, родовые пары, словообразовательные связи.

Алгоритмы анализа

Алгоритмы работы морфологического анализатора описаны здесь

Описание алгоритмов токенизатора см. здесь.

Многопоточность морфологического анализатора

В настоящее время морфологический анализатор протестирован на потокобезопасность - соответствующий код входит в состав демонстрационной программы TestLexicon в SDK Грамматического Словаря.

Процедуры API словаря

Токенизация предложения

Аргументы

HGREN_STR sol_Tokenize( HGREN hEngine, const wchar_t *Sentence, int Language )

Разбивает строку Sentence на лексемы, учитывая определенные в загруженном словаре правила для особых случаев (типа сокращений т.д. и А.С. Пушкин), мультилексемы типа кое-кого. Аргумент Language указывает для используемый для анализа язык.

Возвращает:

Возвращается массив строк, с которыми можно работать с помощью функций sol_CountStrings, sol_GetString и sol_DeleteStrings.

Подробнее ...

Создание разделителя предложений

HGREN_SBROKER sol_CreateSentenceBroker( HFAIND hEngine, const wchar_t *Filename, const wchar_t *DefaultCodepage )

HGREN_SBROKER sol_CreateSentenceBrokerMem( HFAIND hEngine, const wchar_t *Text )

Создается объект брокера для разбора текста в указанном документе (имя файла Filename и кодировка для ascii файлов DefaultCodepage) или в заданном буфере в памяти Text.

Отдельные предложения извлекаются последовательными вызовами пар функций sol_FetchSentence и sol_GetFetchedSentence до исчерпания текста, и затем объект брокера должен быть удален вызовом sol_DeleteSentenceBroker.

Данная процедура учитывает различные особые случаи, например "А.С. Пушкин".

Так как грамматический движок использует механизм работы с content-плагинами поисковой системы, то в зависимости от установленного дистрибутива может поддерживаться разный набор форматов документов, но базовые форматы - txt ascii, txt utf8, html поддерживаются во всех случаях.

Отделение очередного предложения

int sol_FetchSentence( HGREN_SBROKER hBroker )

Выделяется очередное предложение и возвращается либо длина буфера, необходимого для сохранения предложения (без учета терминирующего 0), либо 0 - достигнут конец текста.

Аргумент - хэндл брокера, созданного процедурой sol_CreateSentenceBroker или sol_CreateSentenceBrokerMem.

Получить текст отделенного предложения можно с помощью вызова sol_GetFetchedSentence.

 

Получение текста отделенного предложения

int sol_GetFetchedSentence( HGREN_SBROKER hBroker, wchar_t *Buffer )

В предоставленный буфер, размер которого вернул предшествующий вызов sol_FetchSentence, копируется предложение с завершающим нулём.

Удаление разделителя предложений

void sol_DeleteSentenceBroker( HGREN_SBROKER hBroker )

Освобождается память, занятая брокером, который ранее был создал вызовом sol_CreateSentenceBroker или sol_CreateSentenceBrokerMem.

Слогоделитель

int sol_SyllabsHGREN hEngine, const wchar_t *Word,wchar_t Delimiter, wchar_t * Result )

Слово в Word разбивается на слоги и результат записывается в буфер Result. Слоги в строке результата разделяются символом Delimiter. В худшем теоретическом случае число слогов равно числу букв исходного слова, поэтому размер буфера Result должен быть в 2 раза больше, чем длина Word, с учетом символов для разделения слогов.

К примеру, вызов

sol_Syllabs( hEngine, L"КОШКА", L'+', Result )

даст в результате строку КОШ+КА.

 

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

HGREN_RESPACK sol_MorphologyAnalysis( HFAIND hEngine, const wchar_t *Sentence, bool Allow_Dynforms, bool Allow_Unknown, int TimeoutMilliSec, int LanguageId )

Аргументы:

hEngine - дескриптор созданного объекта движка - см. sol_CreateGrammarEngine и sol_CreateSearchEngine.

Sentence - фраза для анализа.

Allow_Dynforms - включать сложную морфологию, то есть пытаться привести неизвестные слова к известным основам за счет добавления/исключения префиксов и аффиксов. К примеру, если слово КОШЕЧКА отсутствует в лексиконе, то анализатор приведет его к базовой форме КОШКА с помощью учета продуктивного суффикса.

Allow_Unknown - пытаться анализировать неизвестные слова, основываясь на контексте. К примеру, предложение "белый бармаглот быстро плюкует" будет успешно проанализировано и для него построен граф, хотя слова бармаглот и плюкует в словаре не существуют.

TimeoutMillisec - величина максимального времени, отводимого на выполнение анализа. При исчерпании заданного интервала анализ будет прерван и результат скорее всего будет содержать частично выполненный анализ, причем степень выполнения может быть произвольная.

LanguageId - код языка анализируемого предложения.

Возвращает: Указатель на объект, который содержит список альтернативных вариантов анализа фразы. В случае невозможности выполнить разбор фразы процедура может вернуть NULL либо пустой результат (с нулевым числом корней). В текущей версии движка морфологический анализ почти всегда дает единственный вариант.

Дальнейшая работа с результатами анализа выполняется процедурами, описанными здесь.

Приведение слова к базовой форме (лемматизация)

int sol_TranslateToBaseHGREN hEngine, wchar_t *Word, bool AllowDynforms )

Простейший пример использования этой операции - в индексаторе поисковой системы. Хотя это не имеет большого значения на практике, под базовой формой обычно понимается именительный падеж единственного числа для существительных, для прилагательных добавляется еще признак мужского рода, для глагола - неопределенная форма. В результате слово "кошкою" будет переведено в форму "кошка", слово "приседайте" в "приседать". В некоторых случаях полезными также могут оказаться процедуры для приведения к форме существительного sol_TranslateToNoun, к форме глагола sol_TranslateToInfinitive. В результате слово "кошачьи" можно привести к существительному "кошка", а слово "приседавшими" к инфинитиву "приседать". Подобные операции, фактически отображающие множество словоформ языка на меньшее множество, позволяют сократить объем индекса, но в качестве побочного эффекта неизбежно вызывают появление в результатах поиска слаборелевантных контекстов.

Если разрешено использовать "динамические формы" (AllowDynforms=true), то включается стеммер.

Если возможно приведение к нескольким базовым формам (например пили можно привести к пить или к пилить), то движок выберет какой-то один вариант. В случаях, когда важно получить полный список базовых форм, следует использовать более медленную процедуру sol_TranslateToBases, либо обратиться к процедуре sol_GetLemmasX в API лемматизатора.

Более детальное описание возможных путей лемматизации с помощью грамматического словаря можно найти здесь. Если использование API грамматического словаря слишком обременительно для Вашего прикладного кода, можно использовать отдельный простой Лемматизатор. Другая альтернатива - использовать SQL вариант грамматического словаря.

Аргументы:

    hEngine - дескриптор созданного объекта движка - см. sol_CreateGrammarEngine и sol_CreateSearchEngine.

    Word - исходное слово, а также буфер для результата.

   AllowDynforms - включать сложную морфологию. См. также описание команды -dynforms в поисковом движке.

Возвращает:

    1 - преобразование выполнено;

    0 - преобразование не выполнено, не найдена подходящая словарная статья;

    -1 - ошибка.

Приведение слова к базовым формам (лемматизация)

HGREN_STR sol_TranslateToBasesHGREN hEngine, const wchar_t *Word, bool AllowDynforms )

В отличие от sol_TranslateToBase, не отбрасывает различные варианты в случае наличия омонимов, а возвращает весь список вариантов.

Аргументы:

    hEngine - дескриптор созданного объекта движка - см. sol_CreateGrammarEngine и sol_CreateSearchEngine.

    Word - исходное слово, любая из форм.

   AllowDynforms - включать сложную морфологию. См. также описание команды -dynforms в поисковом движке.

Возвращает:

Дескриптор объекта, хранящего список строк. Для извлечения отдельных строк используются две процедуры API - sol_CountStrings и sol_GetStrings.

Более детальное описание возможных путей лемматизации с помощью грамматического словаря можно найти здесь.

Если использование API грамматического словаря слишком обременительно, можно использовать отдельный простой Лемматизатор. Другая альтернатива - использовать SQL вариант грамматического словаря.

Стеммер - выделение псевдокорня

int sol_StemmerHGREN hEngine, const wchar_t *Word )

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

Аргументы:

    hEngine - дескриптор созданного объекта движка - см. sol_CreateGrammarEngine и sol_CreateSearchEngine.

    Word - исходное слово, а также буфер для результата.

Возвращает:

   Число символов исходного слова, составляющих псевдокорень.

    0 - стемминг невозможен, псевдокорень выделить не удалось;

    -1 - ошибка.

 

Получение всех словоформ для слова с включением расширенной морфологии и операций по тезаурусу

HGREN_STR sol_FindStringsEx( HGREN hEngine, const wchar_t *Word, bool Allow_Dynforms, bool Synonyms, bool Grammar_Links, bool Translations, bool Semantics, int nJumps )

К примеру, для исходной строки галактика процедура сгенерирует список, содержащий слова галактика, галактики, галактику , ..., метагалактика, метагалактики, ... галактический, галактические, ... и т.д. Список может быть достаточно длинным из-за включения морфологических правил образования (приставки типа мета- или супер-).

Аргументы:

    hEngine - дескриптор созданного объекта движка - см. sol_CreateGrammarEngine и sol_CreateSearchEngine.

   Allow_Dynforms - можно ли использовать правила "сложной" морфологии. С помощью этих правил морфоанализатор может привести слово кошечка к базовой форме кошка. Кроме того, этот флаг включает эвристический стеммер. См. также описание команды -dynforms в поисковом движке.

    Synonyms, Grammar_Links, Translations, Semantics разрешают использование соответствующих групп связей между словами.

    nJumps - максимальное сетевое расстояние по тезаурусу; 1 означает только непосредственно связанные слова.

Возвращает:

    Дескриптор объекта, хранящего список строк. Для извлечения отдельных строк используются две процедуры API - sol_CountStrings и sol_GetStrings.

    NULL - ошибка.

Количество найденных форм

int sol_CountStrings( HGREN_STR hStr )

Возвращает:

    Число найденных форм (то есть число элементов в векторе строк). Это число используется для выделения памяти перед вызовом функции sol_GetStrings.

 

Получение вектора найденных форм

int sol_GetStrings( HGREN_STR hStr, wchar_t** Res )

Аргументы:

Вектор Resдолжен иметь размер, возвращаемый процедурой sol_CountStrings. Каждый элемент этого вектора - буфер для размещения строки длиной не менее, чем возвращается процедурой sol_MaxLexemLen.

Возвращает:

   Число скопированных форм.

Удаление вектора найденных форм

int sol_DeleteStrings( HGREN_STR hStr )

Эта функция должны быть вызвана после того, как работа с вектором форм закончилась.

Поиск грамматического класса по имени

int sol_FindClass( HGREN hEngine, const wchar_t * ClassName )

Аргументы:

hEngine - дескриптор загруженного словаря.

ClassName - имя части речи.

Возвращает:

Id части речи, который можно использовать к примеру в sol_GetClassName или sol_FindEntry, либо значение <0, если часть речи не найдена.

Значения id, возвращаемые данной процедурой, соответствуют целочисленным константам API.

Подробнее и примеры ...

Поиск грамматической категории по имени

int sol_FindEnum( HGREN hEngine, const wchar_t *EnumName )

Аргументы:

    hEngine - дескриптор созданного объекта движка - см. sol_CreateGrammarEngine и sol_CreateSearchEngine.

    EnumName - имя грамматического признака, с точностью до регистра.

Возвращает: индекс грамматического признака, который можно использовать к примеру в sol_FindEnumState и sol_GetCoordType, либо значение <0, если признак не найден в загруженном словаре.

Индексы, возвращаемые данной процедурой, соответствуют целочисленным константам API.

В рамках SQL словаря поиск числового кода координаты по её наименованию можно сделать через таблицу SG_COORD.

Поиск грамматического признака по имени

int sol_FindEnumState( HGREN hEngine, int Enum, const wchar_t *StateName)

Аргументы:

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

   Enum - индекс грамматической категории.

   StateName - имя грамматического признака.

Возвращает: индекс признака, либо значение <0, если категория не имеет такого признака

Подробнее об этой функции ...

Определение текстового наименования грамматического признака (состояния координаты) по числовому коду

int sol_GetCoordStateNameHGREN hEngineint CoordIdint StateIdwchar_tResult )

Аргументы:

    CoordId - числовой код координаты, его можно задать с помощью символических констант либо найти с помощью sol_FindEnum.

   StateId - числовой код состояния, его можно задавать с помощью символических констант либо найти предварительным вызовом sol_FindEnumState.

    Result - буфер для записи наименования. Максимальная длина буфера может быть определена вызовом sol_MaxLexemLen.

Возвращает:

0 - успешное исполнение

Подробное описание ...

Определение текстового наименования координаты по числовому коду

int sol_GetCoordName( HGREN hEngine, int CoordId, wchar_t * Result )

int sol_GetCoordName8( HGREN hEngine, int CoordIdchar * ResultUtf8 )

Аргументы:

    CoordId - числовой код координаты, его можно задать с помощью символических констант либо найти с помощью sol_FindEnum.

    Result - буфер для записи наименования.

Возвращает:

0 - успешное исполнение

Подробное описание ...

Определение числа признаков в категории

int sol_CountCoordStatesHGREN hEngineint CoordId )

Аргументы:

    CoordId - числовой код координаты, его можно задать с помощью символических констант либо найти с помощью sol_FindEnum.

Возвращает:

Количество явно определенных состояний у координаты. Некоторые координаты не имеют явных состояний - это так называемые бистабильные координаты. В этом случае подразумевается, что данная координата с состоянием 1 определяет наличие какого-то грамматического признака, а отсутствие этой координаты либо состояние 0 - отсутствие признака. Типичный пример - тег ПРИЧАСТИЕ для русских прилагательных, который имеет состояние 1 для причастий и отсутствует у прилагательных.

Подробное описание функции ...

Поиск словарной статьи в лексиконе

int sol_FindEntryHGREN hEngine, const wchar_t *Word, int Class, int Language )

int sol_FindEntry8HGREN hEngine, const char *WordUtf8, int Class, int Language )

Аргументы:

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

   Word - имя словарной статьи.

   Class - ID части речи.

   Language - ID языка.

Возвращает:

   Неотрицательное число - ID найденнойв лексиконе статьи.

    -1 подходящая словарная статья не найдена

    -2 внутренний сбой

Подробное описание функции ...

Быстрый поиск слова

int sol_SeekWord( HGREN hEngine, const wchar_t *Word, bool AllowDynforms  )

Возвращаемое значение может быть -1, если слово отсутствует в лексиконе, либо число, одинаковое для всех словоформ одной словарной статьи.

Аргументы:

    hEngine - дескриптор созданного объекта движка - см. sol_CreateGrammarEngine и sol_CreateSearchEngine.

   Word - искомое слово, обязательно в верхнем регистре

   AllowDynforms - разрешать использовать правила динамической генерации словоформ. См. также описание команды -dynforms в поисковом движке.

Возвращает:

   Неотрицательное число - индекс (ID) найденной статьи во внутреннем списке. Этот ID используется во многих других процедурах API для доступа к свойстам словарной статьи, к примеру sol_GetNounGender.

Поиск слова в лексиконе (проекция слова)

int sol_FindWordHGREN hEngine, const wchar_t *Word, int *EntryIndex, int *Form, int *Class )

Аргументы:

    hEngine - дескриптор созданного объекта движка - см. sol_CreateGrammarEngine и sol_CreateSearchEngine.

    Word - искомое слово (любая его грамматическая форма).

    EntryIndex - указатель на поле для записи индекса найденной словарной статьи.

    Class - указатель на поле для записи индекса грамматического класса. С помощью sol_GetClassName можно определить имя этого класса.

Возвращает:

    -1 ошибка приведение, например словоформа не найдена.

    число>0 количество найденных прокций, то есть сколько словоформ в лексиконе словаря совпадают с указанной.

Так как одно слово может иметь несколько альтернативных проекций на лексикон, то данная процедура в таких случаях возвращает просто произвольный (фактически первый найденный) вариант. См. описание отладчика LEXICON - проекция слов. Для поиска всех вариантов проекции используйте процедуру sol_ProjectWord.

Слово Word не обязательно является базовой формой, Смысл работы этой процедур как раз и заключается в приведении к базовой форме.


Поиск всех вариантов проекции слова на лексикон

HGREN_WCOORD sol_ProjectWordHGREN hEngine, const wchar_t *Word, bool AllowDynforms )

Аргументы:

    hEngine - дескриптор созданного объекта движка - см. sol_CreateGrammarEngine и sol_CreateSearchEngine.

    Word - слово (любая его форма).

   AllowDynforms - допускать применение морфологических правил продукции словоформ (приставки, суффиксы и т.д.). См. также описание команды -dynforms в поисковом движке.

Возвращает:

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

    NULL - проекций нет

Для пояснения работы данной процедуры можно использовать одну из отладочных утилит в составе SDK. Например, запустите программу lexicon, которая позволяет для вводимых с консоли слов находить словоформы в лексиконе. Введите любое слово и программа выведет список найденных проекций - вариантов словоформ вместе с их грамматическими признаками:

В данном примере для слова "кошки" найдено две словоформы, относящиеся к одной словарной статье с индексом 44054, отличающиеся по падежу и числу.

 

HGREN_WCOORD sol_ProjectMisspelledWordHGREN hEng, const wchar_t *Word, bool AllowDynforms, int nmaxmiss )

Работает аналогично sol_ProjectWord, но позволяет искать словоформы с опечатками - параметр nmaxmiss задает максимальное число несовпадающих букв.

 

int sol_CountProjections( HGREN_WCOORD hList )

Возвращает число элементов в списке hList (см. sol_ProjectWord).

 

int sol_GetIEntry( HGREN_WCOORD hList, int Index )

Возвращает индекс словарной статьи для указанной проекции.

 

int sol_GetProjCoordState( HGREN hEngine, HGREN_WCOORD hList, int Index, int Coord )

Возвращается состояние грамматического признака Coord у проекции Index. Числовые константы для обозначения грамматических признаков перечислены в файле \sdk\include\_sg_api.h, например GENDER_ru - грамматический род для русского языка. В этом же файле приводятся константы, обозначающие значения для признаков, например NEUTRAL_GENDER_ru это средний род для русского языка.
 

int sol_DeleteProjections( HGREN_WCOORD hList )

Удаляет список проекций hList (см. sol_ProjectWord).

Поиск фразовой статьи

int sol_FindPhraseHGREN hEngine, const wchar_t *Phraseint Flags )

int sol_FindPhrase8HGREN hEngine, const char *Phraseint Flags )

Аргументы:

Phrase - текст фразы, для sol_FindPhrase8 это строка в кодировке utf8.

Flags - параметры поиска, в текущей версии может принимать значения 0 - игнорировать регистр букв, 1 - поиск с точным соответствием регистра букв.

Возвращает:

id фразовой статьи, если поиск успешен, либо -1 при неудаче. Этот id затем указывается при различных манипуляциях с фразой, например в вызовах sol_DeletePhrase или sol_AddLink.

Подробнее об этой функции ...

Добавление новой фразовой статьи

int sol_AddPhrase( HGREN hEngineconst wchar_t * Phraseint Languageint Classint ProcessingFlags )

int sol_AddPhrase8( HGREN hEngineconst char * Phraseint Languageint Classint ProcessingFlags )

Создается новая фразовая статья и возвращается ее первичный ключ. Вариант sol_AddPhrase8 работает со строкой в кодировке utf-8.

Аргументы:

Phrase - текст фразы

Language - id языка

Class - id части речи, если необходимо, чтобы фраза выступала в соответствующей роли, например валять дурака - инфинитив. Можно указать -1, если данное свойство фразы нам не нужно.

ProcessingFlags - дополнительные флаги, в текущей версии всегда 0.

Возвращает:

Первичный ключ созданной фразовой статьи.

Подробнее об этой функции ...

Удаление фразовой статьи

int sol_DeletePhrase( HGREN hEngineint te_id )

Удаляется фразовая статья с заданным первичным ключом te_id. Получить первичный ключ фразы можно разными путями, к примеру вызовом sol_AddPhrase или sol_FindPhrase.

Подробнее об этой функции ...

Дополнительная обработка фразовой статьи

int sol_ProcessPhraseEntry( HGREN hEngineint te_idconst wchar_t * Scenarioint Languagewchar_t DelimiterChar )

Аргументы:

te_id - первичный ключ обрабатываемой фразовой статьи (см. к примеру sol_FindPhrase и sol_AddPhrase).

Scenario - набор названий алгоритмов (сценариев), которые обрабатывают фразу. Для полного списка возможных сценариев см. описание утилиты ThesaurusNotes.

Language - код языка фразы, если он не задан явно при объявлении фразы.

DelimiterChar - символ, который используется как разделитель слов при сегментации фразы, обычно достаточно указать 0 для использование стандартного символа.

Получение списка словарных статей по маске, части речи и языку

HGREN_INTARRAY sol_ListEntries( HGREN hEngineint Flagsint EntryTypeconst wchar_t * Maskint Languageint Class )

Аргументы:

Flags - параметры поиска, в текущей версии должно быть 0.

EntryType - 0 для словарных статей, 1 для фразовых.

Mask - регулярное выражение, с которым сопоставляются имена словарных статей.

Language - код языка статей, может принимать значение -1, если фильтрация по языку не нужна.

Class - код части речи статей, можно задать -1, если часть речи не важна.

Возвращает:

Список ключей словарных статей. Для работы со списком можно использовать такие функции, как sol_CountInts.

Подробнее об этой функции ...

Определение рода существительного.

int sol_GetNounGender(  HGREN hEngine, int EntryID )

Аргументы:

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

EntryID - найденный ID словарной статьи

Возвращает:

Константу, определяющую грамматический род.

   -1  категория рода не применима к указанной словарной статье

   -2  внутренний сбой

Подробнее об этой функции ...

Склонение существительного для заданного падежа и числа

int sol_GetNounFormHGREN hEngine, int EntryIndex, int Number, int Case, wchar_t *Result )

Аргументы:

    hEngine - дескриптор созданного объекта движка - см. sol_CreateGrammarEngine и sol_CreateSearchEngine.

    EntryIndex - индекс словарной статьи (см. функцию sol_FindEntry)

    Number - грамматическое число (см. константы API ГМ).

    Case - грамматический падеж (см. константы API ГМ).

Результат:

    Result - если склонение произошло успешно, возвращает лексическое содержание формы, иначе - будет пустая строка. См. также 1) работа с существительными через API 2) склонение русских существительных 3) склонение английских существительных.

Возвращает:

    0 нормальное завершение

    -2 внутренний сбой

    -3 подходящая форма не найдена

Склонение прилагательного

int sol_GetAdjectiveFormHGREN hEng, int EntryIndex, int Number, int Gender,  int Case, int Anim, int Shortness, int Compar_Form, wchar_t *Result )

Аргументы:

    EntryIndex - индекс словарной статьи (см. функцию sol_FindEntry)

    Number - грамматическое число (единственное - SINGULAR_NUMBER_ru), см. константы API.

    Gender - грамматический род (мужской - MASCULINE_GENDER_ru), см. константы API.

    Case - грамматический падеж (для именительного NOMINATIVE_CASE_ru), см. константы API.

    Anim - признак одушевленности (для неодушевленного INANIMATIVE_FORM_ru), см. константы API.

    Shortness - полная (0) или краткая (1) форма прилагательного.

    Compar_Form - обычная-сравнительная-превосходная форма (обычная - ATTRIBUTIVE_FORM_ru), см. константы API.

Результаттат:

    Result - если склонение произошло успешно, возвращает лексическое содержание формы, иначе - будет пустая строка. См. также 1) прилагательные и причастия в грамматическом словаре 2) способы склонения прилагательных

Возвращает:

    0 нормальное завершение

    -2 внутренний сбой

    -3 подходящая форма не найдена

 

Спряжение глагола

int  sol_GetVerbFormHGREN hEng, int EntryIndex, int Number, int Gender, int Tense, int Person, wchar_t *Result )

Аргументы:

    EntryIndex - индекс словарной статьи (см. функцию sol_FindEntry)

    Number - грамматическое число, см. константы API.

    Gender - грамматический род, см. константы API.

    Tense - грамматическое время, см. константы API.

    Person - грамматическое лицо, см. константы API.

Результат:

    Result - если спряжение произошло успешно, возвращает лексическое содержание формы, иначе - будет пустая строка. Следует обращать особое внимание на свойства русских глаголов - например, грамматический род учитывается в спряжении только для форм прошедшего времени единственного числа. См. 1) примеры работы с глаголами через API 2) описание русских глаголов 3) спряжение английских глаголов.

Возвращает:

    0 нормальное завершение

    -2 внутренний сбой

    -3 подходящая форма не найдена

 

Согласование существительного и числа. Отдельно задается падеж и (опционально) - одушевленность/неодушевленность.

int sol_CorrNounNumberHGREN hEng, int EntryIndex, int Value, int Case, int Anim,  wchar_t *Result )

Аргументы:

    EntryIndex - индекс словарной статьи (см. функцию sol_FindEntry)

    Value - положительное целое число, с которым согласуется существительное

    Case - падеж (для именительного - NOMINATIVE_CASE_ru), см. константы API.

    Anim - одушевленность (для неодушевленного INANIMATIVE_FORM_ru), см. константы API.

Возвращает:

    0  нормальное завершение

    -1  внутренний сбой

Результат работы:

    В текстовом буфере Result будет сформировано слово, согласованное с числительным Value

 

Согласование прилагательного и числа

int sol_CorrAdjNumberHGREN hEng, int EntryIndex, int Value, int Case, int Gender, int Anim,  wchar_t *Result )

Аргументы:

    EntryIndex - индекс словарной статьи (см. функцию sol_FindEntry)

    Value - положительное целое число, с которым согласуется существительное

    Case - падеж (для именительного - NOMINATIVE_CASE_ru), см. константы API.

    Gender - грамматический род, см. константы API.

    Anim - одушевленность (для неодушевленного INANIMATIVE_FORM_ru), см. константы API.

Возвращает:

    0  нормальное завершение

    -1  внутренний сбой

Результат работы:

    В текстовом буфере Result будет сформировано слово, согласованное с числительным Value. См. также 1) прилагательные и причастия в грамматическом словаре 2) способы склонения прилагательных

 

Согласование глагола и числа

int sol_CorrVerbNumber(  HGREN hEng, int EntryIndex, int Value, int Gender,  int Tense, wchar_t *Result )

Аргументы:

    EntryIndex - индекс словарной статьи (см. функцию sol_FindEntry)

    Value - положительное целое число, с которым согласуется глагол

    Gender - грамматический род, см. константы API.

    Tense - грамматическое время, см. константы API.

    Person - грамматическое лицо, см. константы API.

Результат:

    Result - если спряжение произошло успешно, возвращает лексическое содержание формы, иначе - будет пустая строка

Возвращает:

    0 нормальное завершение

    -2 внутренний сбой

    -3 подходящая форма глагола не найдена

 

Число, заданное целочисленным аргументом, преобразуем в текстовое представление

int sol_Value2TextHGREN hEng, wchar_t *Result, int Value, int Gender )

Аргументы:

    Value - неотрицательное число

    Gender - род, который должно иметь числительное (мужской MASCULINE_GENDER_ru), см. константы API.

Возвращает:

    0 нормальное завершение

    -1 внутренний сбой

Результат работы:

    В текстовом буфере Result формируется текстовая строка. Длина буфера должна быть достаточна для хранения всего числительного и завершающего '\0'.

 

Получение всех словоформ для слова

HGREN_STR sol_FindStrings( HGREN hEng, const wchar_t *Word )

Аргументы:

    Word - слово (одна из форм, например для существительных - форма именительного падежа единственного числа)

Возвращает:

    Дескриптор объекта, хранящего список строк. Для извлечения отдельных строк используются две процедуры API - sol_CountStrings и sol_GetStrings.

    NULL - ошибка.

К примеру, для исходной строки галактика процедура сгенерирует список, содержащий слова галактика, галактики, галактику и т.д., то есть все словоформы (в узком смысле).

Получение имени словарной статьи по ее индексу

int sol_GetEntryName( HGREN hEngine, int EntryID, wchar_t* Result )

int sol_GetEntryName8( HGREN hEngine, int EntryIDchar* ResultUtf8 )

Заполняет буфер Result именем словарной статьи по ее ID EntryID.

Аргументы:

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

    EntryID - ID словарной статьи, например полученный с помощью sol_FindEntry.

    Result - буфер для записи имени статьи, размером не менее sol_MaxLexemLen символов.

Возвращает:

   -1 ошибка

   0 имя статьи записано в Result.

Подробнее об этой функции...

Получение текста фразовой статьи

wchar_t* sol_GetPhraseTextHGREN hEngineint id )

wchar_t* sol_GetPhraseText8HGREN hEngineint id )

Позволяет получить текст фразовой статьи по ее первичному ключу.

Аргументы:

id - первичный ключ фразовой статьи.

Возвращает:

Возвращает строку с копией текста. Вызывающий код обязан освободить память, вызвав sol_Free для возвращаемого указателя. Вариант sol_GetPhraseText8 возвращает utf8-строку.

Подробнее об этой функции...

Определение грамматического класса словарной статьи

int sol_GetEntryClass( HGREN hEngine, int EntryID )

Аргументы:

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

    EntryID - ID словарной статьи, например полученный с помощью sol_FindWord.

Возвращает:

    Константу, соответствующую грамматическому классу.

    -2 - внутренняя ошибка или некорректные аргументы

Подробнее об этой функции...

Определение значения грамматического атрибута для словарной статьи

int sol_GetEntryCoordStateHGREN hEngineint EntryIndexint CoordId )

Аргументы:

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

    EntryIndex - ID словарной статьи

    CoordId - числовой код координаты, его можно задать как символическую координату либо найти через sol_FindEnum.

Возвращает:

    Числовой код состояния, либо значение меньше 0 в случае ошибки.

Подробнее об этой функции ...

Имя части речи по ее ID

int sol_GetClassName( HGREN hEngine, int PartOfSpeechID, wchar_t* Result )

int sol_GetClassName8( HGREN hEngine, int PartOfSpeechIDchar* ResultUtf8 )

Заполняет буфер Result именем части речи по её ID PartOfSpeechID.

Аргументы:

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

    PartOfSpeechID - ID части речи.

    Result - буфер для записи имени части речи.

Возвращает:

   -1 ошибка

   0 имя части речи записано в Result. 

Подробное описание этой функции ...

Роль грамматического признака для части речи

int sol_GetCoordType( HGREN hEngine, int CoordId, int ClassId )

Аргументы:

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

CoordId - константа, соответствующая запрашиваемой грамматической категории

ClassId - константа, соответствующая части речи.

Возвращает:

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

1 - категория является измерением, то есть представляет словоизменительные признаки, отличающие формы слова в рамках одной словарной статьи.

2 - категория является тегом, в целом это аналогично атрибутам, но теги могут вообще не задаваться для конкретной словарной статьи, в отличие от атрибутов.

Приведение к существительному (лемматизация и субстантивация)

int sol_TranslateToNoun( HGREN hEngine, int EntryIndex )

Аргументы:

    hEngine - дескриптор созданного объекта движка - см. sol_CreateGrammarEngine и sol_CreateSearchEngine.

    EntryIndex - индекс словарной статьи, например полученный с помощью sol_FindEntry.

Результат:

Возвращает индекс словарной статьи, которая грамматически связана с указанным аргументом и является существительным. Таким образом, можно выполнять преобразования типа "мотивированный-мотивировка".

В случае возникновения ошибок или невозможности выполнить преобразование вернет отрицательное значение.

Данная процедура требует наличия тезауруса. Подробнее о том, как можно выполнять лемматизацию и субстантивацию через процедурный API и SQL запросы - см. здесь.

 

Приведение к неопределенной форме глагола

int sol_TranslateToInfinitive( HGREN hEngine, int EntryIndex )

Аргументы:

    hEngine - дескриптор созданного объекта движка - см. sol_CreateGrammarEngine и sol_CreateSearchEngine.

    EntryIndex - индекс словарной статьи, например полученный с помощью sol_FindEntry.

Результат:

Возвращает индекс словарной статьи, которая грамматически связана с указанной статьей EntryIndex и является инфинитивом. Таким образом, можно выполнять преобразования типа "мотивированный-мотивировать".

В случае возникновения ошибок или невозможности выполнить преобразование вернет отрицательное значение.

Данная процедура требует наличия тезауруса.

 

Поиск связанных статей по тезаурусу

HGREN_INTARRAY sol_SeekThesaurus( HGREN hEngine, int EntryIndex, bool Synonyms, bool Grammar_Links, bool Translation, bool Semantics, int nJumps )

Возвращает список индексов словарных статей, связанных с EntryIndex в тезаурусе связками из указанных категорий. Данная процедура требует наличия тезауруса.

Обратите особое внимание, что не гарантируется, что результат поиска не будет содержать повторов или включать в себя также индекс исходной статьи EntryIndex. Причина - технология работы тезауруса, обусловленная соображениями эффективности для поискового движка.

Аргументы:

    hEngine - дескриптор созданного объекта движка - см. sol_CreateGrammarEngine и sol_CreateSearchEngine.

    EntryIndex -  индекс исходной статьи (см. sol_SeekWord).

    Synonyms - разрешать синонимы типа сидеть-восседать

    Grammar_Links - разрешать грамматические связи типа кошка-кошачий

    Translation - разрешать перевод на другие языки типа кошка-cat

    Semantics - разрешать семантические связи типа кошка-млекопитающее

    nJumps - количество допускаемых прыжков по сети тезауруса, обычно ставится 0 для поиска непосредственных соседей.

Возвращает:

Дескриптор объекта со списком индексов статей, см. sol_CountInts, sol_GetInt, sol_DeleteInts.

На страницах с описанием SQL словаря показано, как можно выполнять аналогичную работу через SQL запросы к базе данных. Сам тезаурус в реляционном виде представлен таблицами SG_LINK и SG_TLINK, а также вспомогательными данными о тегах в таблицах SG_LINK_TAG и SG_TLINK_TAG.

Поиск детальной информации об исходящих связях словарной или фразовой статьи

HLINKSINFO sol_ListLinksTxtHGREN hEngineint Key1int LinkTypeint Flags )

Аргументы:

Key1 - исходная статья, индекс для словарной статьи или первичный ключ для фразовой.

LinkType -тип связи, например SYNONYM_link для синонимов.

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

Возвращает:

Дескриптор списка, работа с этим списком выполняется целым набором функций - см. далее.

Подробнее об этой функции ...

Удаление списка с описаниями связей

int sol_DeleteLinksInfo( HGREN hEngineHLINKSINFO hList )

Аргументы:

hList - дескриптор списка, возвращенный функцией sol_ListLinksTxt.


Количество описаний связей

int sol_LinksInfoCount( HGREN hEngineHLINKSINFO hList )

Аргументы:

hList - дескриптор списка, возвращенный функцией sol_ListLinksTxt.

Возвращает:

Количество элементов в списке.


Тип связи в описании

int sol_LinksInfoType( HGREN hEngine, HLINKSINFO hListint Index )

Аргументы:

hList - дескриптор списка, возвращенный функцией sol_ListLinksTxt.

Index - порядковый номер записи в списке.

Возвращает:

0 для связей между словарными статьями, 1 - между фразовыми.


Первичный ключ записи для связи

int sol_LinksInfoID( HGREN hEngine, HLINKSINFO hList, int Index )

Аргументы:

hList - дескриптор списка, возвращенный функцией sol_ListLinksTxt.

Index - порядковый номер записи в списке.

Возвращает:

Первичный ключ записи о связи во внутренней базе данных. Этот ключ можно использовать для удаления связи.


Первичный ключ левой части связи в описании

int sol_LinksInfoEKey1( HGREN hEngine, HLINKSINFO hList, int Index )

Аргументы:

hList - дескриптор списка, возвращенный функцией sol_ListLinksTxt.

Index - порядковый номер записи в списке.

Возвращает:

Для словарных статей возвращается индекс, для фразовых - перви??ный ключ. Возвращенное значение можно, например, указывать в функциях sol_GetEntryName и sol_GetPhraseText.


Первичный ключ правой части связи в описании

int sol_LinksInfoEKey2( HGREN hEngine, HLINKSINFO hList, int Index )

Аргументы:

hList - дескриптор списка, возвращенный функцией sol_ListLinksTxt.

Index - порядковый номер записи в списке.

Возвращает:

Для словарных статей возвращается индекс, для фразовых - первичный ключ. Возвращенное значение можно, например, указывать в функциях sol_GetEntryName и sol_GetPhraseText.


Текстовое представление тегов в описании связи

const wchar_t* sol_LinksInfoTagsTxt( HGREN hEngine, HLINKSINFO hList, int Index )

Аргументы:

hList - дескриптор списка, возвращенный функцией sol_ListLinksTxt.

Index - порядковый номер записи в списке.

Возвращает:

Текстовое представление списка тегов для связи, в формате языка ПРИИСК.


Удаление связи из тезауруса

int sol_DeleteLink( HGREN hEngineint LinkIDint LinkType )

Удаляется связь тезауруса с указанным первичным ключом в указанной категории - между словарными статьями или ??ежду фразовыми статьями.

Аргументы:

LinkID - первичный ключ удаляемой связи

LinkType - катего??ия связи, 0 - между словарными статьями, 1 - между фразовыми статьями.

Подробнее об этой функции ...

Добавление связи в тезаурус

int sol_AddLink( HGREN hEngineint LinkTypeint IE1int LinkCodeint IE2const wchar_t * Tags )

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

Аргументы:

LinkType - категория связи, 0 - между словарными статьями, 1 - между фразовыми статьями.

IE1 - ключ словарной или фразовой статьи в левой части связи.

LinkCode - константа типа связи (перевод, синоним и так далее).

IE2 - ключ словарной или фразовой статьи в правой части связи.

Tags - строка с перечнем тегов.

Возвращает:

Первичный ключ созданной связи, либо -1 в случае ошибки.

Подробнее об этой функции

Поиск N-грамм

HGREN_INTARRAY sol_SeekNGrams( HGREN hEngine, int EntryIndex )

Аргументы:

    hEngine - дескриптор созданного объекта движка - см. sol_CreateGrammarEngine и sol_CreateSearchEngine.

    EntryIndex -  индекс исходной статьи (см. sol_SeekWord).

Возвращает:

Дескриптор объекта со списком индексов статей, см. sol_CountInts, sol_GetInt, sol_DeleteInts.

Для работы процедуры словарь должен содержать базу N-грамм.

Количество целочисленных элементов

int sol_CountInts( HGREN_INTARRAY hArray )

Возвращает:

   Число элементов в векторе.

Подробнее ...

Получение целочисленного элемента по индексу в векторе

int sol_GetInt( HGREN_INTARRAY hArrayint Index )

Аргументы:

    Index - индекс элемента в векторе

Возвращает:

    Значение элемента в векторе с заданным индексом.

Подробнее ...

Удаление вектора целых чисел

int sol_DeleteInts( HGREN_INTARRAY hArray )

Эта функция должна быть вызвана после того, как работа с вектором закончилась.

Подробнее ...

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

int sol_FindLanguage( HGREN hEngine, const wchar_t * LanguageName )

Позволяет найти внутренний целочисленный идентификатор языка.

Аргументы:

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

   LanguageName - имя языка, как оно определено в словаре. Обычно это английское название языка (например Russian для русского). Поиск нечуствителен к регистру букв.

Возвращает:

Внутренний ID языка, либо -1, если язык не найден.

Подробное описание этой функции

Присутствует ли в лексиконе раздел языка

int sol_HasLanguage( HGREN hEngine, int LanguageID )

Позволяет определить, есть ли в лексиконе словарные статьи для языка, указанного через его индекс (см. константы и функцию sol_FindLanguage).

Аргументы:

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

LanguageID - целочисленный идентификатор языка.

Возвращает:

1 - языковой раздел присутствует в лексиконе

0 - языковой раздел отсутствует

Подробное описание этой функции

Определение наиболее вероятного языка фразы

int sol_GuessPhraseLanguage( HGREN hEngine, const wchar_t * Phrase )

Аргументы:

    hEngine - дескриптор созданного объекта движка - см. sol_CreateGrammarEngine и sol_CreateSearchEngine.

    Phrase -  предложение на языке, который надо определить.

Возвращает:

Константу, соответствующую наиболее вероятному языку для фразы, см. константы API.

 

Соответствует ли язык фразы заданному

int sol_IsLanguagePhrase( HGREN hEngine, const wchar_t * Phrase, int Language )

Аргументы:

    hEngine - дескриптор созданного объекта движка - см. sol_CreateGrammarEngine и sol_CreateSearchEngine.

    Phrase -  предложение на языке, который надо проверить.

    Language - проверяемый язык, см. константы API.

Возвращает:

1 - язык сооветствует, 0 - не соответствует.

Формообразование

Группа процедур в этом разделе позволяет решить следующую задачу. Пусть есть некое слово, для которого мы хотим определить все его грамматические формы. Если слово есть в лексиконе, то задача решается ранее описанными средствами - например с помощью sol_FindWord. Если же слово отсутствует в словаре, то мы можем попробовать сгенерировать формы слова с помощью парадигм - таблиц формообразования. Ряд парадигм объявляется с указанием маски на базовую форму слова - используется регулярное выражение. При совпадении маски с обрабатываемым словом парадигма активизируется и может сформировать весь набор грамматических форм, причем каждая форма будет сопровождаться набором своих грамматических атрибутов.

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

В некоторых случаях, более характерных для русского языка, для заданного слова подходят несколько масок и, таким образом, альтернативных парадигм. Например, русские существительные СТАРАТЕЛЬ и КАНИТЕЛЬ склоняются различным образом, хотя окончание не позволяет различить эти модели склонения.

Выбор в таком случае остается за пользователем. Программа Ре??актор Словаря, в которой есть механизм автозаполнения форм для создаваемых статей, в таких случаях выводит для пользователя диалоговое окно с предложением выбрать нужную парадигму.

Начало подбора парадигмы для слова

HFLEXIONS sol_FindFlexionHandlers( HGREN hEngine, const wchar_t * WordBasicFormint SearchEntries )

Аргументы:

WordBasicForm - слово, его базовая форма, например - инфинитив для глагола, именительный падеж единственного числа для существительного

SearchEntries - переключатель подбора, 1 если надо дополнительно искать точное совпадение по имени среди словарных статей, 0 если следует ограничиться подбором парадигмы

Возвращает:

Дескриптор набора подобранных парадигм. После завершения работы с набором его надо удалить вызовом sol_DeleteFlexionHandlers.


Сколько словарных статей имеют подходящее имя

int sol_CountEntriesInFlexionHandlers( HGREN hEngine, HFLEXIONS hFlexs )

Аргументы:

hFlexs - набор подобранных парадигм, полученный как результат sol_FindFlexionHandlers.

Возвращает:

Количество словарных статей, чьи имена точно совпадают с исходным словом. Поиск статей выполняется только при задании параметра SearchEntries=1 при вызове sol_FindFlexionHandlers.


Сколько подобрано парадигм

int sol_CountParadigmasInFlexionHandlers( HGREN hEngine, HFLEXIONS hFlexs )

Аргументы:

hFlexs - набор подобранных парадигм, полученный как результат sol_FindFlexionHandlers.

Возвращает:

Количество подходящих парадигм.


Возвращает ID словарной cтатьи, соответствующей слову

int sol_GetEntryInFlexionHandlers( HGREN hEngine, HFLEXIONS hFlexsint Index )

Аргументы:

hFlexs - набор подобранных парадигм, полученный как результат sol_FindFlexionHandlers.

Index - номер статьи в наборе.

Возвращает:

ID словарной статьи, который можно использовать при вызове таких процедур API, как sol_GetNounGender. Общее количество статей в наборе можно получить с помощью функции sol_CountEntriesInFlexionHandlers.

Возвращает имя парадигмы, подходящей для образования форм слова

int sol_GetParadigmaInFlexionHandlers( HGREN hEngineHFLEXIONS hFlexsint Indexwchar_t * ParadigmaName )

Аргументы:

hFlexs - набор подобранных парадигм, полученный как результат sol_FindFlexionHandlers.

Index - порядковый номер парадигмы в наборе, общее число можно получить вызовом sol_CountParadigmasInFlexionHandlers.

ParadigmaName - указатель на строковый буфер, в котором при успешном исполнении процедуры будет возвращено имя парадигмы. Это имя следует указывать при вызове sol_BuildFlexionHandler.

Возвращает:

Внутренний ID парадигмы при успешном выполнении, либо число < 0 при возникновении ошибки.

Генерация таблицы форм слова с помощью выбранной парадигмы или имеющейся словарной статьи

HFLEXIONTABLE sol_BuildFlexionHandler( HGREN hEngine, HFLEXIONS hFlexsconst wchar_t * ParadigmaNameint EntryIndex )

Аргументы:

hFlexs - набор подобранных парадигм, полученный как результат sol_FindFlexionHandlers.

ParadigmaName - имя парадигмы среди подобранных, которую надо использовать для генерации грамматических форм. Может быть NULL, тогда в EntryIndex должен быть указан ID словарной статьи для генерации форм.

Возвращает:

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

Получение словоформы в таблице, удовлетворяющей заданному вектору грамматических признаков

const wchar_t* sol_GetFlexionHandlerWordform( HGREN hEngineHFLEXIONTABLE hFlexconst wchar_t * dims )

Аргументы:

hFlex - дескриптор таблицы грамматических форм, возвращенный функцией sol_BuildFlexionHandler.

dims - строка с грамматическими атрибутами. В данной строке перечисляются пары атрибут:состояние, разделенные пробелом. Для бистабильных координат используется немного другой синтаксис: имя координаты эквивалентно паре с состоянием 1, а конструкция ~координата эквивалентно паре с состоянием 0.

К примеру, строка "падеж:род число:мн" для существительного позволяет получить форму родительного падежа множественного числа.

Другой пример - строка "краткий род:жен" для прилагательного позволяет получить краткую форму женского рода.

Возвращает:

Строку с текстовым представлением искомой грамматической формы, либо NULL если найти не удалось. Прикладная программа не должны пытаться освободить память, на которую указывает возвращаемое значение.

Удаление результатов подбора парадигм

int sol_DeleteFlexionHandlers( HGREN hEngineHFLEXIONS hFlexs )

Аргументы:

hFlexs - дескриптор набора, возвращенный функцией sol_BuildFlexionHandler.


Удаление сгенерированной таблицы словоформ

int sol_DeleteFlexionHandler( HGREN hEngineHFLEXIONTABLE hFlex )

Аргументы:

hFlex - таблица грамматических форм, дескриптор которой возвратила функция sol_BuildFlexionHandler.

Дополнительные материалы

Алгоритмы русской морфологии

Многопоточность в морфологическом анализаторе

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

API морфологического словаря

Морфологический анализатор

Синтаксический анализатор

API лемматизатора

Утилита LEXICON

Примеры использования API

API модулей стеммера

ORM Persistent Dictionary Library

  © Mental Computing 2010
25-Aug-11 изменено