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

C/C++:

int sol_LoadDictionaryW( HGREN hEngine, const wchar_t * Filename )

int sol_LoadDictionaryA( HGREN hEngine, const char * Filename )

int sol_LoadDictionary8( HGREN hEngine, const char * FilenameUtf8 )

int sol_LoadDictionaryExW( HGREN hEngine, const wchar_t * Filename, int InstanceFlags )

int sol_LoadDictionaryExA( HGREN hEngine, const char * Filename, int InstanceFlags )

int sol_LoadDictionaryEx8( HGREN hEngine, const char * FilenameUtf8, int InstanceFlags )

C#:

int sol_LoadDictionaryW( HGREN hEngine, string Filename )

int sol_LoadDictionaryExW( HGREN hEngine, string Filename, int InstanceFlags )

Delphi:

function sol_LoadDictionaryW( hEngine: PInteger; Filename: PWideChar ): Integer;

function sol_LoadDictionaryA( hEngine: PInteger; Filename: PAnsiChar ): Integer;

function sol_LoadDictionary8( hEngine: PInteger; Filename: PAnsiChar ): Integer;

function sol_LoadDictionaryExW( hEngine: PInteger; Filename: PWideChar; InstanceFlags: Integer ): Integer;

function sol_LoadDictionaryExA( hEngine: PInteger; Filename: PAnsiChar; InstanceFlags: Integer ): Integer;

function sol_LoadDictionaryEx8( hEngine: PInteger; Filename: PAnsiChar; InstanceFlags: Integer ): Integer;

PHP:

sol_LoadDictionaryEx8( $hEngine, $FilenameUtf8, $InstanceFlags )

Аргументы:

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

Filename - путь к файлу описания словаря, обычно это dictionary.xml, создаваемый при сборке словаря. Этот файл содержит перечень имен бинарных файлов базы данных словаря.

InstanceFlags - комбимбинация флагов, управляющих загрузкой. Значение 0 обеспечивает режим по умолчанию, соответствующий функциям sol_CreateGrammarEngine[A,W,8]. Константа SOL_GREN_LAZY_LEXICON изменяет режим работы со словарными статьями, они будут подгружаться с диска по мере необходимости.

Возвращает:

0 - Cловарь не загружен из-за ошибки. Текст описания ошибки можно попробовать узнать вызовом sol_GetError. Среди самых распространенных причин ошибок - некорректно заданный путь или версия словаря несовместима с версией движка.

1 - Словарь успешно загружен.

2 - Словарь уже был загружен, новая загрузка не выполнена. Следует использовать sol_UnloadDictionary для выгрузки.

Примечания

Функции отличаются текстовой кодировкой, в которой задан путь к словарю. Функция с суффиксом A принимает строку в однобайтовой кодировке текущей локали, с суффиксом W принимает строку широких символов, с суффиксом 8 - строку в кодировке utf-8. Последний вариант наиболее удобен для использования в Linux.

Грамматический словарь загружается в оперативную память, занимая достаточно много ресурсов. Кроме того, загрузка словаря - достаточно длительный процесс, обычно это несколько секунд.

Во многих случаях можно совмещать создание грамматического движка и загрузку словаря в рамках единственного вызова функции sol_CreateGrammarEngine.

Из-за особенностей реализации на Windows гарантируется загрузка словаря только с локальных дисков. Попытка загрузки словаря, находящегося на сетевом ресурсе, скорее всего приведет к ошибке.

Функции потокобезопасны, но итоговый результат работы может быть непредсказуем, если в разных потоках загружаются разные словари в один и тот же экземпляр.

Файлы словаря могут быть залочены после начала загрузки до момента выгрузки (удаления из памяти).

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

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

#include "solarix_grammar_engine.h"

...

HGREN hEngine = sol_CreateGrammarEngine(NULL);

//...

int rc = sol_LoadDictionaryW( L"..\\..\\bin-windows\\dictionary.xml" );
if( rc!=1 )
 {
  int err_len = sol_GetErrorLen(hEngine);
  wchar_t *buf = new wchar_t[err_len+1];
  sol_GetError( hEngine, buf, err_len+1 );

  // ...
  
  sol_ClearError(hEngine);
  delete[] buf;
 }

Пример на C#:

IntPtr gren = SolarixGrammarEngineNET.GrammarEngine.sol_CreateGrammarEngineW("");

// ...

int loading_ok = SolarixGrammarEngineNET.GrammarEngine.sol_LoadDictionaryW( gren, "dictionary.xml" );
if( loading_ok!=1 )
 {
  DictionaryLoadError();
 }

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

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

API layer C++ source code: grammar_engine_api.cpp

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

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