Максимально возможная длина лексемы в грамматическом словаре

int sol_MaxLexemLen( HGREN hEngine )

int sol_MaxLexemLen8( HGREN hEngine )

Аргументы:

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

Возвращает:

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

Примечания

Длина определяет число "широких" символов, то есть представленных типом wchar_t в C, без учета конечного 0. При работате с процедурным API многие функции передают текстовую информацию через указатели на динамическую память, куда будут записаны символы. Определять заранее длину передаваемой строки было бы слишком обременительно, если учесть, что внутренняя организация словарной базы предполагает фиксированную максимальную длину текстовых строк для имен словарных статей, словоформ и так далее. Поэтому самым простым и удобным способом является определение после загрузки словаря максимальной длины лексем с помощью sol_MaxLexemLen и затем использольвание этой константы для создания строковых буферов.

Длина буфера для строк в кодировке utf-8 должна определяться с учетом особенностей представления символов в данной многобайтовой кодировке. Она может быть в несколько раз больше числа широких символов. Кроме того, данная кодировка предполагает переменную длину кодирующих последовательностей, от 1 байта для базовой латиницы, 2 байтов для кириллицы и более для некоторых других наборов символов. Самым удобным способом получить длину буфера для utf8-строк является функция sol_MaxLexemLen8, она возвращает длину буфера "с запасом", достаточным для размещения в нем текстовой строки в самом неблагоприятном случае.

Многие функции API имеют для .NET специальные варианты с суффиксом FX, возвращающие нативную строку, то есть объект класса String, вместо того, чтобы требовать от прикладного кода манипуляций с созданием экземпляра StringBuilder и инициализацией его необходимым значением свойства Capacity.

Пример на C++:

#include "solarix_grammar_engine.h"

HGREN hEngine = sol_CreateGrammarEngineA("./dictionary.xml");
int mlen = sol_MaxLexemLen(hEngine); 
wchar_t *buffer = new wchar_t[mlen+1];
 
// ...

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

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

English version of this page

API layer C++ source code: grammar_engine_api.cpp

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

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