From a2ec442c50643929f45ecdc6530c80c1975d541b Mon Sep 17 00:00:00 2001 From: zh-lx <18366276315@163.com> Date: Wed, 17 May 2023 08:55:10 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E4=BF=AE=E6=94=B9=E6=80=A7=E8=83=BD?= =?UTF-8?q?=E5=87=86=E7=A1=AE=E7=8E=87=E8=AF=B4=E6=98=8E?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 28 +++++++++++++++------------- benchmark/accuracy.js | 22 +++++++++++++++++++--- benchmark/package.json | 15 +++++++++++++++ 3 files changed, 49 insertions(+), 16 deletions(-) create mode 100644 benchmark/package.json diff --git a/README.md b/README.md index df59b8c..17d64c1 100644 --- a/README.md +++ b/README.md @@ -8,13 +8,13 @@ [![MIT-license](https://img.shields.io/npm/l/pinyin-pro.svg)](https://opensource.org/licenses/MIT) [![GITHUB-language](https://img.shields.io/github/languages/top/zh-lx/pinyin-pro.svg)](https://github.com/zh-lx/pinyin-pro) -### 介绍 +### 📖 介绍 `pinyin-pro` 是一个专业的 js 汉字拼音转换库,功能丰富、准确率高、性能优异。 [使用文档](https://pinyin-pro.cn) | [在线运行](https://pinyin-pro.cn/run/run) -### 特色功能 +### 🎨 特色功能 - 获取汉字、词语、句子等多种格式的拼音 - 获取声母 @@ -27,7 +27,7 @@ - 支持字符串和数组两种输出形式 - 支持拼音文本匹配功能 -### 安装 +### 🔨 安装 npm 安装 @@ -41,7 +41,7 @@ npm install pinyin-pro ``` -### 使用示例 +### 💡 使用示例 更多功能的使用说明文档请查看[使用示例](https://pinyin-pro.cn/use/pinyin) @@ -61,18 +61,20 @@ pinyin('汉语拼音', { toneType: 'none', type: 'array' }); // ["han", "yu", "p pinyin('汉语拼音', { pattern: 'final' }); // 'àn ǔ īn īn' ``` -### 性能及准确率 +### 🆚 竞品对比 -以下是 `pinyin-pro`、`pinyin` 及 `@napi-rs/pinyin` 包对于汉字转换的速度及准确率对比,更多细节可以参考 +以下是 `pinyin-pro`、`pinyin` 及 `@napi-rs/pinyin` 包对于汉字转换的速度及准确率对比,更多细节可以参考 [性能准确率说明](https://pinyin-pro.cn/guide/compare.html) -| 对比项 | pinyin | pinyin-pro | @napi-rs/pinyin | -| ------------------ | ---------------- | ---------- | --------------- | -| 准确率 | 97.844% | 99.744% | 97.433% | -| 5k 字转换所需时间 | 489.252ms | 5.909ms | 115.723ms | -| 1w 字转换所需时间 | 511.573ms | 15.260ms | 115.887ms | -| 100w 字转换所需时间 | 内存溢出转换失败 | 595.131ms | 570.994s | +| 对比项 | pinyin | @napi-rs/pinyin | pinyin-pro | +| ------------------- | ------------------------------------ | --------------- | ---------- | +| 准确率 | Node 版:97.844%
Web 版: 94.507% | 97.433% | 99.744% | +| 5k 字转换所需时间 | 489.252ms | 115.723ms | 5.909ms | +| 1w 字转换所需时间 | 511.573ms | 115.887ms | 15.260ms | +| 100w 字转换所需时间 | 内存溢出转换失败 | 570.994s | 595.131ms | +| 是否支持 Node 环境 | ✅ | ✅ | ✅ | +| 100w 字转换所需时间 | ✅ | ❌ | ✅ | -### 反馈 +### 📞 反馈 使用遇到问题或者需要功能支持欢迎提 issue。 diff --git a/benchmark/accuracy.js b/benchmark/accuracy.js index 577fe1d..50f7c96 100644 --- a/benchmark/accuracy.js +++ b/benchmark/accuracy.js @@ -6,18 +6,26 @@ const correctPinyin = `dà hǎi shēn chù de yī tiáo měi rén yú yī zhí d const text = `大海深处的一条美人鱼一直对大海之外的世界充满了好奇,她一直想要出去看看海之外的世界,她的父母兄弟姐妹们却告诉她海以外的世界非常险恶,人心非常险恶,如果人类发现她美人鱼的身份她就会陷入非常危险的境地,他们劝告她不要出去。她不相信,她觉得自己有能力保护好自己,等她玩一段时间她就回来,否则这始终会是她心里的一个遗憾,她不想在大海里局限的过完这一生。一天,她趁家里不注意偷偷溜上岸,幻化成人型,向离海越来越远的地方走去,美人鱼的美貌所到之处皆换来一阵惊叹,但她不知道的是她的身后一直跟着一个人,从她上岸的那刻开始。身后跟着的男人越来越接近她,在她毫无防备的情况下走向她,他打着想要跟她做朋友的名义与美人鱼交谈,美人鱼告诉他自己在家里是最小的所以自己叫小小,和家里闹了别扭就独自一人跑了出来,男人说:“我叫李浩博,你很有趣,我们可以做个朋友吗?”美人鱼心里非常高兴,没想到自己刚上岸这么快就有了朋友,单纯的美人鱼想也不想就答应了,天色渐晚,考虑到小小无处可去,李浩博问她是否愿意去自己家里先将就住着,小小想既然是朋友而且自己也没有去处就点了点头,等小小睡着后,李浩博走向一个偏僻的地方对着电话说了句又来了单生意,准备下,便挂了电话。第二天,李浩博问小小有没有工作,他可以给她介绍,小小好奇的问:“什么工作呀?”浩博对她说:“是可以让很多人知道你并且喜欢你的工作。”小小兴奋的答应了。吃过饭,浩博带她去了工作室签了协议,便将她交给了老师带她训练,每天唱歌,舞蹈的练习从未停止,虽然辛苦但为了让更多人认识她,她从不抱怨,浩博也每天忙完自己的事后就会来接她回家,会问她累不累,会给她做饭,一年之后她出道了,浩博帮她接了很多电视剧,电影,广告代言,小小的名气越来越大,粉丝越来越多,小小非常开心,浩博也一直担任着她的经纪人,慢慢的她越来越喜欢现在的生活,她甚至快忘了自己是条美人鱼,她觉得自己和其他人没有任何不同,也忘了要回到海里和海里的父母兄弟姐妹。她对浩博非常信任,他让自己做什么小小就会去做什么。虽然是一个新人,但她单纯,善良,娱乐圈里很多人都喜欢她,她的朋友也从开始的只有浩博变得越来越多,但她发现她对浩博却不再像是开始的朋友的情感,她好喜欢他,浩博对她也一直很好,小小觉得他应该也是喜欢自己的,她喝醉后他会照顾她,拍完戏累到不行的时候他会背她回家,她每天过的充实而又快乐,她好喜欢现在的生活,她希望一直像现在一样。每次接受采访,问到她与浩博是不是有不一样的关系,是不是已经在一起了,她总是笑笑,浩博跟她说对外必须说自己单身不然会影响她的发展,虽然她不在乎这些但是是浩博说的她只好答应,她觉得浩博这样做是为了保护她,十年过去,她已不再是当初刚出道的新人,手上的资源也越来越少,她想要安稳,想要浩博一直陪着她,可浩博和她在一起的时间越来越少,她对自己认为浩博也喜欢自己的想法动摇了,她问了好几次浩博喜不喜欢自己,他总是沉默或者找其他话题回避了这个问题,她想起之前一位前辈对她说的“期待所带来的满足感,最美好的,不是别人满足了自己的期待,而是我们满足了别人的期待。”“现在的我应该满足了他的期待了吧,我成为了他当初想让我成为的那种人,有了名气,可以给他带来财富,我不哭不闹,所有事情都听从他的安排,顺从他的心意,在他心里自己还有什么不好呢?”小小看着浩博想着。她觉得好累,每天不停的工作,完成他给她的每个任务,她想让自己好好休息一段时间,多一些和他相处的时间,她跟浩博说自己想休息一段时间,浩博想了想同意了,第二天她便宣布了自己将暂时退出娱乐圈,浩博送她回了家,他对她说明天带她去个地方就走了,她不知道他要带她去哪,但她相信他,她不知道他是什么时候回来的,他叫醒她的时候已经是第二天早晨了,一如既往地,他们一起吃过早餐,她跟在他身后来到一个从未来过的地方,这个地方好冷,他们一起走进去,她想要拉浩博,但他却突然跑开了,她愣在原地。一个铁制的笼子从天而降困住了她,她呆呆的望着浩博那张冷漠的脸,“我以为自己满足了你的期待,我以为我在你心里是不同的,我以为你起码对我是有一点喜欢的,我以为我们会一直在一起,我以为你会一直对我好的,原来,一切都只是我以为。为什么这么对我?”他冷冷地说:“因为你已经没有价值了,从一开始接近你就是为了利用你,就是为了让你给我赚钱,如果不是因为你对我来说是一笔巨大的财富,我怎么可能会去讨好你,说到底还是你太天真了,我说什么你都信。”小小现在才明白当初父母不让她上岸说的话,“你一开始就知道我的身份是不是?”“对,从你上岸的那一刻我就知道了,现在是你最后能发挥的价值了,也不枉我对你费心了这么多年。”“原来十几年的陪伴我在你眼里终究抵不过钱。”看着浩博决绝的转身离开的那刻小小哭的撕心裂肺,她后悔自己当初不管不顾的上岸了。`; const corrects = correctPinyin.split(' '); -// pinyin 包 +// pinyin 包 node 版 const resultOfPinyin = pinyin(text, { segment: true }); const resultsOfPinyin = resultOfPinyin.flat(); let errorsOfPinyin = 0; +// pinyin 包 web 版 +const resultOfPinyinWeb = pinyin(text); +const resultsOfPinyinWeb = resultOfPinyinWeb.flat(); +let errorsOfPinyinWeb = 0; + // pinyin-pro 包 const resultOfPinyinPro = pinyinPro(text, { nonZh: 'consecutive' }); const resultsOfPinyinPro = resultOfPinyinPro.split(' '); let errorsOfPinyinPro = 0; // @napi-rs/pinyin 包 -const resultOfNapiPinyin = nApiPinyin(text, { style: PINYIN_STYLE.WithTone, segment: true }); +const resultOfNapiPinyin = nApiPinyin(text, { + style: PINYIN_STYLE.WithTone, + segment: true, +}); const resultsOfNapiPinyin = resultOfNapiPinyin; let errorsOfNapiPinyin = 0; @@ -25,6 +33,9 @@ corrects.forEach((item, i) => { if (item !== resultsOfPinyin[i]) { errorsOfPinyin++; } + if (item !== resultsOfPinyinWeb[i]) { + errorsOfPinyinWeb++; + } if (item !== resultsOfPinyinPro[i]) { errorsOfPinyinPro++; } @@ -34,10 +45,15 @@ corrects.forEach((item, i) => { }); console.log( - 'pinyin 准确率:', + 'pinyin(Node版)准确率:', (1 - errorsOfPinyin / corrects.length) * 100 + '%' ); +console.log( + 'pinyin(Web版)准确率:', + (1 - errorsOfPinyinWeb / corrects.length) * 100 + '%' +); + console.log( 'pinyin-pro 准确率:', (1 - errorsOfPinyinPro / corrects.length) * 100 + '%' diff --git a/benchmark/package.json b/benchmark/package.json new file mode 100644 index 0000000..ca7cd0e --- /dev/null +++ b/benchmark/package.json @@ -0,0 +1,15 @@ +{ + "name": "benchmark", + "version": "1.0.0", + "private": true, + "devDependencies": { + "@napi-rs/pinyin": "^1.7.1", + "pinyin": "^3.0.0-alpha.4" + }, + "scripts": { + "test": "echo \"Error: no test specified\" && exit 1" + }, + "keywords": [], + "author": "", + "license": "ISC" +}