HarmonyOS Sample 之 AI能力之NLU引擎服务 原创 精华
本文正在参与优质创作者激励
目录
HarmonyOS Sample 之 AI能力之NLU引擎服务
1.介绍
NLU(the natural language understanding)自然语言理解引擎服务。
该引擎服务提供了 分词、词性标注、实体识别、意图识别、关键词提取等接口,有同步和异步两种方法。
这一期的内容包括:分词能力、词性标注、关键字提取、实体识别。相关代码都增加了注释说明和调试日志,方便理解和学习。
2.效果展示
3.搭建环境
安装DevEco Studio,详情请参考DevEco Studio下载。
设置DevEco Studio开发环境,DevEco Studio开发环境需要依赖于网络环境,需要连接上网络才能确保工具的正常使用,可以根据如下两种情况来配置开发环境:
如果可以直接访问Internet,只需进行下载HarmonyOS SDK操作。
如果网络不能直接访问Internet,需要通过代理服务器才可以访问,请参考配置开发环境。
下载源码后,使用DevEco Studio 打开项目,模拟器运行即可。
真机运行需要将config.json中的bundleName修改为自己的,如果没有请到AGC上进行配置,参见 使用模拟器进行调试 。
4.项目结构
5.代码讲解
5.1 分词能力(getWordSegment)
分词API的主要功能是将一个汉字序列切分成一个一个单独的词,可自定义分词的粒度。
场景:1.搜索引擎开发场景,搜索结果的相关度排序;2.用户选择用户选择文本的场景,例如双击选择分本时,按照分词进行选中等。
5.1.1 核心类
5.1.2 使用流程
1.NluClient静态类进行初始化
2.获取分词结果
requestData:
JSON格式,参数名包括{text,type,callPkg,callType,callVersion,callState},其中,
text:
待分析的文本,必填项;
type:
分词的粒度,枚举值,0:基本词 ;1:在基本词的基础上,做实体合并;223372036854775807:在type为1的基础上,把实体时间、地点等整体结构合并,出现符号隔开不合并,并把一些常用短语合并,默认为0。
requestType:
枚举值,NluRequestType.REQUEST_TYPE_LOCAL 表示调用本地引擎。
3.解析返回结果
ResponseResult responseResult 返回JSON格式字符串,JSON格式,参数名包括:{code,message,words}
4.释放资源
5.1.3 分词粒度测试
type=0
requestData:{“text”:我明天下午三点要去江宁万达广场看速度与激情,“type”:0}
分词结果:
{“code”:0,“message”:“success”,“words”:
[“我”,“明天”,“下午”,“三点”,“要”,“去”,“江宁万达广场”,“看”,“速度”,“与”,“激情”]}
type=1
requestData:{“text”:我明天下午三点要去江宁万达广场看速度与激情,“type”:1}
分词结果:
{“code”:0,“message”:“success”,“words”:
[“我”,“明天”,“下午”,“三点”,“要”,“去”,“江宁万达广场”,“看”,“速度与激情”]}
type=9223372036854775807
requestData:{“text”:我明天下午三点要去江宁万达广场看速度与激情,“type”:9223372036854775807}
分词结果:
{“code”:0,“message”:“success”,“words”:
[“我”,“明天下午三点”,“要去”,“江宁万达广场”,“看”,“速度与激情”]}
5.2 词性标注(getWordPos)
词性标注提供了getWordPos()接口,该接口可以根据分词粒度,为分词结果中的每个单词标注一个正确的词性。
5.2.1 用法
用法和分词能力类似,获取词性标注的接口是getWordPos(),传入的requestData参数和返回对象ResponseResult都是一样的。
5.2.2 词性标注结果
requestData:
responseResult:
词性:rr:人称代词,t:时间词,v:动词,vf:趋向动词,n:名词,cc:并列连词
tag词性值就不一一列举了,详情查看
https://developer.harmonyos.com/cn/docs/documentation/doc-guides/ai-pos-tagging-guidelines-0000001050732512
5.3 提取关键词(getKeywords)
关键字提取API提供了一个提取关键字的接口,通过该API可以在大量信息中提取出文本想要表达的核心内容,可以是具有特定意义的实体,如:人名,地点,电影等。也可以是一些基础但是在文本中很关键的词汇。通过该API可以对提取的关键字按照在文本中所占权重由高到低排序。排序越靠前,权重越高,对文本的核心内容的提取越准确。
5.3.1 用法
用法和分词能力类似,提取关键词接口是getKeywords(),requestData输入数据的JSON 格式参数有所变化 {body,number,title}
body:
要分析文本,必选,如新闻或email内容或文章;
number:
提取关键词个数,必选;title:
内容标题,可选
5.3.2 提取关键词结果展示
requestData:
responseResult:
5.4 实体识别(getEntity)
实体识别能够从自然语言中提取出具有特定意义的实体,并在此基础上完成搜索等一系列相关操作及功能。
5.4.1 用法
用法和分词能力类似,获取实体识别的接口是getEntity(),requestData输入数据的JSON 格式参数有所变化 {text,module,callPkg,callType,callVersion,callState}
text:
分析文本,必选,如新闻或email内容;
module:
需要分析的实体,可选,默认所有实体均会分析。
分析某个实体,传实体键值,例如:只需要分析时间实体,传“time”。可传多个,表示分析多个实体,以半角逗号“,”分隔,例如:分析时间和地点,传“time,location”。
取值范围:name、time、location、phoneNum、email、url、movie、tv、anime、league、team、trainNo、flightNo、expressNo、idNo、verificationCode、app、carNo
5.4.2 分析实体结果展示
requestData:
responseResult:
6.思考总结
1.上述的AI能力不需要申请权限
2.这些AI能力使用起来还是非常方便的,开箱即用,可以灵活运用到应用开发中。
7.完整代码
附件可以直接下载
很有意思的AI功能
感觉不错啊
高级,不愧是熊猫大佬!!
都已经分词成功了,不接入个导航,不接入个日程安排??