实体识别概述
实体识别能够从自然语言中提取出具有特定意义的实体,并在此基础上完成搜索等一系列相关操作及功能。
实体识别覆盖范围大,能够满足日常开发中对实体识别的需求,让应用体验更好。识别准确率高,能够准确地提取到实体信息,对应用基于信息的后续服务形成关键影响。
约束限制
当前只支持中文语境。
实体识别文本限制在500个字符以内,超过字符数限制将返回参数错误;文本需要为UTF-8格式,格式错误不报错,但会导致分析结果错误。
Engine支持多用户同时接入,但是不支持同一用户并发调用同一个特性,如同一个特性被同一进程同一时间多次调用,则返回系统忙错误;不同进程调用同一特性,则同一时间只处理一个进程的业务,其他进程进入队列排队。
实体识别开发
场景介绍
双指按压文本弹出卡片
基于文本中所包含的实体内容,如名人、电影、电视剧等。通过双指按压,快速弹出实体对应的卡片介绍信息。让用户可以方便、快捷的获取想知道的信息。
实体信息高亮
将相关的实体信息高亮,并设置快速操作入口。如将文本信息中的电话号码高亮,用户可以直接进行拨号。
接口说明
实体识别提供识别文本中具有特定意义实体的能力,包含电影、电视剧、综艺、动漫、单曲、专辑、图书、火车车次、航班号、球队、人名、快递单号、电话号码、url、邮箱、联赛、时间、地点(包含酒店、餐馆、景点、学校、道路、省、市、县、区、镇等)、验证码。
主要接口
接口输入值说明
requestType表示请求类型,通过NluRequestType类定义如下:
枚举的类型 |
枚举的取值 |
static final int |
REQUEST_TYPE_LOCAL = 0 本地请求 |
requestData的JSON格式如下:
接口返回值说明
返回值ResponseResult为JSONObject字符串,体现实体识别的结果:
开发步骤
在使用实体识别相关接口时,需要将实体识别的相关类添加到工程。
import ohos.ai.nlu.ResponseResult; // 接口返回的结果类 import ohos.ai.nlu.NluClient; // 接口服务类 import ohos.ai.nlu.NluRequestType; // 接口调用时传入的类型 import ohos.ai.nlu.OnResultListener; // 异步函数,执行成功的回调结果类 import ohos.ai.nlu.util.NluError;// 接口返回码
使用NluClient静态类进行初始化,通过异步方式获取服务的连接。
context:应用上下文信息,应为ohos.aafwk.ability.Ability或ohos.aafwk.ability.AbilitySlice的实例或子类实例。
listener:初始化结果的回调,可以传null。
isLoadModel:是否加载模型,如果传true,则在初始化时加载模型;如果传false,则在初始化时不加载模型。
NluClient.getInstance().init(context, new OnResultListener<Integer>(){ @Override public void onResult(Integer result){ // 初始化成功回调,在服务初始化成功调用该函数 } }, true);
调用实体识别的接口,获取分析结果。
采用同步方式进行实体识别:
String requestData= "{text:'我要看电影魔兽',module:'movie'}"; // module为可选参数,如果不设置该参数,则默认分析所有实体 ResponseResult respResult = NluClient.getInstance().getEntity(requestData, NluRequestType.REQUEST_TYPE_LOCAL); if (null != respResult && NluError.SUCCESS_RESULT == respResult.getCode()) { // 获取接口返回结果,参考接口文档返回使用 String result = respResult.getResponseResult(); }
采用异步方式进行实体识别:
// 待分析文本 String requestData= "{text:'我要看电影魔兽',module:'movie'}"; // module为可选参数,如果不设置该参数,则默认分析所有实体 // 调用接口 NluClient.getInstance().getEntity(requestData, NluRequestType.REQUEST_TYPE_LOCAL, new OnResultListener < ResponseResult > () { @Override public void onResult(ResponseResult respResult) { // 异步返回 if (null != respResult && NluError.SUCCESS_RESULT == respResult.getCode()) { // 获取接口返回结果,参考接口文档返回使用 String result = respResult.getResponseResult(); } } });
销毁NLU服务。
NluClient.getInstance().destroy();