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

目录

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.mzph.cn/diannao/69591.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

系统思考—自我超越

“我不在乎你从哪里开始&#xff0c;我只在乎你能走到哪里。真正的超越在于敢于突破自己设定的框架。” —— 亚伯拉罕林肯 在今天这个快速变化的商业环境里&#xff0c;许多企业和团队都会遇到同样的挑战&#xff1a;如何突破现有的框架&#xff0c;实现真正的自我超越&#…

win11+mac键盘+PowerToys 重映射热键

在win11系统中&#xff0c;使用mac的蓝牙键盘&#xff0c;键盘本身没有PrintScreen键。这时可以借助PowerToys来将其他键映射到系统的PrintScreen. 1.下载安装PowerToys 地址https://learn.microsoft.com/zh-cn/windows/powertoys/ 2.打开PowerToys&#xff0c;选中【键盘管理器…

程序诗篇里的灵动笔触:指针绘就数据的梦幻蓝图<8>

大家好啊&#xff0c;我是小象٩(๑ω๑)۶ 我的博客&#xff1a;Xiao Xiangζั͡ޓއއ 很高兴见到大家&#xff0c;希望能够和大家一起交流学习&#xff0c;共同进步。 今天我们复习前面学习的指针知识 目录 关于指针数组和数组指针的区别指针数组&#xff08;Array of Poi…

今日写题work01

题目一&#xff1a;轮转数组 三种思路&#xff0c;时间复杂度越优越好 第一种思路: 直接暴力求解&#xff0c;空间复杂度为o(1),但时间复杂度为o(n^2) #include <stdio.h> void rotate(int* nums, int k, int len); int main() {int arr[] { 1,2,3,4,5,6,7 };rotate(a…

原生鸿蒙版小艺APP接入DeepSeek-R1,为HarmonyOS应用开发注入新活力

原生鸿蒙版小艺APP接入DeepSeek-R1&#xff0c;为HarmonyOS应用开发注入新活力 在科技飞速发展的当下&#xff0c;人工智能与操作系统的融合正深刻改变着我们的数字生活。近日&#xff0c;原生鸿蒙版小艺APP成功接入DeepSeek-R1&#xff0c;这一突破性进展不仅为用户带来了更智…

赛博算命之 ”梅花易数“ 的 “JAVA“ 实现 ——从玄学到科学的探索

hello~朋友们&#xff01;好久不见&#xff01; 今天给大家带来赛博算命第三期——梅花易数的java实现 赛博算命系列文章&#xff1a; 周易六十四卦 掐指一算——小六壬 更多优质文章&#xff1a;个人主页 JAVA系列&#xff1a;JAVA 大佬们互三哦~互三必回&#xff01;&#xf…

什么是PMC项目管理?

PMC项目管理&#xff08;Project Management Consultancy&#xff0c;项目管理咨询&#xff09;是一种专业化的管理服务形式&#xff0c;旨在通过提供专业的项目管理支持、方法论和工具&#xff0c;帮助企业或组织在项目实施过程中达到预期目标、提高效率、降低风险、节约成本。…

如何在电脑后台定时进行自动截图?自动截图后如何快捷保存?如何远程查看?

7-2 有时候需要对电脑的屏幕进行在后台连续性的截图保存&#xff0c;并且要可以远程查看&#xff0c;无界面&#xff0c;以达到对电脑的使用过程进行完全了解的目的&#xff0c;一般用于对小孩使用电脑的掌握&#xff0c;如果父母在外地&#xff0c;不方便就近管理&#xff0c…

从Word里面用VBA调用NVIDIA的免费DeepSeekR1

看上去能用而已。 选中的文字作为输入&#xff0c;运行对应的宏即可&#xff1b;会先MSGBOX提示一下&#xff0c;然后相关内容追加到word文档中。 需要自己注册生成好用的apikey Option ExplicitSub DeepSeek()Dim selectedText As StringDim apiKey As StringDim response A…

rebase和merge

rebase 和merge区别&#xff1a; rebase变基&#xff0c;改变基底&#xff1a;rebase会抹去提交记录。 git pull 默认merge&#xff0c;git pull --rebase 变基 rebase C、D提交属于feature分支&#xff0c;是基于master分支&#xff0c;在B提交额外拉出来的&#xff0c;当…

【AIGC魔童】DeepSeek v3提示词Prompt书写技巧

【AIGC魔童】DeepSeek v3提示词Prompt书写技巧 &#xff08;1&#xff09;基础通用公式&#xff08;适用80%场景&#xff09;&#xff08;2&#xff09;问题解决公式&#xff08;决策支持&#xff09;&#xff08;3&#xff09;创意生成公式&#xff08;4&#xff09;学习提升公…

了解“/linux-5.4.31/drivers/of/device.c”中的of_device_get_match_data()

1、打开“drivers/of/base.c” #define of_prop_cmp(s1, s2) strcmp((s1), (s2)) /*如果s1小于s2,则返回值小于0。 如果s1大于s2,则返回值大于0。 如果s1等于s2,则返回值等于0。*/ //函数功能:根据所给的“设备树的节点np”和“properties名字”在设备树里查找是否有“prop…

Python 鼠标轨迹 - 防止游戏检测

一.简介 鼠标轨迹算法是一种模拟人类鼠标操作的程序&#xff0c;它能够模拟出自然而真实的鼠标移动路径。 鼠标轨迹算法的底层实现采用C/C语言&#xff0c;原因在于C/C提供了高性能的执行能力和直接访问操作系统底层资源的能力。 鼠标轨迹算法具有以下优势&#xff1a; 模拟…

React受控组件的核心原理与实战精要

在 React 中&#xff0c;受控组件&#xff08;Controlled Component&#xff09; 是一种重要的模式&#xff0c;用于通过组件的状态来管理表单元素的值。这种模式不仅确保了数据的一致性和可预测性&#xff0c;还便于与其他功能&#xff08;如验证和格式化&#xff09;集成。本…

MapReduce是什么?

MapReduce 是一种编程模型&#xff0c;最初由 Google 提出&#xff0c;旨在处理大规模数据集。它是分布式计算的一个重要概念&#xff0c;通常用于处理海量数据并进行并行计算。MapReduce的基本思想是将计算任务分解为两个阶段&#xff1a;Map 阶段和 Reduce 阶段。 Map 阶段&a…

?和.和*在正则表达式里面的区别

在正则表达式中&#xff0c;?、. 和 * 是三种非常重要的元字符&#xff0c;它们各自有不同的功能和用途&#xff0c;以下是它们的区别&#xff1a; ?&#xff08;问号&#xff09; 功能&#xff1a;表示前面的元素&#xff08;字符、字符集、分组等&#xff09;是可选的&…

DevOps的个人学习

一、DevOps介绍 软件开发最初是由两个团队组成&#xff1a; 开发团队&#xff1a;负责设计和构建系统。运维团队&#xff1a;负责测试代码后部署上线&#xff0c;确保系统稳定安全运行。 这两个看似目标不同的团队需要协同完成一个软件的开发。DevOps整合了开发与运维团队&a…

数据库系统概论的第六版与第五版的区别,附pdf

我用夸克网盘分享了「数据库系统概论第五六版资源」&#xff0c;点击链接即可保存。 链接&#xff1a;https://pan.quark.cn/s/21a278378dee 第6版教材修订的主要内容 为了保持科学性、先进性和实用性&#xff0c;在第5版教材基础上对全书内容进行了修改、更新和充实。 在科…

攻防世界32 very_easy_sql【SSRF/SQL时间盲注】

不太会&#xff0c;以后慢慢看 被骗了&#xff0c;看见very_easy就点进来了&#xff0c;结果所有sql能试的全试了一点用都没有 打开源代码发现有个use.php 好家伙&#xff0c;这是真的在考sql吗...... 制作gopher协议的脚本&#xff1a; import urllib.parsehost "12…

11vue3实战-----封装缓存工具

11vue3实战-----封装缓存工具 1.背景2.pinia的持久化思路3.以localStorage为例解决问题4.封装缓存工具 1.背景 在上一章节&#xff0c;实现登录功能时候&#xff0c;当账号密码正确&#xff0c;身份验证成功之后&#xff0c;把用户信息保存起来&#xff0c;是用的pinia。然而p…