灵云SDK开发手册(C API)  5.2
 全部 结构体 函数 变量 类型定义 枚举 枚举值  
KB能力

以下描述了如何使用灵云KB能力。

1. KB简介

KB 键盘输入识别能力,支持中文,外文,韩文,日文等识别,同时支持多种键盘(T9,Qwerty以及容错键盘)以及多种输入模式(拼音,五笔,笔画等)。

2. 选择模块和能力

灵云目前可以提供本地端能力:
kb.local.* : 本地识别

使用本地的识别能力,需要基础模块hci_kb,以及hci_kb_local_recog模块。

3. 键盘识别

调用识别接口进行识别,识别接口支持设置输入模式,键盘以及返回结果数据大小等,示例代码如下:

//识别
char *gbk = "ad";
unsigned char *utf8;
GBKToUTF8((unsigned char*)gbk,&utf8);
KB_QUERY_INFO queryInfo;
queryInfo.pszQuery = (char*)utf8;
queryInfo.uiSlideInfoItemCount = 0;
queryInfo.psSlideInfoItemList = NULL;
queryInfo.uiSelectedItemCount = 0;
queryInfo.psSelectedItemList = NULL;
errCode = hci_kb_recog(nSessionId,pszRecogConfig,&queryInfo,&result);
free(utf8);
if( errCode != HCI_ERR_NONE )
{
printf( "hci_kb_recog ret:%d\n",errCode);
return;
}
printf( "hci_kb_recog success\n");
PrintKbResult(result);
//提交确认结果
confirm.pszResult = result.psResultItemList[0].pszResult;
hci_kb_confirm(nSessionId,&confirm);
//获取多页结果
while (bReturnAll && result.bMore)
{
errCode = hci_kb_recog(nSessionId,pszRecogConfig,NULL,&result);
if( errCode != HCI_ERR_NONE )
{
printf( "hci_kb_recog ret:%d\n",errCode);
return;
}
printf( "hci_kb_recog success\n");
PrintKbResult(result);
}

4. 用户自定义词条编辑

支持用户自定义词条的添加删除和遍历,调用示例如下:

//提交
udbItem.pUdbItem.pszResult = "beautiful";
HCI_ERR_CODE errCode = hci_kb_udb_commit(nSessionId,"",&udbItem);
if( errCode != HCI_ERR_NONE )
{
printf( "hci_kb_udb_commit ret:%d\n",errCode);
return;
}
printf( "hci_kb_udb_commit success\n");
//遍历
hci_kb_udb_iterate(nSessionId,CallbackKbUdbIterate,NULL);
//删除
errCode = hci_kb_udb_delete(nSessionId,"",&udbItem);
if( errCode != HCI_ERR_NONE )
{
printf( "hci_kb_udb_delete ret:%d\n",errCode);
return;
}
printf( "hci_kb_udb_delete success\n");

目前只有中文和英文支持该接口,中文提交时还可以根据识别结果进行提交,示例如下:

errCode = hci_kb_recog(nSessionId,"inputmode=pinyin",&queryInfo,&result);
//提交
udbItem.pUdbItem = result.psResultItemList[0];
errCode = hci_kb_udb_commit(nSessionId,"inputmode=pinyin",&udbItem);

5. 编码转化

可以通过输入需要转化的模式,将字符串转化为键盘序列。目前日文不支持该接口。 如下:

//输入要求是UTF-8
char *gbk = "你";
unsigned char *utf8;
GBKToUTF8((unsigned char*)gbk,&utf8);
//调用转码接口
errCode = hci_kb_conv(nSessionId,pszConvConfig,(char*)utf8,&result);
free(utf8);
if( errCode != HCI_ERR_NONE )
{
printf( "hci_kb_conv failed ret:%d\n",errCode);
return;
}
printf( "hci_kb_conv success\n");
//打印键盘序列
for (int iTmp = 0;iTmp<result.uiConvItemCount;iTmp++)
{
printf("syllable[%d]:%s\n",iTmp,result.psConvItemList[iTmp].pszSymbols);
}

6. 音节容错

中文识别支持音节容错设置,即可以将容易混淆的音节进行设置,以此提高输入的识别率。 如下:

char* b = "b";char *p = "p"; char *m = "m"; char *n = "n";
KB_FUZZY_SYLLABLE fuzzyData[2] = {
};
errCode = hci_kb_fuzzy_syllable(nSessionId,fuzzyData,2);
if (errCode != HCI_ERR_NONE)
{
printf("hci_kb_fuzzy_syllable failed! errCode:%d\n",errCode);
return errCode;
}
printf("hci_kb_fuzzy_syllable success!\n");

设置时一般会考虑以下情况,一般会在输入法上让用户自行开启或关闭:
"zh", "z"
"ch", "c"
"sh", "s"
"n", "l"
"h", "f"
"r", "l"
"k", "g"
"ang", "an"
"eng", "en"
"ing", "in"
"iang", "ian"
"uang", "uan"

注意:KB_FUZZY_SYLLABLE这个结构体中pszSyllableOne和pszSyllableTwo的含义
比如:

表示将“z”模糊成“zh”
即输入拼音“zongguo”,可以得到“中国”(“zhongguo”)的结果