HarmonyOS之AI能力·实体识别

举报
Serendipity·y 发表于 2022/02/17 00:30:11 2022/02/17
【摘要】 一、简介 实体识别能够从自然语言中提取出具有特定意义的实体,并在此基础上完成搜索等一系列相关操作及功能。实体识别覆盖范围大,能够满足日常开发中对实体识别的需求,让应用体验更好。识别准确率高,能够准确地提...

一、简介

  • 实体识别能够从自然语言中提取出具有特定意义的实体,并在此基础上完成搜索等一系列相关操作及功能。
  • 实体识别覆盖范围大,能够满足日常开发中对实体识别的需求,让应用体验更好。识别准确率高,能够准确地提取到实体信息,对应用基于信息的后续服务形成关键影响。
  • 实体识别当前只支持中文语境。
  • 实体识别文本限制在 500 个字符以内,超过字符数限制将返回参数错误;文本需要为 UTF-8 格式,格式错误不报错,但会导致分析结果错误。
  • Engine 支持多用户同时接入,但是不支持同一用户并发调用同一个特性,如同一个特性被同一进程同一时间多次调用,则返回系统忙错误;不同进程调用同一特性,则同一时间只处理一个进程的业务,其他进程进入队列排队。

二、应用场景

  • 双指按压文本弹出卡片:基于文本中所包含的实体内容,如名人、电影、电视剧等。通过双指按压,快速弹出实体对应的卡片介绍信息。让用户可以方便、快捷的获取想知道的信息。
  • 实体信息高亮:将相关的实体信息高亮,并设置快速操作入口。如将文本信息中的电话号码高亮,用户可以直接进行拨号。

三、API 说明

  • 实体识别提供识别文本中具有特定意义实体的能力,包含电影、电视剧、综艺、动漫、单曲、专辑、图书、火车车次、航班号、球队、人名、快递单号、电话号码、url、邮箱、联赛、时间、地点(包含酒店、餐馆、景点、学校、道路、省、市、县、区、镇等)、验证码。
① 主要接口
接口名 描述
void init(Context context, OnResultListener listener, boolean isLoadModel); 初始化NLU服务。在调用NLU等功能接口前需要先调用此接口,在OnResultListener的onResult(T)方法中获取到回调结果后,再调用NLU功能接口。开发者传入listener参数作为回调,用于等待NLU功能接口的调用过程和结果
ResponseResult getEntity(String requestData, int requestType); 采用同步方式识别文本中具有特定意义的实体,包含电影、电视剧、综艺、动漫、单曲、专辑、图书、火车车次、航班号、球队、人名、快递单号、电话号码、url、邮箱、联赛、时间、地点(包含酒店、餐馆、景点、学校、道路、省、市、县、区、镇等)、验证码
ResponseResult getEntity(final String requestData, final int requestType, final OnResultListener listener); 采用异步方式识别文本中具有特定意义的实体,包含电影、电视剧、综艺、动漫、单曲、专辑、图书、火车车次、航班号、球队、人名、快递单号、电话号码、url、邮箱、联赛、时间、地点(包含酒店、餐馆、景点、学校、道路、省、市、县、区、镇等)、验证码
void destroy(Context context); 取消所有NLU任务,销毁NLU引擎服务。调用此方法后,无法再使用NLU服务。如果需要重新使用NLU服务,需要重新调用init(Context, OnResultListener, boolean)}来初始化NLU服务
② 接口输入值说明
  • requestType 表示请求类型,通过 NluRequestType 类定义如下:
枚举的类型 枚举的取值
static final int REQUEST_TYPE_LOCAL = 0 本地请求
  • requestData 的 json 格式如下:
参数名 是否必选 类型 说明
text true String 待分析的文本,UTF-8编码,限制500个字符以内
定义需要分析的实体,默认所有实体均会分析。
分析某个实体,传实体键值,例如:只需要分析时间实体,传“time”。可传多个,表示分析多个实体,以半角逗号“,”分隔,例如:分析时间和地点,传“time,location”。
取值范围:name、time、location、phoneNum、email、url、movie、tv、anime、league、team、trainNo、flightNo、expressNo、idNo、verificationCode、app、carNo
callPkg false String 调用者名称
callType false int 调用者类型:
0:普通应用(默认)
1:快应用
callVersion
callState
false
false
String
int
调用者版本号。
调用者状态:
-1:未知(默认)
0:前台
1:后台
③ 接口返回值说明
  • 返回值 ResponseResult 为 JSONObject 字符串,体现实体识别的结果:
参数名 是否必选 类型 说明
code true int 实体识别的结果码。取值包括:
0:成功
1:系统正在初始化
2:参数错误
3:系统忙
4:系统异常
5:任务超时
6:其它错误
message true String 实体识别的结果描述
entity false 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;// 接口返回码

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 使用 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);

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 调用实体识别的接口,获取分析结果。
    • 采用同步方式进行实体识别:
	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();
	}

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
    • 采用异步方式进行实体识别:
	// 待分析文本
	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();
	        }
	    }
	});

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 销毁 NLU 服务:
	NluClient.getInstance().destroy();

  
 
  • 1

文章来源: blog.csdn.net,作者:Serendipity·y,版权归原作者所有,如需转载,请联系作者。

原文链接:blog.csdn.net/Forever_wj/article/details/118342112

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。