- 注册时间
- 2017-4-20
- 最后登录
- 2017-8-23
- 阅读权限
- 150
- 积分
- 3101
- 精华
- 0
- 帖子
- 15
  
|
以windows c++版本为例,说明NLU调用客服云实现多轮会话的过程。注意以下红色字体部分。#include "hci_nlu.h"
#include "common/FileReader.h"
#include "common/CommonTool.h"
#include <string>
using std::string;
//函数声明
void PrintNluResult(NLU_RECOG_RESULT &nlu_result);
bool Recog(const string &cap_key, const string &recog_config, const string &text_file);
//主功能函数
void FunctionFunc(const string &cap_key,const string &data_path,const string &test_data_path)
{
HCI_ERR_CODE err_code = HCI_ERR_NONE;
//初始化NLU模块
string init_config = "initCapkeys=";
init_config += cap_key;
init_config += ",dataPath=";
init_config += data_path;
err_code = hci_nlu_init(init_config.c_str());
if (err_code != HCI_ERR_NONE)
{
printf("hci_nlu_init return (%d:%s) \n",err_code,hci_get_error_info(err_code));
return;
}
printf( "hci_nlu_init success\n" );
//识别
string text_file = test_data_path + "/nlu.txt";
string recog_config="intention=baike,robotid=37042c188c5b4885de37e9b2d7c74eb1,channelid=2,resver=2";//云端必须传intention,如:intention=weather
Recog(cap_key, recog_config, text_file);
//NLU 反初始化
hci_nlu_release();
printf("hci_nlu_release\n");
}
//NLU语意识别
bool Recog(const string &cap_key, const string &recog_config, const string &text_file)
{
HCI_ERR_CODE err_code = HCI_ERR_NONE;
//载入NLU文本
HciExampleComon::FileReader nlu_text;
HciExampleComon::FileReader nlu_text_next;
if (nlu_text.Load(text_file.c_str(),1) == false)
{
printf( "Open input text file %s error!\n" ,text_file.c_str() );
return false;
}
if (nlu_text_next.Load("./next.txt",1) == false)
{
printf( "Open input text file %s error!\n" ,text_file.c_str() );
return false;
}
//去掉3个字节的bom头
char *text = NULL;
if (nlu_text.buff_[0]==0xEF && nlu_text.buff_[1]==0xBB && nlu_text.buff_[2]==0xBF)
{
text = (char *)nlu_text.buff_ + 3;
}
else
{
text = (char *)nlu_text.buff_;
}
char *text_next = NULL;
if (nlu_text_next.buff_[0]==0xEF && nlu_text_next.buff_[1]==0xBB && nlu_text_next.buff_[2]==0xBF)
{
text_next = (char *)nlu_text_next.buff_ + 3;
}
else
{
text_next = (char *)nlu_text_next.buff_;
}
// 启动 NLU Session
int nSessionId = -1;
string strSessionConfig = "capkey=" + cap_key;
//此处也可以传入其他配置,参见开发手册,此处其他配置采用默认值
printf( "hci_nlu_session_start config[ %s ]\n",strSessionConfig.c_str() );
err_code = hci_nlu_session_start( strSessionConfig.c_str(), &nSessionId );
if( err_code != HCI_ERR_NONE )
{
printf( "hci_nlu_session_start return (%d:%s)\n", err_code ,hci_get_error_info(err_code));
return false;
}
printf( "hci_nlu_session_start success\n" );
//识别
NLU_RECOG_RESULT nlu_result;
NLU_RECOG_RESULT nlu_result_next;
printf( "hci_nlu_recog config[ %s ]\n", recog_config.c_str() );
err_code = hci_nlu_recog( nSessionId, text, recog_config.c_str(), &nlu_result );
if (err_code == HCI_ERR_NONE)
{
printf( "\nhci_nlu_recog success\n" );
// 输出识别结果
PrintNluResult( nlu_result );
// 释放识别结果
hci_nlu_free_recog_result( &nlu_result);
}
else
{
printf( "hci_nlu_recog return (%d:%s)\n", err_code ,hci_get_error_info(err_code));
}
err_code = hci_nlu_recog( nSessionId, text_next, recog_config.c_str(), &nlu_result_next );
if (err_code == HCI_ERR_NONE)
{
printf( "\nhci_nlu_recog success\n" );
// 输出识别结果
PrintNluResult( nlu_result_next );
// 释放识别结果
hci_nlu_free_recog_result( &nlu_result_next);
}
else
{
printf( "hci_nlu_recog return (%d:%s)\n", err_code ,hci_get_error_info(err_code));
}
// 终止 NLU Session
hci_nlu_session_stop( nSessionId );
printf( "hci_nlu_session_stop\n" );
return true;
}
//输出NLU翻译结果
void PrintNluResult(NLU_RECOG_RESULT &nlu_result)
{
HciExampleComon::SetSpecialConsoleTextAttribute();
printf( "\n NluResult result:\n");
if (nlu_result.pNluRecogResultCount != 0)
{
//打印本地识别结果
for (int i=0;i<nlu_result.pNluRecogResultCount;i++)
{
HciExampleComon: rintUtf8String(nlu_result.pNluRecogResultList.pszResult);
}
}
HciExampleComon::SetOriginalConsoleTextAttribute();
}
|
|