diff --git a/README.md b/README.md
index df59b8c..17d64c1 100644
--- a/README.md
+++ b/README.md
@@ -8,13 +8,13 @@
[](https://opensource.org/licenses/MIT)
[](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"
+}