Board logo

标题: [原创教程] 有道离线字典的拆解 [打印本页]

作者: 523066680    时间: 2016-6-7 11:41     标题: 有道离线字典的拆解

本帖最后由 523066680 于 2016-6-8 22:42 编辑

去年就开始拆了,发现译文信息里一部分翻译是明文,一部分又是给出了另一个字典的索引
要自己挖,还分层的挖,烦了就停了。今年想起来又接着搞,挖成明文后对数据格式化,改
成Perl的hash/array复合结构。分成了五六个脚本吧,拆解部分不一一张贴,主要说方法。

准备

分析



解码:


现在回去看idx文件:

好像也是通过对半截取的方式,找到了对应的单词,因为,如果单词或者索引删掉了,会导致搜不到。
(去年探索的,具体忘了。。。)加密方式和译文的一样。

总结:
     idx文件,第一部分为索引,索引数据长度 = 352431(单词量) * 12(数据段) = 4229172
4个字节为一个值,低位在前。后面部分为单词,单词部分没有划分符,根据索引进行提取划分,
单词部分采用非常简单的加密:高位奇数时-1,偶数时+1

00 00 00 00 第一单词起点
00 00 00 00 译文起点
16 00 00 00 译文长度
06 00 00 00 第二单词起点
16 00 00 00 译文起点
16 00 00 00 译文长度
0b 00 00 00 。。。
2c 00 00 00
16 00 00 00

拆解
此处略过,因为是不同时间去折腾的,分了多个脚本和步骤,再整理一遍真是烦

转为明文后的字典下载地址

http://523066680.ys168.com/ [临时]文件夹
Youdao_En_Cn_PerlStruct 202016-06.7z
Youdao EN2CN OneFile 2016-06.7z

字典搜索示例
  1. use Encode;
  2. use YAML 'Dump';
  3. my $PATH = "D:\\Local\\Dict\\Youdao\\Analyse_EC";
  4. open READ,"<:raw", "$PATH\\EN2CN.txt";
  5. my $s;
  6. our $data;
  7. while ($s = <READ>)
  8. {
  9.     if ($s=~/^words :/i)
  10.     {
  11.         $s=~/^(.+) \: (.*)\r?\n/i;
  12.         eval "\$data = $2";
  13.         delete $data->{'pr'};      #不显示“相关词组”信息
  14.         print utf8_to_gbk( Dump($data) );
  15.     }
  16. }
  17. close READ;
  18. sub utf8_to_gbk
  19. {
  20.     return encode('gbk', decode('utf8', $_[0]));
  21. }
复制代码
显示结果
---
e:
  - n. 字(word的复数);话语;言语
  - v. 用言语表达(word的三单形式)
p: w?:dz


音标包含一些gbk以外的符号,在终端显示不全
作者: 523066680    时间: 2016-6-7 12:13

本帖最后由 523066680 于 2016-6-7 12:38 编辑

我觉得我花了好多时间做了一件非常没有意义的事情……  但是做了又想把它做完整。
现在我可以在终端快速取词了 grep也行,perl脚本也行(平均0.5秒),后台不需要多开一个翻译软件,不需要网络通畅

感谢有道词典没有用什么更进一步的加密。
其他离线字典比如词霸、图灵格斯、bing、海词 的,因为知识量不够所以放弃了
作者: codegay    时间: 2016-6-7 16:23

本帖最后由 codegay 于 2016-6-7 16:28 编辑

你真是太NB了。

sqlite3的应用很普遍。
这篇博客写的5.x 有点老了。http://www.cnblogs.com/catcherx/p/3269628.html

sentenceDict.sql 里的东西是什么?
作者: 523066680    时间: 2016-6-7 17:39

本帖最后由 523066680 于 2016-6-7 17:42 编辑

回复 3# codegay


    sentenceDict.sql  全是句子,记得当时也用数据库软件打开看过。明文。
作者: happy886rr    时间: 2016-6-7 17:56

厉害,要是战争年代就是密码破译的天才。
作者: happy886rr    时间: 2016-6-7 17:58

回复 3# codegay
sqlite相当不错,安卓几乎都是这种轻型数据库。功能单一,很适合做单机。
作者: ak47ok    时间: 2020-2-23 14:44

可惜没有现成程序
作者: ak47ok    时间: 2020-2-23 14:45

灵格斯有现成的软件搞定




欢迎光临 批处理之家 (http://www.bathome.net/) Powered by Discuz! 7.2