C/C++:
HGREN_STR sol_TokenizeW( HGREN hEngine, const wchar_t * Sentence, int LanguageID )
HGREN_STR sol_TokenizeA( HGREN hEngine, const char * Sentence, int LanguageID )
HGREN_STR sol_Tokenize8( HGREN hEngine, const char * SentenceUtf8, int LanguageID )
C#:
IntPtr sol_TokenizeW( IntPtr hEngine, string Sentence, int LanguageID )
string[] sol_TokenizeFX( IntPtr hEngine, string Sentence, int LanguageID )
Delphi:
function sol_TokenizeW( hEngine: PInteger; Sentence: PWideChar, LanguageID: Integer ): PInteger;
function sol_TokenizeA( hEngine: PInteger; Sentence: PAnsiChar, LanguageID: Integer ): PInteger;
function sol_Tokenize8( hEngine: PInteger; SentenceUtf8: PAnsiChar, LanguageID: Integer ): PInteger;
PHP:
sol_Tokenize8( $hEngine, $Sentence, $LanguageID )
Аргументы:
hEngine - дескриптор экземпляра грамматического словаря.
Sentence - указатель на строку, из которой будет извлечен список лексем. Для функций с суффиксом W это строка из широких символов, для A - из однобайтовых в текущей кодировки, для 8 - в кодировке utf-8.
LanguageID - ID языка, правила которого нужно применять для токенизации, либо -1 для автоматического определения языка.
Возвращает:
Дескриптор для вектора строк, соответствующих отдельным словам исходного предложения.
Процедура выполняет разбивку текста на структурные элементы - лексемы. При этом алгоритм разбивки будет использовать набор правил для языка, чтобы корректно выделить слова и цепочки символов, содержащие в себе символы-разделители:
А.С.Пушкин и т.д.
Правила учитывают самые разные случаи, включая запись Ф.И.О. и даты в формате, обычно применяемом носителями языка.
Процедура возвращает дескриптор для вектора строк. После окончания работы с ним следует вызвать процедуру sol_DeleteString для освобождения занимаемой им памяти. Для работы с вектором строк следует использовать процедуры sol_CountStrings и sol_GetString[W,A,8].
Если при вызове процедуры не указать ID языка, то будет выполнен автоматический выбор языка на основе статистических критериев для заданного текста. Это потребует дополнительных вычислений и соответствующих накладных расходов, поэтому следует указывать язык текста, если это возможно.
Процедура sol_Tokenize[W,A,8] может также выполнять сегментацию текста для языков, в которых нет разбивки на слова с помощью обычных для европейских языков пробелов и пунктуаторов.
Функция sol_TokenizeFX на самом деле является удобной оберткой над sol_TokenizeW для платформы .NET. Вместо низкоуровневых манипуляций с дескрипторами списков строк она позволяет сразу получить массив строк в "родном" для данной платформы виде. В большинстве случаев удобно использовать именно её.
См. подробное описание алгоритмов токенизации.
C++:
#include "solarix_grammar_engine.h"
...
HGREN hEngine = sol_CreateGrammarEngineW(L"..\\..\\bin-windows\\dictionary.xml");
...
HGREN_STR hStr = sol_TokenizeW( hEngine, L"А.С.Пушкин и другие поэты", RUSSIAN_LANGUAGE );
int nstr = sol_CountStrings( hStr );
wchar_t ** str_list = new wchar_t*[nstr];
for( int i=0; i<nstr; i++ )
str_list[i] = new wchar_t[ MAX_LEN+1 ];
sol_GetStrings( hStr, str_list );
for( int i=0; i<nstr; i++ )
{
// ...
}
printf( "}\n\n" );
sol_DeleteStrings( hStr );
for( int i=0; i<nstr; i++ )
delete[] str_list[i];
delete[] str_list;
// ...
C#:
string phrase = "Мама мыла раму";
string[] words = GrammarEngine.sol_TokenizeFX( hEngine, phrase, GrammarEngineAPI.RUSSIAN_LANGUAGE );
...
PHP:
$phrase = "Мама мыла раму";
$hTokens = sol_Tokenize8( $hEngine, $phrase, $RUSSIAN_LANGUAGE );
$token_count = sol_CountStrings( hTokens );
for( $i=0; $i<$token_count; $i++ )
{
$token = sol_GetString8( hTokens, $i );
...
}
Приобретение SDK грамматического словаря
API layer C++ source code: grammar_engine_api.cpp
Вернуться к списку функций API
© Козиев Илья 2019
![]() |
|
изменено 23-Oct-11 |