NLP语义理解

功能说明:iFLYHOME OS 提供将语音转化转化为计算机可读的结构化数据。参考:产品白皮书
使用说明:集成方在申请开放该能力后,在需要使用时激活或者申请NLP语义理解能力,当触发语音识别后,会将语义理解结果回调给集成方。语义解析参考:语义协议

改动:ApiLevel 达到1时,具备开放流式识别文本能力(需要申请权限)

在使用时也支持一些自定义的配置,具体见接口或者协议说明

安卓原生

通过如下方法获取能力接口

XiriOPManager.getInstance().getSemanticMgr();

主要此处返回值可能为Null, 原因: SDK未初始化

api如下:

public interface ISemantic {
    /**
     * 设置参数,激活后调用有效
     * @param sceneId 场景id
     *
     */
    void updateParams(String sceneId);
    /**
     * 激活开放语义
     * 结合feedbackResult使用,实现是拦截还是监听
     * 语义服务常量参考 {@link ServiceConstant}
     * @param service 多个语义,可以通过`分割, 如:joke`calc
     * @param listener 回调接口  
     */
    void active(String service, ISemanticListener listener);

    /**
     * 关闭开放语义
     */
    void invalid();

    /**
     * 反馈处理结果
     * @param token listener 回调结果中token
     * @param processed 是否处理,true表示已处理(拦截),false未处理(iFLYHOME OS继续处理后续逻辑)
     */
    void feedbackResult(String token, boolean processed);

}

示例:

 // 笑话技能
String mCurrSelcetService = ServiceConstant.SERVICE_JOKE;
ISemantic semantic = XiriOPManager.getInstance().getSemanticMgr();
if (semantic != null) {
   // 激活开放语义
    semantic.active(mCurrSelcetService, new ISemanticListener() {
        @Override
        public void onSemantic(SemanticEntity entity) {
            // TODO 处理 entity
            // 最终反馈给电视助手,第二个参数true表示已处理,false未处理(电视助手继续处理后续逻辑)
            semantic.feedbackResult(entity.getToken(), true/false);
        }
    });
}

// 关闭开放语义
if (semantic != null) {
   semantic.invalid();
}

应用内嵌Web

  1. 注册识别语义结果监听

     native_call_H5('h5_send_nlp_result',function(data,responseCallback){
          //客户单发来的文本消息通过该接口回调
     })
    

    ```

  2. web端申请语点的识别语义能力(需要携带当前申请的语义service列表)

     H5_call_native('native_open_nlp',{"appid":"xxxxx","token":"xxx","services":"weather`stock`video`baike"},function(response){})
    
  3. 切换当前识别的场景(针对有需要切换场景的使用调用)

     H5_call_native('native_update_nlp',{"appid":"","token":"","params":"当前场景id"},function(response){})
    
  4. 收到语义结果结果后,web端需要回传语点通知是否处理当前语义(通过responseCallback回传)

     native_call_H5('h5_send_nlp_result',function(data,responseCallback){
         var service = data.service;
         var token = data.token;
         var semantic = data.semantic;
         var linkId = data.linkId
         if (responseCallback) {
             resObj.code=200;
             resObj.msg='success';
             var result = {"asrToken": data.token,"handled": handleResult};
             resObj.data=result;
             responseCallback(JSON.stringify(resObj));
       }
     })
    
  5. 关闭当前开放识别语义能力(在页面关闭的时候,或者不使用的时候关闭)

         H5_call_native('native_close_nlp', "appid":"xxx","token":"xxxxx"}
         ,function(response){})
    

应用外Web

  1. 注册回调数据监听,创建listener对象

     function callback(data) {
         //对应数据格式
         var data = JSON.stringify(data);
     }
     var listener = new Xiri.Listener(callback);
    
  2. 开启轮询数据获取

     listener.getCmd("open_xiri");
    
  3. 申请能力

     listener.openFeatureFunc("{\"name\":\"native_open_nlp\",\"params\":\"{\\\"appid\\\": \\\"xxx\\\",\\\"token\\\": \\\"11111\\\" ,\\\"services\\\": \\\"video\\\"}\"}");
    
  4. 切换当前识别的场景(针对有需要切换场景的使用者调用)

     listener.openFeatureFunc("{\"name\":\"native_update_nlp\",\"params\":\"{\\\"appid\\\": \\\"xxx\\\",\\\"token\\\": \\\"11111\\\",\\\"params\\\": \\\"当前场景ID\\\"}\"}");
    
  5. 收到回调数据结果

    回调数据data为Json格式

     var jsData = data.data;
     var name = jsData.name;
     var params = JSON.parse(jsData.params);
     //语义服务名称
     var service = params.service;
     //其他字段参照协议
    
  6. 关闭能力

     listener.openFeatureFunc("{\"name\":\"native_close_nlp\",\"params\":\"{\\\"appid\\\": \\\"xxx\\\",\\\"token\\\": \\\"11111\\\"}\"}");
    

results matching ""

    No results matching ""