C/C++ сигнатура:
int sol_CountNGrams( HGREN hEngine, int Type, int Order, unsigned int * Hi, unsigned int * Lo )
C# сигнатура:
int sol_CountNGrams( IntPtr hEngine, int Type, int Order, out UInt32 Hi, out UInt32 Lo )
UInt64 sol_CountNGramsFX( IntPtr hEngine, int Type, int Order )
Delphi сигнатура:
function sol_CountNGrams( hEngine: PInteger; Flags: Integer; Order: Integer; Hi: PInteger; Lo: PInteger ): Integer;
function sol_CountNGrams64( hEngine: PInteger; Flags: Integer; Order: Integer ): Int64;
Аргументы:
hEngine - дескриптор созданного вызовом sol_CreateGrammarEngine экземпляра грамматического словаря.
Type - 0 для буквальных, 1 для лемматизированных.
Order - порядок N-граммы, от 1 для одиночных слов до 5 для пентаграмм.
Lo - указатель на младшие 32 бита количества записей.
Hi - указатель на старшие 32 бита количества записей.
Возвращает:
1 - данные возвращены через Lo и Hi, 0 - была ошибка.
Так как суммарное число записей в базе данных может превышать допустимый для знакового 32-битного целого предел, то функция возвращает 64-битное целое значение двумя 32-битными порциями.
В зависимости от конфигурации грамматического словаря и параметров загрузки в файле настроек, база данных N-грамм может располагаться в реляционной СУБД общего назначения типа MySQL или в NoSQL хранилище. API предоставляет единый механизм работы с N-граммами, скрывая от прикладного кода детали реализации back-end storage.
Если база N-грамм размещается в реляционной базе данных, то выполнение данной функции может для некоторых типов СУБД потребовать серьезного времени из-за большого объема данных. Например, для FireBird выполнение SELECT count(*) может привести к тяжелому сканированию таблиц NGRAM1 ... NGRAM5 и вызвать чистку мусора.
Для .NET платформы добавлена функция sol_CountNGramsFX, которая возвращает 64-битное целое и избавляет вызывающий код от необходимости компоновать это значение из двух 32-битных. Аналогично для Delphi введена функция sol_CountNGrams64.
Для получения частоты конкретной N-граммы следует использовать функции sol_Seek1Grams, sol_Seek2Grams, sol_Seek3Grams, sol_Seek4Grams, sol_Seek5Grams.
Пример на C++:
#include "solarix_grammar_engine.h"
unsigned int Hi=0, Lo=0;
int rc = sol_CountNGrams(hEngine,0,3,&Hi,&Lo);
__int64 Freq = (__int64(Hi)<<32) | (unsigned __int64)Lo;
// ...
Пример на C#:
IntPtr hEngine = GrammarEngine.sol_CreateGrammarEngineW("..\\..\\..\\..\\..\\..\\..\\bin-windows\\dictionary.xml");
UInt64 ngram_count1 = GrammarEngine.sol_CountNGramsFX( hEngine, 1, 1 );
UInt64 ngram_count2 = GrammarEngine.sol_CountNGramsFX( hEngine, 1, 2 );
UInt64 ngram_count3 = GrammarEngine.sol_CountNGramsFX( hEngine, 1, 3 );
UInt64 ngram_count4 = GrammarEngine.sol_CountNGramsFX( hEngine, 1, 4 );
UInt64 ngram_count5 = GrammarEngine.sol_CountNGramsFX( hEngine, 1, 5 );
Пример на Delphi:
uses SysUtils, Windows,
_sg_api in '..\..\..\..\..\include\lem\solarix\pro\_sg_api.pas',
GrammarEngineApi in '..\..\..\..\..\include\lem\solarix\GrammarEngineApi.pas';
var hEngine: PInteger;
var ngram_count1, ngram_count2, ngram_count3, ngram_count4, ngram_count5: Int64;
begin
hEngine := sol_CreateGrammarEngineA( '..\..\..\..\..\bin-windows\dictionary.xml' );
ngram_count1 := sol_CountNGrams64( hEngine, 1, 1 );
ngram_count2 := sol_CountNGrams64( hEngine, 1, 2 );
ngram_count3 := sol_CountNGrams64( hEngine, 1, 3 );
ngram_count4 := sol_CountNGrams64( hEngine, 1, 4 );
ngram_count5 := sol_CountNGrams64( hEngine, 1, 5 );
{ ... }
sol_DeleteGrammarEngine(hEngine);
end.Приобретение SDK грамматического словаря
API layer C++ source code: grammar_engine_api.cpp
Вернуться к списку функций API
© Elijah Koziev 2010
Поисковая система
SDK Поисковой системы
Экранный переводчик
|
|
изменено 27-Mar-11 | ||||||||||||||||||||||||||||||||||||||