news 2026/4/23 4:01:46

二十一、【鸿蒙 NEXT】分词和汉字转拼音

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
二十一、【鸿蒙 NEXT】分词和汉字转拼音

【前言】

在某些功能场景,比如实现一个本地搜索功能时,可能需要支持中文搜索,同时支持拼音搜索。这里就会涉及到两个功能点,一个是中文转拼音,一个是将中文进行分词。同时这里有个注意点如果调用系统接口进行批量分词时,使用不当会导致UI卡顿。下面介绍下在鸿蒙next系统中,怎么实现这两个功能,以及怎么避免UI卡顿

1、中文转拼音

在系统接口中有个i18n的工具类,该工具类提供了一个Transliterator工具类,可以实现中文转拼音能力,代码如下

其中res1是包含声调的,res2是不包含声调的

let res1:string = i18n.Transliterator.getInstance('Han-Latin').transform('中国') let res2:string = i18n.Transliterator.getInstance('Latin-ASCII').transform(res1)

2、分词

在做功能搜索功能时,会将功能名称分词出不同的词语,来适配用户的搜索。这里系统提供了一个 分词功能,textProcessing是系统分词的一个工具类,代码如下,代码将“词语搜索”四个字分词层“词语”和“搜索”两个词

textProcessing.getWordSegment('词语搜索').then(wordSegments => { let words = wordSegments.map(wordSegment => wordSegment.word) console.log(`词语搜索 => ${JSON.stringify(words)}`) })

3、分词的注意点

这里要注意一点,如果使用不当,可能会造成UI界面的卡顿。

在调用系统分词接口时,实际是跨进程调用系统能力。如果我们一次性循环调用很多次分词接口,由于系统的分词进程最大开两个线程处理分词。因此我们如果循环大量调用接口,会导致我们app一直处于等待状态,而且会影响UI的正常展示。这种阻塞即使我们在app中启动子线程去调用系统接口,也没法起到效果。因为实际上我们跨进程调用分词接口时,本身会启动一个子线程去调用,真正造成UI卡顿的原因是,我们循环大批量开启跨进程调用,会导致app的线程资源耗尽,导致我们app其他线程无法正常获取线程资源。比如会影响网络请求,我们很多UI的展示依赖网络请求的返回值,由于线程资源耗尽,网络请求只能等待。从而影响UI正常展示。

解决方法就是我们可以分批次调用系统接口,比如每批次调用4次,等到前面的处理完成后,再继续下一批次调用。完整的代码实现如下,这里首先在app子线程去做分词功能,并在子线程中分批次调用。我们最终在app启动时调用SegmentUtil.segment();方法实现批量分词效果

// 分词工具类,开启子线程执行 import { textProcessing } from "@kit.NaturalLanguageKit" import { PromiseBatchUtils } from "./PromiseBatchUtils" import { taskpool } from "@kit.ArkTS" export class SegmentUtil { public static async segment() { let segmentResult = await taskpool.execute(segments) as Promise<string[][]> console.log(`segmentResult is ${JSON.stringify(segmentResult)}`) } } @Concurrent async function segments():Promise<string[][]> { let arr:string[] = ['词语搜索','词语搜索','词语搜索','词语搜索','词语搜索','词语搜索','词语搜索','词语搜索','词语搜索','词语搜索','词语搜索','词语搜索'] let arrPromise:(()=>Promise<string[]>)[] = arr.map(str => async () => { let wordSegments = await textProcessing.getWordSegment('词语搜索') return wordSegments.map(wordSegment => wordSegment.word) }) let result = await PromiseBatchUtils.runWithBatch(arrPromise, 4) return result } // 分批次调用系统分词 export class PromiseBatchUtils { public static async runWithBatch<T>(tasks:(() => Promise<T>)[], batchNum:number):Promise<T[]> { let results:T[] = [] let execute:Promise<void>[] = [] let index = 0 while (index < tasks.length) { if (execute.length < batchNum) { let taskIndex = index++ console.log(`start index ${taskIndex}`) let executePromise = tasks[taskIndex]() .then(result => { results[taskIndex] = result console.log(`end index ${taskIndex}`) }).finally(() => { let executeIndex = execute.indexOf(executePromise) if (executeIndex > -1) { execute.splice(executeIndex,1) } }) execute.push(executePromise) } else { await Promise.race(execute) } } await Promise.all(execute) return results } }
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/18 12:26:20

AI如何优化日志监控:tail -f 的智能升级

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容&#xff1a; 开发一个基于AI的日志监控工具&#xff0c;扩展传统的tail -f功能。要求&#xff1a;1. 实时监控日志文件变化 2. 使用NLP技术识别错误日志模式 3. 自动分类日志级别&#xff08;ER…

作者头像 李华
网站建设 2026/4/20 15:36:20

云桌面厂家十大排名如何?关键前三名?

在数字化转型的浪潮中&#xff0c;云桌面作为高效、安全、灵活的办公解决方案&#xff0c;已成为政府、医疗、金融、能源等行业信息化建设的重要基石。面对市场上众多的云桌面厂家&#xff0c;许多用户都会好奇&#xff1a;究竟哪些厂商位居前列&#xff1f;排名依据是什么&…

作者头像 李华
网站建设 2026/4/17 8:29:32

告别低效数据流转:当大数据传输成为业务增长的“隐形瓶颈”

在数字化进程飞速发展的今天&#xff0c;数据已成为企业最核心的资产之一。无论是科研机构的实验数据、制造业的设计图纸&#xff0c;还是媒体行业的高清素材&#xff0c;海量数据的快速、安全流转直接关系到项目进度与业务成效。然而&#xff0c;许多团队在日常工作中&#xf…

作者头像 李华
网站建设 2026/4/22 7:54:04

零基础图解教程:Windows下Tomcat安装全流程

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容&#xff1a; 请创建一个面向初学者的Windows系统Tomcat安装指南。要求&#xff1a;1) 分步骤截图说明&#xff1b;2) 包含JDK安装验证&#xff1b;3) 环境变量配置图解&#xff1b;4) 常见错误解…

作者头像 李华
网站建设 2026/4/17 8:19:31

科研机构新利器:Qwen3-32B在专业咨询中的应用

科研机构新利器&#xff1a;Qwen3-32B在专业咨询中的应用 在科研领域&#xff0c;时间就是创新的窗口。一位材料科学家花三天读完二十篇文献才找到研究缺口&#xff1b;一个生物实验室反复修改基金申请书&#xff0c;只为让论证更严密&#xff1b;跨学科团队因术语壁垒沟通低效…

作者头像 李华
网站建设 2026/4/22 0:11:27

AI如何加速CAN FD协议开发?快马平台实战指南

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容&#xff1a; 使用快马平台生成一个CAN FD协议解析器的Python代码。要求包含以下功能&#xff1a;1) CAN FD帧结构解析&#xff08;支持不同帧格式&#xff09;&#xff1b;2) CRC校验计算&#…

作者头像 李华