热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

HarmonyOS之AI能力·词性标注

一、简介随着信息技术的发展,网络中的信息量成几何级增长逐步成为当今社会的主要特征。准确提取文本关键信息,是搜索引擎等领域的技术基础,而分词作为文本信
一、简介
  • 随着信息技术的发展,网络中的信息量成几何级增长逐步成为当今社会的主要特征。准确提取文本关键信息,是搜索引擎等领域的技术基础,而分词作为文本信息提取的第一步则尤为重要。
  • 分词作为自然语言处理领域的基础研究,衍生出各类不同的文本处理相关应用。
  • 词性标注包括分词以及为分词结果中的每个单词标注一个正确的词性(标注每个词是名词、动词、形容词或其他词性),开发者可自定义分词的粒度。
  • 词性标注提供了文本自动分词并给出词性的接口。对于输入的一段文本,自动通过词性标注接口对其进行分词,并为分词结果中的每个单词标注一个正确的词性。词性标注提供不同的分词粒度,开发者可以根据需要自定义分词粒度。
  • 词性标注当前只支持中文语境。
  • 词性标注文本限制在 500 个字符以内,超过字数将返回参数错误,文本需要为 UTF-8 格式,格式错误不报错,但会导致分析结果错误。
  • Engine 支持多用户同时接入,但是不支持同一用户并发调用同一特性。若同一特性被同一进程同一时间多次调用,则返回系统忙错误;不同进程调用同一特性,则同一时间只能处理一个进程业务,其他进程进入队列排队。
二、应用场景
  • 应用于搜索引擎开发。对于搜索引擎来说,在上百亿的网页中找到所有结果没有意义,重要的是把最相关的结果呈现在最前面,也称为相关度排序。分词的准确与否,直接影响到对搜索结果的相关度排序。
  • 应用于语义分析相关软件的开发。在语义分析中,通过分词理解文本所要表达的正确含义,并通过词性标注得到词性,准确地判断出某个词是名词、动词、形容词等,使得语义分析更方便扩展。
三、API 说明
  • 词性标注提供了 getWordPos() 接口,该接口可以根据分词粒度,为分词结果中的每个单词标注一个正确的词性。
① 主要接口
接口名描述
ResponseResult getWordPos(String requestData, int requestType)采用同步方式进行词性标注
ResponseResult getWordPos(final String requestData, final int requestType, final OnResultListener listener)采用异步方式进行词性标注
void 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 格式,如下表说明:
参数名是否必选类型说明
texttrueString待分析的文本,UTF-8编码,限制500个字符以内
typefalselong分词的粒度,默认为0。
0:基本词,粒度较小。例如:“我要看速度与激情”,分成“我/要/看/速度/与/激情”。
1:在基本词的基础上,做实体合并。例如:“我要去江宁万达广场看速度与激情”分成“我/要/去/江宁万达广场/看/速度/与/激情”。
对于没有可合并实体的文本信息,其分词效果与type为0的分词效果相同。例如:“明天下午3点一起看电影”分成“明天/下午/3点/一起/看/电影”。
9223372036854775807(2的63次方减1):在type为1的基础上,把实体时间、地点等整体结构合并(出现符号隔开则不合并),并把一些常用短语合并。
例如:“形容词+的”,“单字动词+单字名词”等,简化句子成分。根据以上原则,“明天下午三点到五点我在江宁瑞都金逸影城看电影”将分成“明天下午三点/到/五点/我/在/江宁瑞都金逸影城/看/电影”
callPkgfalseString调用者名称
callTypefalseint调用者类型:
0:普通应用(默认)
1:快应用
callVersionfalseString调用者版本号
callStatefalseint调用者状态:
-1:未知(默认)
0:前台
1:后台
  • 目前 NLU 支持的实体类别:
实体类别备注
电影依赖字典,要求真实用例,勿做修改
电视剧依赖字典,要求真实用例,勿做修改
综艺依赖字典,要求真实用例,勿做修改
动漫依赖字典,要求真实用例,勿做修改
火车车次依赖字典,要求真实用例,勿做修改
航班号要求真实用例,勿做修改
球队要求真实用例,勿做修改
球队依赖字典,支持NBA、CBA、英超、西甲、德甲、意甲、法甲、中超的球队识别,要求真实用例,勿做修改
人名要求真实用例,勿做修改
快递单号要求真实用例,勿做修改
电话号码要求真实用例,勿做修改
url要求真实用例,勿做修改
邮箱要求真实用例,勿做修改
联赛NBA、CBA、英超、西甲、德甲、意甲、法甲、中超,要求真实用例,勿做修改
时间要求真实用例,勿做修改
地点包含酒店、餐馆、景点、学校、道路、省、市、县、区、镇等,部分依赖字典
验证码要求真实用例,勿做修改
③ 接口返回值说明
  • 返回值 ResponseResult 中 responseResult 为 Json 字符串,体现词性标注的结果:
参数名是否必选类型说明
codeint词性标注的结果码。取值包括:
0:成功
1:系统正在初始化
2:参数错误
3:系统忙
4:系统异常
5:任务超时
6:其它错误
messageString错误信息
posJSONArray切分出的词数组,数组里的类型为JSONObject
+wordString切分出的词
+tagString词性,type为1或9223372036854775807时,人名实体的词性为nr,时间实体的词为t,地点实体的词性为ns,其他实体统一为ne
  • 词性说明:
词性说明词性说明词性说明
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(){
@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() {
@Override
public void onResult(ResponseResult result) {
//异步返回处理
}
});

  • 销毁 NLU 服务:

NluClient.getInstance().destroy(context);

推荐阅读
  • 基于Net Core 3.0与Web API的前后端分离开发:Vue.js在前端的应用
    本文介绍了如何使用Net Core 3.0和Web API进行前后端分离开发,并重点探讨了Vue.js在前端的应用。后端采用MySQL数据库和EF Core框架进行数据操作,开发环境为Windows 10和Visual Studio 2019,MySQL服务器版本为8.0.16。文章详细描述了API项目的创建过程、启动步骤以及必要的插件安装,为开发者提供了一套完整的开发指南。 ... [详细]
  • 第六章:枚举类型与switch结构的应用分析
    第六章深入探讨了枚举类型与 `switch` 结构在编程中的应用。枚举类型(`enum`)是一种将一组相关常量组织在一起的数据类型,广泛存在于多种编程语言中。例如,在 Cocoa 框架中,处理文本对齐时常用 `NSTextAlignment` 枚举来表示不同的对齐方式。通过结合 `switch` 结构,可以更清晰、高效地实现基于枚举值的逻辑分支,提高代码的可读性和维护性。 ... [详细]
  • 本文详细解析了使用C++实现的键盘输入记录程序的源代码,该程序在Windows应用程序开发中具有很高的实用价值。键盘记录功能不仅在远程控制软件中广泛应用,还为开发者提供了强大的调试和监控工具。通过具体实例,本文深入探讨了C++键盘记录程序的设计与实现,适合需要相关技术的开发者参考。 ... [详细]
  • Java Socket 关键参数详解与优化建议
    Java Socket 的 API 虽然被广泛使用,但其关键参数的用途却鲜为人知。本文详细解析了 Java Socket 中的重要参数,如 backlog 参数,它用于控制服务器等待连接请求的队列长度。此外,还探讨了其他参数如 SO_TIMEOUT、SO_REUSEADDR 等的配置方法及其对性能的影响,并提供了优化建议,帮助开发者提升网络通信的稳定性和效率。 ... [详细]
  • 深入解析Android 4.4中的Fence机制及其应用
    在Android 4.4中,Fence机制是处理缓冲区交换和同步问题的关键技术。该机制广泛应用于生产者-消费者模式中,确保了不同组件之间高效、安全的数据传输。通过深入解析Fence机制的工作原理和应用场景,本文探讨了其在系统性能优化和资源管理中的重要作用。 ... [详细]
  • 使用 ListView 浏览安卓系统中的回收站文件 ... [详细]
  • C++ 异步编程中获取线程执行结果的方法与技巧及其在前端开发中的应用探讨
    本文探讨了C++异步编程中获取线程执行结果的方法与技巧,并深入分析了这些技术在前端开发中的应用。通过对比不同的异步编程模型,本文详细介绍了如何高效地处理多线程任务,确保程序的稳定性和性能。同时,文章还结合实际案例,展示了这些方法在前端异步编程中的具体实现和优化策略。 ... [详细]
  • 深入探索HTTP协议的学习与实践
    在初次访问某个网站时,由于本地没有缓存,服务器会返回一个200状态码的响应,并在响应头中设置Etag和Last-Modified等缓存控制字段。这些字段用于后续请求时验证资源是否已更新,从而提高页面加载速度和减少带宽消耗。本文将深入探讨HTTP缓存机制及其在实际应用中的优化策略,帮助读者更好地理解和运用HTTP协议。 ... [详细]
  • 如何利用Java 5 Executor框架高效构建和管理线程池
    Java 5 引入了 Executor 框架,为开发人员提供了一种高效管理和构建线程池的方法。该框架通过将任务提交与任务执行分离,简化了多线程编程的复杂性。利用 Executor 框架,开发人员可以更灵活地控制线程的创建、分配和管理,从而提高服务器端应用的性能和响应能力。此外,该框架还提供了多种线程池实现,如固定线程池、缓存线程池和单线程池,以适应不同的应用场景和需求。 ... [详细]
  • 本文探讨了利用JavaScript实现集合的对称差集算法的方法。该算法旨在处理多个数组作为输入参数,同时保留每个数组中元素的原始顺序。算法不会移除单个数组内的重复元素,但会删除在不同数组之间出现的重复项。通过这种方式,能够有效地计算出多个数组的对称差集。 ... [详细]
  • 在C#编程中,数值结果的格式化展示是提高代码可读性和用户体验的重要手段。本文探讨了多种格式化方法和技巧,如使用格式说明符、自定义格式字符串等,以实现对数值结果的精确控制。通过实例演示,展示了如何灵活运用这些技术来满足不同的展示需求。 ... [详细]
  • 在探讨如何在Android的TextView中实现多彩文字与多样化字体效果时,本文提供了一种不依赖HTML技术的解决方案。通过使用SpannableString和相关的Span类,开发者可以轻松地为文本添加丰富的样式和颜色,从而提升用户体验。文章详细介绍了实现过程中的关键步骤和技术细节,帮助开发者快速掌握这一技巧。 ... [详细]
  • 在C#编程中,设计流畅的用户界面是一项重要的任务。本文分享了实现Fluent界面设计的技巧与方法,特别是通过编写领域特定语言(DSL)来简化字符串操作。我们探讨了如何在不使用`+`符号的情况下,通过方法链式调用来组合字符串,从而提高代码的可读性和维护性。文章还介绍了如何利用静态方法和扩展方法来实现这一目标,并提供了一些实用的示例代码。 ... [详细]
  • 本文全面解析了 Python 中字符串处理的常用操作与技巧。首先介绍了如何通过 `s.strip()`, `s.lstrip()` 和 `s.rstrip()` 方法去除字符串中的空格和特殊符号。接着,详细讲解了字符串复制的方法,包括使用 `sStr1 = sStr2` 进行简单的赋值复制。此外,还探讨了字符串连接、分割、替换等高级操作,并提供了丰富的示例代码,帮助读者深入理解和掌握这些实用技巧。 ... [详细]
  • 在Android开发中,BroadcastReceiver(广播接收器)是一个重要的组件,广泛应用于多种场景。本文将深入解析BroadcastReceiver的工作原理、应用场景及其具体实现方法,帮助开发者更好地理解和使用这一组件。通过实例分析,文章详细探讨了静态广播的注册方式、生命周期管理以及常见问题的解决策略,为开发者提供全面的技术指导。 ... [详细]
author-avatar
花儿在绽放2502857073
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有