Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

关于拼音匹配引擎的疑惑 #3

Open
yugasun opened this issue Sep 18, 2017 · 10 comments
Open

关于拼音匹配引擎的疑惑 #3

yugasun opened this issue Sep 18, 2017 · 10 comments

Comments

@yugasun
Copy link

yugasun commented Sep 18, 2017

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

@1021683053
Copy link
Contributor

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

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

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

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

@yugasun
Copy link
Author

yugasun commented Dec 18, 2017

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

@1021683053
Copy link
Contributor

1021683053 commented Dec 18, 2017

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

@yugasun
Copy link
Author

yugasun commented Dec 18, 2017

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

@1021683053
Copy link
Contributor

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

@1021683053
Copy link
Contributor

@yugasun
image

@yugasun
Copy link
Author

yugasun commented Dec 19, 2017

@1021683053 非常感谢,明白了~

@aui
Copy link
Owner

aui commented Dec 19, 2017

@1021683053 正解

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

@hoelshen
Copy link

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

@ouyangke584
Copy link

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

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

5 participants