其实很简单无聊



基于版本 5.3 分析。

其实也简单分析了有道词典iOS版本,必应词典的各个版本,以及金山词典的各个版本,还有那个一直逍遥法外的林格斯词典。

由于在各个平台上的限制,同一词典的不同版本大多都采用了不用的实现方式。



一般 PC 版和 iOS 版本都有一定程度的加密,而 Andriod 版本则比较单纯。可能是 Andriod 硬件千差万别,不敢做额外消耗 CPU 的处理。



基本索引和词典分开

这是大多数词典都干了的事情,包括 PC 本地词典。基本索引就是在输入的时候给与下拉提示的部分,一般会给几个备选的单词以及非常精简的释意。

而真正查询某个词的时候,则单独调用其他本地词典,已经网络 API。性能的考虑,很好理解。

这个“基本索引”,在不同词典上实现不一。必应词典使用 sqlite,有道词典使用分割的文本文件。Sqlite 很好理解,有道词典选择本地文件,可能是为了省内存。



iOS 版本上,大家对基本索引处理比较自在。

如有道词典 iOS 版本,这个基本索引是放在两个巨大的数据文件里,加起来有40MB,可想而知为什么有道词典的 iOS 版本为什么比较慢,可能测试机的性能较好,他们无所谓。





有道词典的索引文件

有道词典选择本地文件存索引数据,可能是为了省内存。嗯,毕竟现在一些无聊软件,专门给你列内存占用列表。

这方案的确可行,因为现在手机使用的存储并不慢,把数据分割,用哪块取哪块,也不慢,而且内存占用极小。

整个数据大概40MB,有道把他们分成256块,中到英128块,英到中128块。

每块呢有两个文件,一个idx相当于单词列表,一个def,相当于词典。这也很好理解,在idx里找到了词,那么在def里,对于的位置就能找到具体数据。此外还有一个块的索引,列出了每个文件的第一个单词。



从需求的角度,当你输入一个东西,需要给与提示。需要使用 1 到 2 个块(因为输入的内容可能刚好在块的边缘),那么从数学角度,占用内存大概是 400K,这比40MB 还是差很远的。而实际上,英中词典并不大,一般仅有
60000-100000,这样的数据量就算线性处理都是非常快的,如果加上简单的索引,完全没有必要调用第三方数据库。



IDX 和 DEF 格式

IDX 格式和 DEF 格式也是非常简单。是一种在流处理里很常见的方式:{长度+字符串} 的数组。大端16位数字代表长度,后面跟着的是与这个长度相符的字符串。

IDX 文件里,这个字符串就是单词,而在 DEF 里,这是个 json 格式。

以 DEF 为例,可以使用PHP这样读取

$count = 0;
for ($i=0; $i<128; $i++) {
$file = fopen('e2c_'.$i.'.def', 'r');
while($head = fread($file, 2)) {
// 之前做过预判,没有异常数据
$size = unpack('n', $head)[1];
$string = fread($file, $size);
$dict = json_decode($string, TRUE); // 这个 dict 就是单个词典的数据
$word = $dict['word'][0]['return-phrase']['l']['i'];
// 单词
echo $word."\r\n";
foreach ($dict['word'][0]['trs'] as $tr) {
$tr = $tr['tr'][0]['l']['i'][0];
// 解释(可能有多个)

额外地,这些 JSON 数据冗余严重,简单的处理完全可以减少到 30MB。

有道词典 Andriod 版本数据格式分析的更多相关文章

  1. 有道词典 纯净版 - imsoft.cnblogs

    软件名称:有道词典软件版本:5.4 正式版(5.4.46.5554)软件主页:http://cidian.youdao.com/软件定制:飞扬时空更新日期:2013年8月26日 软件简介: 有道词典是 ...

  2. 必应词典手机版(IOS版)与有道词典(IOS版)之软件分析【功能篇】【用户体验篇】

    1.序言: 随着手机功能的不断更新和推广,手机应用市场的竞争变得愈发激烈.这次我们选择必应词典和有道词典的苹果客户端作对比,进一步分析这两款词典的客户端在功能和用户体验方面的利弊.这次测评的主要评测人 ...

  3. Teamwork-Week2真对必应词典和有道词典的软件分析和用户需求调查(桌面版)

    经调查,现在有道词典在该领域拥有很大程度的市场占有率,所以我们将有道词典与必应词典进行对比. 核心功能一:单词本 有道词典中的单词本都只能是由用户手动添加不会的单词,而必应词典中的单词 不仅可以被自己 ...

  4. 必应词典手机版(IOS版)与有道词典(IOS版)之问卷分析

    我们制定了一个调查问卷: 1.年龄分布: 2.地域分布: 3.是否用过必应词典? 对于必应词典还是没用过的人数更多. 4.是否用过有道词典? 有道词典的使用率更高一点. 5.对于必应的基本功能给几分? ...

  5. Week2 Bing词典Android客户端案例分析

    一.软件调研 运行平台:Android 4.4.4 必应版本:5.2.2 1.bug发现 1.1 bug标题:单词挑战无法加载和刷新 bug详细描述:学习界面中的单词挑战模块,点击后没有任何反映,并且 ...

  6. 微软必应词典客户端的案例分析——个人Week3作业

    第一部分 调研,评测 Bug探索 Bug No1.高亮语义匹配错位 环境: windows8,使用必应词典版本PC版:3.5.0 重现步骤: 1. 搜索"funny face"这一 ...

  7. ubuntu16.04安装不上有道词典的解决办法

    转自:http://www.linuxdiyf.com/linux/21143.html ubuntu16.04安装不上有道词典,提示: le@hu-pc:~/下载$ sudo dpkg -i you ...

  8. 爬虫破解js加密(一) 有道词典js加密参数 sign破解

    在爬虫过程中,经常给服务器造成压力(比如耗尽CPU,内存,带宽等),为了减少不必要的访问(比如爬虫),网页开发者就发明了反爬虫技术. 常见的反爬虫技术有封ip,user_agent,字体库,js加密, ...

  9. 个人博客作业Week3(微软必应词典客户端的案例分析)

    软件缺陷常常又被叫做Bug,即为计算机软件或程序中存在的某种破坏正常运行能力的问题.错误,或者隐藏的功能缺陷.缺陷的存在会导致软件产品在某种程度上不能满足用户的需要.IEEE729-1983对缺陷有一 ...

随机推荐

  1. 「UVA1328」Period 解题报告

    English题面 题意: 给你一个长度为n的字符串,依次取字符串前i个(前缀),如果前缀由k(k>0)个相同真子串构成,那么输出i和k 直到n为0结束,每组数据后要有一行空白 思路: KMP+ ...

  2. docker-tmpfs挂载

    使用tmpfs挂载 卷和绑定装置允许在主机和容器之间共享文件,以便即使在容器停止后也可以保留数据. 如果你在Linux上运行Docker,你有第三个选择:tmpfs mounts.使用tmpfs装载创 ...

  3. SpringCloudAlibaba通过jib插件打包发布到docker仓库

    序言 在SpringBoot项目部署的时候,我了解到了Jib插件的强大,这个插件可以快速构建镜像发布到我们的镜像仓库当中去.于是我打算在毕设当中加上这个功能,并且整合到github actions中去 ...

  4. Sorted 内置函数的排序使用

    Sorted 内置函数的排序使用 Sorted 排序列表 1.倒序对列表进行排序 # 对列表进行降序序排序 list = [1,3,4,23,6,7] list = sorted(list,rever ...

  5. 手把手带你了解消息中间件(2)——RabbitMQ

    RabbitMQ官网: http://www.rabbitmq.com/ Erlang官网:https://www.erlang.org 友情提示:RabbitMQ基于Erlang语言开发的,要想使用 ...

  6. vue开源Element UI表单设计及代码生成器

    在日常的开发工作中,表单开发是较为繁琐且重复的.本文介绍一个我自己写的,提高开发效率的小工具. 1 可视化设计器 设计器基于Element UI ,可通过点击或拖拽的方式设计基本表单, 设计器生成的代 ...

  7. 《C++Primer》第五版习题详细答案--目录

    作者:cosefy ps: 答案是个人学习过程的记录,仅作参考. <C++Primer>第五版习题答案目录 第一章:引用 第二章:变量和基本类型 第三章:字符串,向量和数组 第四章:表达式

  8. 【Java基础总结】GUI

    GUI(Graphical User Interface),图形用户接口 CLI(Command Line User Interface),命令行用户接口 1. 容器 Container GUI主要位 ...

  9. MySQL 物理备份工具-xtrabackup

    安装 wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo yum -y install perl ...

  10. 2019-2020春江云暖你先知,CAE/EDA/高校等CloudHPC领域年均复合增长率超21%

    原创: 灵魂工作室 速石科技 我猜,我们是最早和你说春天来了的人. 一年前,我们还在小心谨慎地定义着Cloud HPC,一脸娇羞地拿Novartis 诺华制药在5年前做的案例当作标杆. 不久前,Hyp ...