pinyin-engine icon indicating copy to clipboard operation
pinyin-engine copied to clipboard

关于拼音匹配引擎的疑惑

Open yugasun opened this issue 6 years ago • 10 comments

首先,非常感谢github上您贡献的 pinyin-engine 库,最近也在研究学习,但是有个问题,希望您能帮忙解答下,就是:源码中的 dict-cn.json 文件是如何生成的,而且 decode.js 文件是专门用来解码这个字典json的,这个加密过程是如何实现的?

yugasun avatar Sep 18 '17 09:09 yugasun

我来回答你吧。大神估计时间少。

回答你第一个问题:加密过程是如何实现的? 这不是加密。

1, 汉字存储方式:Unicode (你需要知道编码方式)Unicode 中文对照表。 2, 汉字拼音对照表:中文拼音对照表 3, 实现数据最少量存储

dict-cn.json实现方式: 1, 所有拼音集合。 2, 所有字符岁对应拼音的位置+Unicode编码(用一个array存储两个内容使用的很巧妙,使用偏移量,因为中文中使用的Unicode大多数都是连续性的)

1021683053 avatar Dec 18 '17 09:12 1021683053

@1021683053 你这个是存储方式和解码原理,看源码 decode.js 可以理解,但是我想确认生成 dict-cn.json的方式, 难道大神是按照这个逻辑,反编码加密的?

yugasun avatar Dec 18 '17 10:12 yugasun

@yugasun 我说的是中文Unicode 有区间,按照字符区间最小值往上加,把所有字全部遍历一遍,可以得出dict-cn.json dict-cn.json 实现方式: 相当于两个数组: [0]: 字符编码起始,与保存拼音位置。(正数为拼音位置 , 负数为下一次中文编码偏移) [1]: 所有拼音集合 与 [0] 的值一一对应。 按照这两个规则很容易生成。 你看了Decode.js 你应该会懂怎么生成。

1021683053 avatar Dec 18 '17 10:12 1021683053

@1021683053 非常感谢耐心解答,具体怎么,就是想知道大神自己的实现方式,为什么会使用这种加密方式,思路是什么? 不用加密,直接输出 decode.js 解密后的中文字典json岂不是更好?为什么还要加密一次,再解密?

yugasun avatar Dec 18 '17 11:12 yugasun

包的体量是要考虑的,你这是给前端用的!

1021683053 avatar Dec 18 '17 11:12 1021683053

@yugasun image

1021683053 avatar Dec 18 '17 13:12 1021683053

@1021683053 非常感谢,明白了~

yugasun avatar Dec 19 '17 01:12 yugasun

@1021683053 正解

经过这样编码后,服务器开启 gzip 后 dict-cn.json 就只有 16kb 了

aui avatar Dec 19 '17 06:12 aui

怎么将自己的数据换成项目中的大学?之后要怎么使用呢

hoelshen avatar Mar 27 '18 01:03 hoelshen

看大神们聊天,小弟颇受震撼😂

ouyangke584 avatar Jan 05 '22 05:01 ouyangke584