tag: FF朗文5++, 朗文英汉,LDOCE,朗文当代,朗曼词典
词典数据来源于 掌上百科论坛 的 [英汉] 朗文5++ ·双解·例句发音(更新V1.35 2018/01/30) 帖子。https://www.pdawiki.com/forum/forum.php?mod=viewthread&tid=22389
Note:此贴需要一定等级才可以浏览,刚注册无法查看。
朗文5英汉双解是一部非常优秀的词典,例句发音 功能更是锦上添花,深得无数英语学习者的垂帘。从论坛下载到的是mdx格式的词典文件,适用于GoldenDict、欧路词典和MDict软件,但不支持我大Mac的 Dictionary。萌生了将mdx转成Mac原生词库的想法,这样既有原生 Dictionary 的良好体验,支持三指取词,又实现了下拓展词库的完善功能。
贴几张在Mac Dictionary中的靓照开头:
以下是MDX词库在欧陆词典上的效果:
词典介绍
FF朗文5++辞典其实是包括了三部辞典,一部是朗文当代双解第五版,一部是朗文当代Online(LDOCE Online),例句前有喇叭标志的都是可以发音的例句。LDOCE Online, 以个人的观察理解,应该是朗文当代这一产品的最新版本,两部词典绝非简单的拼凑在一起,二者内容互相交织于同一页面的并通过开关及标志区分,你可以在同一个页面上看到这两部词典有哪些不同,有哪些内容是Online新增的,有哪些内容是双解独有的,因此本产品得名5++。另外一部词典是 Longman Business Dictionary。
本产品页面为online的克隆版,所谓【克隆】, 就是说页面直接来自于online,之后经过深度剪裁与加工而成。本产品坚持尽最大可能地使用最源头的素材,因此绝大部分配音,图片也都来自online。online部分收词量覆盖双解5,LDOCE ENGLISH 5 以及 LDOCE ENGLISH 6全部词汇。
中文来自网上一个有很多大道理的地方(以下用wy简称这个地方),依据字典对wy数据进行了大量修订和补充,wy缺少的单词据字典手工录入。wy数据英文部分以及整体结构一塌糊涂,属于如果收费绝对可以去索赔的范畴,但中文部分完整度还不错。
本产品携带三套图片,一套来自online, 一套来自LDOCE 5 , 某些如形容词类的图片,online版本已经删除,第三套图片来自wy双解版,这套图片实际上是前两套的组合和拼凑,但带有中文翻译。
本产品包含了 longman corpus 的内容,通俗点,就是一大波无配音无翻译的原生态例句。
Mdx词库转 Mac Dictionary 方法
非DIY爱好者 请直接移步文章末尾,扫码二维码下载 Mac 词库。
Mac 官方关于词典格式的说明文档:Dictionary Services Programming Guide
依赖软件
- PyGlossary:最新3.1 Releases见PyGlossary 3.1.0
- 读取 Mdict (MDX) 词库:
sudo pip3 install python-lzo
- 写入到 AppleDict:
sudo pip3 install lxml beautifulsoup4 html5lib
- spx音频转为MP3:
brew install speex
- 其他Mac OS X 工具:
- GNU make as part of Command Line Tools for Xcode.
- Dictionary Development Kit as part of Auxillary Tools for Xcode.Extract to
/Developer/Extras/Dictionary Development Kit
转换过程
- mdx 反解析
进入到Mdict词库所在目录,执行命令将词典文件转换成 xml 文件,并将其他图片、音频等文件提取出来放在OtherResources文件夹下。
python3 ~/Applications/script/pyglossary/mail.py --write-format=AppleDict "./LDOCE5++ V 1-31.mdx" ldoce5-EnCn
- spx语音转换
词典内包含部分 spx 文件,需要先将其转换成 wav 格式,这里用到的软件是 speex,如果 brew 安装失败,可以在这里下载程序:https://download.csdn.net/download/qq252101792/10504089
find OtherResources -name "*.spx" -execdir sh -c 'spx={};speexdec $spx ${spx%.*}.wav' \;
然后使用FFmpeg把wav文件转换成mp3文件(macOS中默认的iTunes与QuickTime均不支持wav格式)。
for x in ./OtherResources/*.wav; do ffmpeg -i "$x" "Sounds/`basename "$x" .wav`.mp3"; done
- 编译&安装
make
make install
- 图片&音频拷贝
将提取的 OtherResources 文件夹下的图片和音频拷贝到 ldoce5-EnCn.dictionary/Contents
目录下
词典文件其他问题修复
上述步骤转换的词典可能存在很多问题,例如毫无排版可言,无法显示图片,无法播放语音,词典内链接跳转不正确,单词跳转不正确,JS失效等问题。
- 毫无排版可言及JS失效
FF大神的朗文5++词库包含不少需要JS配合的内容,例如隐藏了Word family,隐藏了Online内容,隐藏了corpus,隐藏了Longman Business Dictionary内容,隐藏了语法、用法、搭配,更要命的是很多基本释义的例句也隐藏了。Mac Dictionary不支持JS导入,所以需要通过CSS一一将隐藏的内容显示出来。
使用修改后的 CSS 文件覆盖 ldoce5-EnCn.dictionary/Contents/DefaultStyle.css
文件即可。
- 无法显示图片,无法发音
这个原因是由于跳转的超链接不正确引起的,假设xml文件中为:
<a href="x-dictionary:d:sound://1.spx"><img border="0" src="Br.gif"/></a>
可替换为
<audio id="1" src="Sounds/1.mp3"/><img border="0" src="Br.gif" onmousedown="document.getElementById('1').play(); return false;"/>
onmousedown
可替换成 onmouseover
,这样鼠标悬浮上发音图标就开始发音,而不用单击。
- 修复词典中的链接跳转问题。
假设xml文件中为:
<a href="x-dictionary:d:entry://hour">hour</a>
可替换为:
<a href="x-dictionary:d:hour">hour</a>
- 修正词典中页面内的定位问题
例如点击apple1会跳转到同一个页面中的apple2处。
<a href="x-dictionary:d:entry://#_hke1">apple1</a>
<a name="_hke1">apple2</a>
将其替换为
<a href="#_hke1">apple1</a>
<a name="_hke1">apple2</a>
其他注意事项
以上每个词典文件中的具体模式均不太一样,而且有时会有与一般模式不同的个例(如多加了几个空格、标签间加了个
、中间换了一行、图片大多是png个别是gif等等),需要一一调试。
- 空格
连续两个粗体单词之间的空格会不显示。例如
<b>apple</b> <b>pie</b>
会显示为applepie。此时将其替换为
<b>apple</b> <b>pie</b>
xml 中如果含有
需要将其替换成普通的空格字符,另外有时xml中会有 &nbsp;
,原意应显示为空格,却显示为
。此时将其替换为  
就好。
- CSS样式文件
若文件夹中有其它CSS文件,或者原来CSS文件就独立于MDX文件之外,将其内容复制到词典文件包中的DefaultStyle.css文件中。
- 深色模式
Mac osx 10.15 中不需要做特殊处理, 但是 10.14 的深色模式中显示有问题,转换的词典背景颜色依旧是白色,这可以通过修改词典包内容中的DefaultStyle.css文件解决。具体参考Make Mojave custom dictionaries work better。
- 取词小窗口修改大小
若取词小窗口中字体太小,可在词典包内容中的DefaultStyle.css文件中加上以下内容:
.apple_client-panel body{margin: 0 0 15px;font-size: 16px;}
- 高亮搜索关键词
Dictinary还支持高亮搜索关键词、家长控制功能等等,参考Dictionary Services Programming Guide。
- 其它问题
将 @@@LINK=abc
替换成 <a href="x-dictionary:d:abc:dict_bundle_id">abc</a>
.
如果图片无法正常显示,将相对路径名最前面的/去掉,例如将 <img src="/dir/abc.png"/>
替换成 <img src="dir/abc.png"/>
.
由于macOS的Dictionary中鼠标悬浮于某一内容之上时会将其视作一个span,如果CSS中原本就有应用于所有span的样式,会把该样式应用于鼠标经过的区域。这样鼠标经过的区域会有很奇怪的样式。解决办法是在原有span中加一个class,并把原来span的样式归到新建的class中。