Токенизация текста, выделение отдельных слов

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 );
  ...
 }

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

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

English version of this page

API layer C++ source code: grammar_engine_api.cpp

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

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