【鸿蒙开发】第二十四章 AI -Natural Language Kit(自然语言理解服务)

ops/2025/2/12 21:00:35/

目录

1 简介

2 约束与限制

3. 分词

3.1 适用场景

3.2 约束与限制

3.3 开发步骤

3.4 开发实例

4 实体抽取

4.1 适用场景

4.2 约束与限制

4.3 开发步骤

4.4 开发实例


1 简介

Natural Language Kit(自然语言理解服务)提供了多项文本语义理解相关的基础能力,帮助开发者更好地处理和分析文本数据。具体包括以下几个方面:

  1. 分词:可以将一段文本切分成独立的词语单元,识别出句子中的每个词汇。这是进行自然语言处理的基础步骤,为后续的语义分析、信息提取等任务奠定基础。
  2. 实体抽取:能够从文本中识别出具有特定意义的实体,例如人名、地名、时间日期、数字、电话号码、邮箱地址等。这些实体信息在很多场景下都有重要作用,如信息检索、知识图谱构建、智能问答等。

2 约束与限制

AI能力

约束

分词

  • 支持的语言:简体中文、英文、繁体中文。
  • 文本长度:不超过1000字符。

实体抽取

  • 支持的语言:简体中文、英文、繁体中文。
  • 支持的实体:时间、地点、邮箱、快递单号、航班号、人名、电话号码、网址链接、验证码、证件号。
  • 文本长度:不超过1000字符。

说明

Natural Language Kit的特性支持多用户同时接入,但是不支持同一用户并发调用同一个特性,如同一个特性被同一进程同一时间多次调用,则返回系统繁忙错误,不同进程调用同一特性,则同一时间只有一个进程业务在处理,其他进程进入队列排队。

3. 分词

3.1 适用场景

分词的目的是让文本文件的中文、英文、数字内容变成一个一个的单词或者词组,从而为后续的转变为词向量提供基础。使用场景例如搜索引擎会将用户输入的文本分词处理后提取关键词送搜索。

3.2 约束与限制

该能力当前不支持模拟器

3.3 开发步骤

1. 引用相关类添加至工程。

import { textProcessing } from '@kit.NaturalLanguageKit';

2. 配置输入文本框和按钮,调用分词textProcessing.getWordSegment接口。

let inputText: string = '';TextInput({ placeholder: '请输入文本' }).height(40).fontSize(16).width('90%').margin(10).onChange((value: string) => {this.inputText = value;})Button('获取分词结果').type(ButtonType.Capsule).fontColor(Color.White).width('45%').margin(10).onClick(async () => {try {let result = await textProcessing.getWordSegment(this.inputText);this.outputText = this.formatWordSegmentResult(result);} catch (err) {console.error(`getWordSegment errorCode: ${err.code}, errorMessage: ${err.message}`);}})

3. 在界面上展示分词结果。

private formatWordSegmentResult(segments: textProcessing.WordSegment[]): string {let output = 'Word Segments:\n';segments.forEach((segment, index) => {output += `Word[${index}]: ${segment.word}, Tag: ${segment.wordTag}\n`;});return output;
}

3.4 开发实例

import { textProcessing } from '@kit.NaturalLanguageKit';@Entry
@Component
struct Index {private inputText: string = '';@State outputText: string = '';build() {Column() {TextInput({ placeholder: '请输入文本' }).height(40).fontSize(16).width('90%').margin(10).onChange((value: string) => {this.inputText = value;})Scroll() {Text(this.outputText).fontSize(16).width('90%').margin(10)}.height('40%')//调用分词接口Row() {Button('获取分词结果').type(ButtonType.Capsule).fontColor(Color.White).width('45%').margin(10).onClick(async () => {try {let result = await textProcessing.getWordSegment(this.inputText);this.outputText = this.formatWordSegmentResult(result);} catch (err) {console.error(`getWordSegment errorCode: ${err.code}, errorMessage: ${err.message}`);}})}}.width('100%').height('100%').justifyContent(FlexAlign.Center)}//分词结果转义private formatWordSegmentResult(segments: textProcessing.WordSegment[]): string {let output = 'Word Segments:\n';segments.forEach((segment, index) => {output += `Word[${index}]: ${segment.word}, Tag: ${segment.wordTag}\n`;});return output;}
}

4 实体抽取

4.1 适用场景

实体抽取是自然语言处理服务的一项关键能力。以综合上下文信息,从文本中准确识别出多种类型的实体:

  1. 日期时间(DATETIME):提取文本中的具体日期,如“2024年6月18日”等。
  2. 电子邮件(EMAIL):识别文本中的电子邮件地址,如“example@abc.com”。
  3. 快递单号(EXPRESS_NO):抽取文本中的快递单号信息。
  4. 航班号(FLIGHT_NO):定位文本中的航班号,如“CA1234”等。
  5. 地址(LOCATION):从文本中提取详细的地址描述。
  6. 人名(NAME):找出文本中出现的人名信息。
  7. 手机号(PHONE_NO)识别文本中的手机号码。
  8. 网址(URL):抽取文本中的网址链接。
  9. 验证码(VERFICATION_CODE):定位文本中的验证码数字。
  10. 身份证号(ID_NO):识别文本中的身份证号码信息。

    通过准确抽取以上多种类型的实体信息,该项能力可以广泛应用于新闻阅读、信息检索、客户服务、社交聊天、金融运营等多种场景。例如,在新闻阅读场景中,可以对新闻正文进行实体抽取,并对人名、地名、时间、网址等关键实体信息进行高亮标识,帮助读者快速获取文章要点;在客服场景,通过抽取用户留言中的手机号、快递单号、验证码等信息,客服人员能够更高效地定位问题并给出解决方案。实体抽取为各行业的智能化应用提供了坚实的基础支持。

4.2 约束与限制

该能力当前不支持模拟器

4.3 开发步骤

1. 在使用实体抽取功能时,将实现实体抽取的类添加至工程。

import { textProcessing, EntityType } from '@kit.NaturalLanguageKit';

2. 配置输入文本框。

let inputText: string = '';TextInput({ placeholder: '请输入文本' }).height(40).fontSize(16).width('90%').margin(10).onChange((value: string) => {this.inputText = value;})

3. 配置按钮,调用实体抽取textProcessing.getEntity接口。

Button('获取实体结果').type(ButtonType.Capsule).fontColor(Color.White).width('45%').margin(10).onClick(async () => {try {let result = await textProcessing.getEntity(this.inputText, {entityTypes: [EntityType.NAME, EntityType.PHONE_NO]});this.outputText = this.formatEntityResult(result);} catch (err) {console.error(`getEntity errorCode: ${err.code}, errorMessage: ${err.message}`);this.outputText = 'Error occurred while getting entities.';}})

4. 在界面上展示实体抽取结果。

private formatEntityResult(entities: textProcessing.Entity[]): string {if (!entities || !entities.length) {return 'No entities found.';}let output = 'Entities:\n';for (let i = 0; i < entities.length; i++) {let entity = entities[i];output += `Entity[${i}]:\n`;output += `  oriText: ${entity.text}\n`;output += `  charOffset: ${entity.charOffset}\n`;output += `  entityType: ${entity.type}\n`;output += `  jsonObject: ${entity.jsonObject}\n\n`;}return output;
}

4.4 开发实例

import { textProcessing, EntityType } from '@kit.NaturalLanguageKit';@Entry
@Component
struct Index {private inputText: string = '';@State outputText: string = '';build() {Column() {TextInput({ placeholder: '请输入文本' }).height(40).fontSize(16).width('90%').margin(10).onChange((value: string) => {this.inputText = value;})Scroll() {Text(this.outputText).fontSize(16).width('90%').margin(10)}.height('40%')//调用实体抽取接口Row() {Button('获取实体结果').type(ButtonType.Capsule).fontColor(Color.White).width('45%').margin(10).onClick(async () => {try {let result = await textProcessing.getEntity(this.inputText, {entityTypes: [EntityType.NAME, EntityType.PHONE_NO]});this.outputText = this.formatEntityResult(result);} catch (err) {console.error(`getEntity errorCode: ${err.code}, errorMessage: ${err.message}`);this.outputText = 'Error occurred while getting entities.';}})}}.width('100%').height('100%').justifyContent(FlexAlign.Center)}//实体结果转义private formatEntityResult(entities: textProcessing.Entity[]): string {if (!entities || !entities.length) {return 'No entities found.';}let output = 'Entities:\n';for (let i = 0; i < entities.length; i++) {let entity = entities[i];output += `Entity[${i}]:\n`;output += `  oriText: ${entity.text}\n`;output += `  charOffset: ${entity.charOffset}\n`;output += `  entityType: ${entity.type}\n`;output += `  jsonObject: ${entity.jsonObject}\n\n`;}return output;}
}


http://www.ppmy.cn/ops/157857.html

相关文章

自学人工智能大模型,满足7B模型的训练和微调以及推理,预算3万,如何选购电脑

如果你的预算是 3万元人民币&#xff0c;希望训练和微调 7B 参数规模的人工智能大模型&#xff08;如 LLaMA、Mistral 等&#xff09;&#xff0c;你需要一台高性能的深度学习工作站。在这个预算范围内&#xff0c;以下是推荐的配置&#xff1a; 1. 关键硬件配置 (1) GPU (显卡…

搭建Spark集群(CentOS Stream 9)

零、资源准备 虚拟机相关: VMware workstation 16:虚拟机/vmware_16.zip(建议选择vmware_17版本)CentOS Stream 9:虚拟机/CentOS-Stream-9-latest-x86_64-boot.iso(安装包小,安装时需要联网下载)/ 虚拟机/CentOS-Stream-9-latest-x86_64-dvd1.iso(安装包大)JDK jdk1.8:…

51单片机(国信长天)矩阵键盘的基本操作

在CT107D单片机综合训练平台上&#xff0c;首先将J5处的跳帽接到1~2引脚&#xff0c;使按键S4~S19按键组成4X4的矩阵键盘。在扫描按键的过程中&#xff0c;发现有按键触发信号后(不做去抖动)&#xff0c;待按键松开后&#xff0c;在数码管的第一位显示相应的数字:从左至右&…

C++ Primer 类型转换

欢迎阅读我的 【CPrimer】专栏 专栏简介&#xff1a;本专栏主要面向C初学者&#xff0c;解释C的一些基本概念和基础语言特性&#xff0c;涉及C标准库的用法&#xff0c;面向对象特性&#xff0c;泛型特性高级用法。通过使用标准库中定义的抽象设施&#xff0c;使你更加适应高级…

第二章 STM32启动流程

STM32启动进入main函数前&#xff0c;需要完成的操作。 STM32在执行进入main函数之前&#xff0c;会对芯片硬件本身进行一个初始化和内存重映射的工作。 参考文章&#xff1a; https://blog.csdn.net/Teminator_/article/details/142333178 https://blog.csdn.net/a_qwq_a/arti…

现代前端工程化实践:高效构建的秘密

一、前端工程化错误监控 这种监控可以帮助开发人员及时发现和解决问题&#xff0c;提高应用程序的稳定性和可靠性。 1. Sentry&#xff1a;Sentry是一款开源的错误监控平台&#xff0c;可以监控前端、后端以及移动端应用程序中的错误和异常。Sentry提供了实时错误报告、错误分…

2025届优秀大数据毕业设计

【2025计算机毕业设计】计算机毕业设计100个高通过率选题推荐&#xff0c;毕业生毕设必看选题指导&#xff0c;计算机毕业设计选题讲解&#xff0c;毕业设计选题详细指导_哔哩哔哩_bilibili 985华南理工大学学长 大厂全栈&#xff0c;大数据开发工程师 专注定制化开发

PHP设备巡检系统小程序

&#x1f527; 设备巡检系统&#xff1a;智能高效&#xff0c;全方位守护您的资产安全 &#x1f4ca; 基于前沿的ThinkPHP框架与Uniapp技术深度融合&#xff0c;我们匠心独运&#xff0c;打造出一款专为电力、水利、物业等关键巡检领域精心设计的设备巡检系统。它不仅支持轻松…