HarmonyOS之AI能力·分词

Posted Forever_wj

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了HarmonyOS之AI能力·分词相关的知识,希望对你有一定的参考价值。

一、基本概念

  • 随着信息技术的发展,网络中的信息量成几何级增长逐步成为当今社会的主要特征。准确提取文本关键信息,是搜索引擎等领域的技术基础,而分词作为文本信息提取的第一步则尤为重要。
  • 分词作为自然语言处理领域的基础研究,衍生出各类不同的文本处理相关应用。
  • 分词模块提供了文本自动分词的接口,对于一段输入文本,可以自动进行分词,同时提供不同的分词粒度。开发者可以根据需要自定义分词粒度。
  • 分词当前只支持中文语境。
  • 分词文本限制在 500 个字符以内,超过字符数限制将返回参数错误。文本需要为 UTF-8 格式,格式错误不会报错,但分析结果会不准确。
  • Engine 支持多用户同时接入,但是不支持同一用户并发调用同一特性。若同一个特性被同一进程同一时间多次调用,则返回系统忙错误;不同进程调用同一特性,则同一时间只能处理一个进程业务,其他进程进入队列排队。

二、应用场景

  • 分词相关接口可以应用于搜索引擎开发。对于搜索引擎而言,最重要的是如何把全网搜索的结果进行筛选,并按相关程度进行排序。分词的准确与否,常常直接影响到搜索结果的相关度排序。
  • 分词相关接口可以应用于用户选择文本的场景。原始文本只能按字选择,如果使用分词,用户选中文本的时可以按词选择。

三、API 说明

  • 分词 API 的主要功能是将一个汉字序列切分成一个一个单独的词,可自定义分词的粒度。
① 主要接口
接口名功能描述
ResponseResult getWordSegment(String requestData, int requestType)分词,同步接口
ResponseResult getWordSegment(final String requestData, final int requestType, final OnResultListener listener)分词,异步接口
init(Context context, OnResultListener listener, boolean isLoadModel)初始化NLU服务。在调用NLU等功能接口前需要先调用此接口,在OnResultListener的onResult(T)方法中获取到回调结果后,再调用NLU功能接口。开发者传入listener参数作为回调,用于等待NLU功能接口的调用过程和结果
void destroy(Context context)取消所有NLU任务,销毁NLU引擎服务。调用此方法后,无法再使用NLU服务。如果需要重新使用NLU服务,需要重新调用init(Context, OnResultListener, boolean)}来初始化NLU服务
② 接口输入值说明
  • requestType 表示请求类型,通过 NluRequestType 类定义如下:
类型说明
static intREQUEST_TYPE_LOCAL = 0,本地请求
  • requestData 表示输入的文本信息,为 json 格式,如下:
参数名是否必选值类型说明
textString待分析的文本,utf-8,文本长度不超过500个字符
typelong分词的粒度,默认为0。取值包括:
0:基本词,粒度较小。如“我要看速度与激情”,分成“我/要/看/速度/与/激情”。
1:在基本词的基础上,做实体合并。例如:“我要去江宁万达广场看速度与激情”,分成“我/要/去/江宁万达广场/看/速度/与/激情”。
对于没有可合并实体的文本信息,其分词效果与type为0的分词效果相同。例如:“明天下午3点一起看电影”,分成“明天/下午/3点/一起/看/电影”。
9223372036854775807(2的63次方减1):在type为1的基础上,把实体时间、地点等整体结构合并,出现符号隔开不合并,并把一些常用短语合并。如“形容词+的”,“单字动词+单字名词”等,简化句子成分。
例如“明天下午三点到五点我在江宁瑞都金逸影城看电影”,分成“明天下午三点/到/五点/我/在/江宁瑞都金逸影城/看/电影”。
callPkgString调用者名称
callTypeint调用者类型:
0:普通应用(默认)
1:快应用
callVersionString
callStateint调用者状态:
-1:未知(默认)
0:前台
1:后台
  • 目前 NLU 支持的实体类别:
实体类别备注
电影依赖字典,要求真实用例,勿做修改
电视剧依赖字典,要求真实用例,勿做修改
综艺依赖字典,要求真实用例,勿做修改
动漫依赖字典,要求真实用例,勿做修改
火车车次要求真实用例,勿做修改
航班号要求真实用例,勿做修改
球队依赖字典,支持NBA、CBA、英超、西甲、德甲、意甲、法甲、中超的球队识别,要求真实用例,勿做修改
人名要求真实用例,勿做修改
快递单号要求真实用例,勿做修改
电话号码要求真实用例,勿做修改
url要求真实用例,勿做修改
邮箱要求真实用例,勿做修改
联赛NBA、CBA、英超、西甲、德甲、意甲、法甲、中超,要求真实用例,勿做修改
时间要求真实用例,勿做修改
地点包含酒店、餐馆、景点、学校、道路、省、市、县、区、镇等,部分依赖字典
验证码用例真实,勿做修改
③ 接口返回值说明
  • 返回值 ResponseResult 中 responseResult 为 Json 字符串,体现分词的结果:
参数名是否必选值类型说明
codeint结果码。取值包括:
0:成功
1:系统正在初始化
2:参数错误
3:系统忙
4:系统异常
5:任务超时
6:其它错误
messageString错误信息
wordsJSONArray切分出的词数组,数组里每一项的类型均为JSONObject

四、开发流程

  • 在使用分词 API 时,将实现分词的相关类添加至工程:
	import ohos.ai.nlu.NluRequestType;
	import ohos.ai.nlu.NluClient;
	import ohos.ai.nlu.OnResultListener;
	import ohos.ai.nlu.ResponseResult;
  • 使用 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\\":\\"今天天气不错,我们一起看电影吧\\\\n\\",\\"type\\":0}";
	ResponseResult responseResult = NluClient.getInstance().getWordSegment(requestData, NluRequestType.REQUEST_TYPE_LOCAL);
    • 异步:
	NluClient.getInstance().getWordSegment(requestData,
	            NluRequestType.REQUEST_TYPE_LOCAL, new OnResultListener<ResponseResult>() {
	                @Override
	                public void onResult(ResponseResult result) {
	                   // onResult deal
	                }
	            });
  • 解绑服务:
	NluClient.getInstance().destroy(context);

以上是关于HarmonyOS之AI能力·分词的主要内容,如果未能解决你的问题,请参考以下文章

HarmonyOS之AI能力·词性标注

HarmonyOS Sample 之 AI能力应用之 报菜名儿

HarmonyOS之AI能力·语音播报

HarmonyOS之AI能力·语音识别技术

HarmonyOS之AI能力·通用文字识别技术

HarmonyOS之AI能力·实体识别