鸿蒙HarmonyOS开发实战—AI功能开发(词性标注)

本文介绍了词性标注在信息技术中的重要性,特别是在搜索引擎和语义分析中的应用。详细阐述了词性标注的工作原理、接口说明、粒度控制以及在HarmonyOS中的开发步骤,同时提到了与之相关的纯血版鸿蒙开发资料链接。
摘要由CSDN通过智能技术生成

词性标注概述

随着信息技术的发展,网络中的信息量成几何级增长逐步成为当今社会的主要特征。准确提取文本关键信息,是搜索引擎等领域的技术基础,而分词作为文本信息提取的第一步则尤为重要。

分词作为自然语言处理领域的基础研究,衍生出各类不同的文本处理相关应用。

词性标注包括分词以及为分词结果中的每个单词标注一个正确的词性(标注每个词是名词、动词、形容词或其他词性)。开发者可自定义分词的粒度。

运作机制

词性标注提供了文本自动分词并给出词性的接口。对于输入的一段文本,自动通过词性标注接口对其进行分词,并为分词结果中的每个单词标注一个正确的词性。词性标注提供不同的分词粒度,开发者可以根据需要自定义分词粒度。

约束与限制
  • 当前只支持中文语境。
  • 词性标注文本限制在500个字符以内,超过字数将返回参数错误,文本需要为UTF-8格式,格式错误不报错,但会导致分析结果错误。
  • Engine支持多用户同时接入,但是不支持同一用户并发调用同一特性。若同一特性被同一进程同一时间多次调用,则返回系统忙错误;不同进程调用同一特性,则同一时间只能处理一个进程业务,其他进程进入队列排队。

词性标注开发

场景介绍
  • 应用于搜索引擎开发。对于搜索引擎来说,在上百亿的网页中找到所有结果没有意义,重要的是把最相关的结果呈现在最前面,也称为相关度排序。分词的准确与否,会直接影响到对搜索结果的相关度排序。
  • 应用于语义分析相关软件的开发。在语义分析中,通过分词理解文本所要表达的正确含义,并通过词性标注得到词性,准确地判断出某个词是名词、动词、形容词等,使得语义分析更方便扩展。
接口说明

词性标注提供了getWordPos()接口,该接口可以根据分词粒度,为分词结果中的每个单词标注一个正确的词性。

主要接口

接口名

描述

ResponseResult getWordPos(String requestData, int requestType)

采用同步方式进行词性标注。

ResponseResult getWordPos(final String requestData, final int requestType, final OnResultListener<ResponseResult> listener)

采用异步方式进行词性标注。

void init(Context context, OnResultListener<Integer> listener, boolean isLoadModel)

初始化NLU服务。在调用NLU等功能接口前需要先调用此接口,在OnResultListener的onResult(T)方法中获取到回调结果后,再调用NLU功能接口。开发者传入listener参数作为回调,用于等待NLU功能接口的调用过程和结果。

void destroy(Context context)

取消所有NLU任务,销毁NLU引擎服务。调用此方法后,无法再使用NLU服务。如果需要重新使用NLU服务,需要重新调用init(Context, OnResultListener<Integer>, boolean)}来初始化NLU服务。

接口输入值说明

类型

说明

static int

REQUEST_TYPE_LOCAL = 0 本地请求

参数名

是否必选

类型

说明

text

ture

String

待分析的文本,UTF-8编码,限制500个字符以内。

type

false

long

分词的粒度,默认为0。 0:基本词,粒度较小。例如:“我要看速度与激情”,分成“我/要/看/速度/与/激情”。1:在基本词的基础上,做实体合并。例如:“我要去江宁万达广场看速度与激情”分成“我/要/去/江宁万达广场/看/速度/与/激情”。 对于没有可合并实体的文本信息,其分词效果与type为0的分词效果相同。例如:“明天下午3点一起看电影”分成“明天/下午/3点/一起/看/电影”。 9223372036854775807(2的63次方减1):在type为1的基础上,把实体时间、地点等整体结构合并(出现符号隔开则不合并),并把一些常用短语合并。 例如:“形容词+的”,“单字动词+单字名词”等,简化句子成分。根据以上原则,“明天下午三点到五点我在江宁瑞都金逸影城看电影”将分成“明天下午三点/到/五点/我/在/江宁瑞都金逸影城/看/电影”。

callPkg

false

String

调用者名称。

callType

false

int

调用者类型: 0:普通应用(默认)1:快应用

callVersion

false

String

调用者版本号。

callState

false

int

调用者状态: -1:未知(默认)0:前台1:后台

接口返回值说明

返回值ResponseResult中responseResult为JSON字符串,体现词性标注的结果:

参数名

是否必选

值类型

说明

code

int

词性标注的结果码。取值包括: 0:成功1:系统正在初始化2:参数错误3:系统忙4:系统异常5:任务超时6:其它错误

message

String

错误信息。

pos

JSONArray

切分出的词数组,数组里的类型为JSONObject。

+word

String

切分出的词。

+tag

String

词性,type为1或9223372036854775807时,人名实体的词性为nr,时间实体的词为t,地点实体的词性为ns,其他实体统一为ne。具体词性类型可参表1。

  • 0:成功
  • 1:系统正在初始化
  • 2:参数错误
  • 3:系统忙
  • 4:系统异常
  • 5:任务超时
  • 6:其它错误

message 是 String 错误信息。 pos 否 JSONArray 切分出的词数组,数组里的类型为JSONObject。 +word 否 String 切分出的词。 +tag 否 String 词性,type为1或9223372036854775807时,人名实体的词性为nr,时间实体的词为t,地点实体的词性为ns,其他实体统一为ne。具体词性类型可参表1

词性

说明

词性

说明

词性

说明

n

名词

rr

人称代词

u

助词

nr

人名

rz

指示代词

uzhe

助词“着”

ns

地名

rzt

时间指示代词

ule

助词“了”“喽”

ne

只在实体合并时使用,除人名、时间、地点之前,其他实体统一返回ne

rzs

处所指示代词

uguo

助词“过”

t

时间词

rzv

谓词性指示代词

ude1

助词“的”

tg

时间词性语素

ry

疑问代词

ude2

助词“地”

s

处所词

ryt

时间疑问代词

ude3

助词”得”

f

方位词

rys

处所疑问代词

usuo

助词”所“

v

动词

ryv

谓词性疑问代词

udeng

助词“等”“等等”

vd

副动词

rg

代词性语素

uyy

助词”一样”“一般”“似的”“般”

vn

名动词

m

数词

udh

助词“的话”

vshi

动词“是”

mq

数量词

uls

助词“来讲”“来说”“而言”“说来”

vyou

动词“有”

q

量词

uzhi

助词“之“

vf

趋向动词

qv

动量词

ulian

助词“连”

a

形容词

qt

时量词

e

叹词

ad

副形词

d

副词

y

语气词

an

名形词

p

介词

o

拟声词

b

区别词

pba

介词“把”

h

前缀

bl

区别词性惯用语

pbei

介词“被”

k

后缀

z

状态词

c

连词

x

字符串

r

代词

cc

并列连词

idiom

成语

w

标点符号

-

-

-

-

开发步骤

在使用词性标注的接口时,将实现词性标注的相关类添加至工程。

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\":\"我要看速度与激情\",\"type\":0}";
ResponseResult responseResult = NluClient.getInstance().getWordPos(requestData, NluRequestType.REQUEST_TYPE_LOCAL);

复制

采用异步方式进行词性标注:

NluClient.getInstance().getWordPos(requestData,
            NluRequestType.REQUEST_TYPE_LOCAL, new OnResultListener<ResponseResult>() {
                @Override
                public void onResult(ResponseResult result) {
                    //异步返回处理
                }
            });

复制

销毁NLU服务。

NluClient.getInstance().destroy(context);

最后,为了能让大家更好的去学习提升鸿蒙 (Harmony OS) 开发技术,小编连夜整理了一份30个G纯血版学习资料(含视频电子书学习文档等)以及一份在Github上持续爆火霸榜的《纯血版华为鸿蒙 (Harmony OS)开发手册》(共计890页),希望对大家有所帮助。

纯血版鸿蒙 HarmonyOS 4.0 视频学习资料

 需要以上视频学习资料小伙伴

请点击→纯血版全套鸿蒙HarmonyOS学习资料


《纯血版华为鸿蒙 (Harmony OS)开发手册》

这份手册涵盖了当前鸿蒙 (Harmony OS) 开发技术必掌握的核心知识点

纯血版鸿蒙 (Harmony OS)开发手册部分精彩内容

HarmonyOS 概念:

  • 系统定义
  • 技术架构
  • 技术特性
  • 系统安全

如何快速入门?

  • 基本概念
  • 构建第一个ArkTS应用
  • 构建第一个JS应用
  • ……


开发基础知识: 

  • 应用基础知识
  • 配置文件
  • 应用数据管理
  • 应用安全管理
  • 应用隐私保护
  • 三方应用调用管控机制
  • 资源分类与访问
  • 学习ArkTS语言
  • ……

基于ArkTS 开发:

  • Ability开发
  • UI开发
  • 公共事件与通知
  • 窗口管理
  • 媒体
  • 安全
  • 网络与链接
  • 电话服务
  • 数据管理
  • 后台任务(Background Task)管理
  • 设备管理
  • 设备使用信息统计
  • DFX
  • 国际化开发
  • 折叠屏系列
  • .……

获取以上文中提到的这份纯血版鸿蒙 (Harmony OS) 开发资料的小伙伴 

请点击→纯血版全套鸿蒙HarmonyOS学习资料


🚀写在最后

  • 如果你觉得这篇内容对你还蛮有帮助,我想邀请你帮我三个小忙:
  • 点赞,转发,有你们的 『点赞和评论』,才是我创造的动力。
  • 关注小编,同时可以期待后续文章ing🚀,不定期分享原创知识。
  • 想要获取更多完整鸿蒙最新VIP学习资料,请点击→纯血版全套鸿蒙HarmonyOS学习资料

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值