如何把 MDX 格式词典转换成 MOBI 格式的 Kindle 字典
注意,本文提供的方法某些步骤依赖 Windows 系统,如你使用的是其它系统(如 macOS),可参考《PyGlossary:将其它格式的字典转换成 Kindle 字典》这篇文章提供的跨平台解决方案。
目前 Kindle 字典资源(尤其是小语种字典)还不算太丰富,其来源除了亚马逊官方为 Kindle 提供的一些字典外,就是第三方机构制作或网友自制的字典了。而网友自制的字典,大部分都是通过其它字典格式转换而来,毕竟除非是专业从事制作字典工作的,手工录入词条不太现实。
本文要介绍的便是转换 Kindle 字典的一种方法,即把 MDX 格式的词典转换成适用于 Kindle 的 MOBI 格式字典。MDX 也是一种字典格式,而且相比 Kindle 的 MOBI 格式字典,资源更为丰富一些,你可以通过相关的资源站点(如PDAWIKI、星际译王词库、OwnDict)下载 MDX 词典资源,也可以通过搜索引擎搜索“mdx词典”寻找 MDX 词典资源。本文同样适用于 StarDict 字典的转换。
只要你有 MDX 词典文件或其源文件(包含 dict、idx 和 ifo 三个文件),就可以通过下面的方法将其转化成 Kindle 字典。感谢 Kindle 伴侣交流 QQ 群(一群)的小伙伴 @汪星人 提供的转换步骤,以下内容便是以此为蓝本修缮而成。本教程仅适用于 Windows 系统。
一、准备工作
转换过程中需要用到以下软件,请点击链接下载备用。
- GetDict.exe:百度网盘 * 转换 StarDict 字典可不下载
- python:官方下载 * 请安装 2.7.x 版本,如果系统已安装请忽略
- tab2opf.py:百度网盘【提取码:
7eib
】 - mobigen.exe:百度网盘
- StarDict:百度网盘
二、转换步骤
下面以 MDX 格式的“牛津高阶英语词典(第8版)”举例说明(你也可以使用自己下载到的 MDX 词典文件),详细演示如何一步一步地将其转换成 MOBI 格式的 Kindle 字典。
1、将 MDX 字典转换成 MDX 源文件
运行程序 GetDict.exe。在“选择MDX词典”这项中,点击【浏览…】选择准备好的 MDX 文件,如“牛津高阶英语词典(第8版).mdx”;在“转出文件”这项中,点击【浏览…】选择字典源文件输出路径,建议新建一个文件夹,如“oa8”,输入文件名,如“oa8”,点击【保存】按钮;其它选项保持默认,点击【开始转化】按钮,在弹出的对话框“词典名称”中输入词典的名称,如“oa8”,点击【确定】按钮开始转换。
转换完毕后,在“oa8”这个文件夹中会出现 oa8.dict、oa8.idx 和 oa8.ifo 三个文件。
注意,如果你下载到 MDX 词典本身就是源文件的形式,则可以忽略上面的步骤。不过如果遇到词典源文件后缀为 .dict 的文件后还有一个 .dz,如“***.dict.dz”,需要将 dz 重命名为 gz,并用 7-zip 软件解压,得到“***.dict”文件,然后将后缀名为 .dict 的文件名重命名一下,和其他两个文件的文件名统一起来。
2、将 MDX 字典转换成 TXT 文件
解压缩下载到的“StarDict.zip”,运行文件夹里的“stardict-editor.exe”,切换到“DeCompile/Verify”标签,点击【browse…】按钮,选择“oa8”文件夹中的后缀名为 .ifo 的文件。然后点击【Decompile】按钮,稍候片刻。直到出现提示信息“Done!”,即表示转换成功。
此时“oa8”文件夹中会出现一个转换得到的名为“oa8.txt”的文本文档。
建议检查一下这个文档的内容是否显示正常,如果出现了乱码,请将其更改成正确的编码再保存。否则,后面转换字典文件时出现类似“Source file is not valid UTF8.
”的错误提示。
3、将 TXT 文件 转换成 MOBI 源文件
把 tab2opf.py 拷贝到“oa8”文件夹内。打开“命令提示符”,并用 cd 命令切换到“oa8”目录下,输入以下命令(如果已将 python 添加到环境变量则无需输入 python 的全路径):
C:\python27\python.exe tab2opf.py -utf oa8.txt
等待命令运行完毕之后,在“oa8”文件夹下会出现一个 .opf 文件和几个 .html 文件。用记事本或代码编辑器打开其中的 .opf 文件,然后找到如下所示这段代码:
<metadata>
<dc-metadata>
<dc:Title><h2>oa8</h2></dc:Title>
<dc:Language>en</dc:Language>
<dc:Identifier id="uid">oa8</dc:Identifier>
</dc-metadata>
<x-metadata>
<DictionaryInLanguage>en-us</DictionaryInLanguage>
<DictionaryOutLanguage>en-us</DictionaryOutLanguage>
</x-metadata>
</metadata>
请按照下面的提示说明(红色字符部分)修改上面所示代码:
<dc:Title><h2>词典的名字</h2></dc:Title>
<dc:Language>词典的语言</dc:Language>
<DictionaryInLanguage>输入的语言</DictionaryInLanguage>
<DictionaryOutLanguage>输出的语言</DictionaryOutLanguage>
其中“词典的名字”即是 Kindle 字典的正式名称,如本例中可将其修改为“牛津高阶英语词典(第8版)”。词典的语言一般不用修改,关键在于输入和输出的语言。如果是英汉词典,输入为英语 en-us,输出为汉语 zh;同理,如果是日中词典,则输入为日语 ja,输出为汉语 zh。
* 提示:language
标签中的“语言代码”需符合 RFC5646 标准(来源),如 en
、zh-CN
,DictionaryInLanguage
和 DictionaryOutLanguage
标签中的“语言代码”需符合 ISO 639-1 标准(来源),如 en
,可附加区域性代码,如 en-us
。
修改完毕后,另存为,文件名不要改动,在“编码”选项中选择“UTF-8”,然后点击【保存】按钮。
* 提示:在此步骤中使用 tab2opf.py 进行转换可能存在变形词无法识别、词典过大的问题,为达到更好的转换效果,Windows 用户可以尝试网友开发的转换软件 MDictindle。
4、将 MOBI 源文件转换成 MOBI 文件
把 mobigen.exe 拷贝到“oa8”文件夹内。把刚才生成的那个 .opf 文件拖放到 mobigen.exe 文件上,mobigen.exe 就开始将 MOBI 源文件转换成 MOBI 文件了,转换所需时长根据字典大小而有所不同。
最终得到的 MOBI 格式文件就是转换好的字典文件了。将其拷贝到 Kindle 中即可使用。
注意,在转换的过程中会出现类似“Warning(prcgen):Some syntax error happend in a script …”或“Error: Unexpected token found”之类的提示,这是因为源文件中有一些 javascript 脚本,在转化的过程中被 mobigen 忽略掉了。经过测试不影响最终生成字典文件的使用。
三、已知问题
通过此方法转换的字典,其查询是严格匹配,不支持模糊检索,所以会导致单词变形无法匹配。
© 「书伴」原创文章,转载请注明出处及原文链接:https://bookfere.com/post/308.html
延伸阅读
- 亚马逊即将发布 Kindle Paperwhite 5 及其 Signature 版
- Ebook Translator:用 Calibre 翻译多格式双语对照电子书
- Kindle 进化史:一块黑白电子墨水屏打天下
- [2019.03.27] Kindle Paperwhite 4 固件升级至 5.11.1
- [每周一书]《自品牌》把自己当成品牌来经营
- [重要通知] 亚马逊强制升级老 Kindle 设备固件
- 查词时 Kindle 字典在中英文电子书中的不同表现
- 入门版 Kindle 12 愿望清单:所有我希望看到的新特色
- [每周一书] 科学探究《为什么学生不喜欢上学?》
- [每周一书]《私人生活的变革》乡村的情感与道德世界
- [每周一书]《身份的焦虑》渴望得到社会认同
- 亚马逊 Kindle 自助出版指南:向数百万读者分享你的故事
- 在屏读时代与无序的知识和解
- Calibre 使用教程之通过邮箱一键推送 Kindle 电子书
- [每周一书]《批判性思维》做一个独立思考的自由人
我想问下,我下载了第三方做好的mobi格式字典,但是我想要改一下在kindle里面显示的字典名称,要怎么操作呢?
. txt转. opf,不太明白,可以再简单点吗?
如果你要用 tab2opf.py 转换,先安装 Python,然后打开命令提示符,把 python.exe 拖放到命令提示符上,输入一个空格,把 tab2opf.py 文件拖放到命令提示符上,输入一个空格,输入 -utf,输入一个空格,把 TXT 文件拖放到命令提示符上,按回车进行转换。
如果你要用 MDictindle.exe 转换,打开命令提示符,把下载到的 MDictindle.exe 拖放到命令提示符上,输入一个空格,把 TXT 文件拖放到命令提示符上,按回车进行转换。
D:\StarDict>D:\StarDict\MDictindle.exe
A fatal error occurred. The required library hostfxr.dll could not be found.
If this is a self-contained application, that library should exist in [D:\StarDict\].
If this is a framework-dependent application, install the runtime in the global location [C:\Program Files\dotnet] or use the DOTNET_ROOT environment variable to specify the runtime location or register the runtime location in [HKLM\SOFTWARE\dotnet\Setup\InstalledVersions\x64\InstallLocation].
The .NET runtime can be found at:
– https://aka.ms/dotnet-core-applaunch?missing_runtime=true&arch=x64&rid=win10-x64&apphost_version=6.0.5
这是怎么弄?
需要下载安装软件依赖的 .NET runtime。
安装好了,重新运行还是出现这个代码
https://wwdm.lanzouo.com/b031txslg
密码:a54d
谁能帮转换格式?
第三步的代码输出运行错误,怎么处理
求教怎么把kindle的mobi或者prc格式转回koreader能用的StarDict格式字典啊。。。kindle好多网友自制的字典比原版要精简好多,去掉了一些kindle上用不到的东西。比网上找的原版StarDict字典好多了。。。就是不知道怎么转。。。求教
同求
尝试了很多次,把牛津第10版转换,最后都是得到一个0字节的mobi格式,大佬怎么解决
stardict 显示GLib-ERROR **: gmem,c:170: failed to allocate 1396359627 bytes aborting…
verify的时候说词典已损坏,不要使用它,但是我导入进欧路词典是可以使用的,
这个词典好像跟其他不太一样,除了mdx文件外还有其他文件
图标,config (.ini),fy(JavaScript 文件 ),.css)
config
//发音排序 1 美音优先 , 0 英音优先
order = 1;
// 是否开启英音 0 关闭 , 1 开启
pronuk = 1;
// 是否开启美音 0 关闭 , 1 开启
pronus = 1;
//是否开启PC端自动发音 0 关闭 , 1 开启
auto_pron = 1;
//是否开启手机端自动发音 0 关闭 , 1 开启
mobile_auto_pron = 0;
//是否开启COCA词频词典, 0 关闭 , 1 开启
coca = 0;
//是否开启iWeb词频词典, 0 关闭 , 1 开启
iweb = 1;
//是否开启口语词频词典, 0 关闭 , 1 开启
spoken = 1;
//是否开启考试词汇及柯林斯五星词频词典, 0 关闭 , 1 开启
exam = 1;
//是否开启单词释义比例词典, 0 关闭 , 1 开启
ex_ratio = 1;
//是否开启短语词频词典, 0 关闭 , 1 开启
EPFD = 1;
//是否开启简明释义 0 关闭 , 1 开启
definition = 1;
// 是否显示头部区域(包含所查单词,音标,时态) 0 关闭 , 1 开启
header = 1;
———————————-
您好 按照您的操作步骤走到了最后一步 py程序也成功运行了 可是最后出了问题 显示如下:
File “tab2opf.py”, line 254, in
print dt.decode(‘utf-8’)
UnicodeEncodeError: ‘gbk’ codec can’t encode character u’\ufeff’ in position 0: illegal multibyte sequence
导致出现不了.opf和html文件 麻烦您看看 谢谢~
可以尝试打开 tab2opf.py 这个文件,删掉第 254 行的
print dt.decode('utf-8')
,再重新运行命令。书伴您好,按照您的方法我确实制作出了一本mobi格式的日中词典,但导入kindle之后却什么都查不到。请问是怎么一回事呢?
OPF 文件中的是否添加了元数据?文件是否拷贝到了 documents 文件夹?如果这两个条件都满足还是看不到,可以把你转换的字典发送到书伴邮箱(页面底部“联系”处获取),书伴帮你测试一下。
元数据是指语言代码吗?我填写了。文件我写确定拷贝到了 documents 文件夹。
我通过邮件把词典发送到了邮箱,但是因为文件太大,我是通过云附件发送的。请问您接收到了吗?
书伴根据你提供的原始文件把步骤重新走了一遍,猜测索引显示为乱码、无法查词的问题,可能是由于你在运行下面这行命令的时候忘记了添加 -utf 这个命令选项导致的:
下面的下载链接提供的是按照文章中的步骤重新转换的字典文件,已经可以正常查词勉强能用了,但是还不够完善。
下载链接:百度网盘〈提取码 : xupr〉
在转换的过程中,发现里面还有很多问题有待解决,比如转换后的文档中有一些 KindleGen 无法正确识别的结构,变形词(同义异形词)的索引不够方便等。有网友分享了一些解决这些问题的相关经验,具体可以看一下这篇帖子。
GetDict.exe程序现在已经有了升级版,名为“MdxExport.exe”,下载地址为:https://www.pdawiki.com/forum/thread-17709-1-1.html。MdxExpor不仅操作逻辑更简便(只需要选择输入文件路径,输出路径自动设定,且直接生成.TXT 文件),而且还支持对.MDD文件解包
https://1manfactory.com/create-your-own-kindle-dictionary-for-every-language-for-free/
这里有exe版的 tab2opf.py文件,可以节约一些操作
请问生成一本辞典大概要多久?
mobigen只能用单核,
一本日语的大辞林,我开了一个下午还没好
一直提示以下错误
Error(core): Cannot concatenate strings. Incoherent encodings.
Warning(index build): unsupported HTML entity or impossible to map the entity to the current encoding.
请问如何解决
感谢分享,使用此方法转换了朗文的德德词典。
现在在研究如何在这个基础上加上变位或模糊查询。
参考了您的另一篇文章(https://bookfere.com/post/178.html),提到了用 … 字段可以支持变形,但是有没有现成的工具能够自动对所有单词生成变形?
目前还没有发现有现成的工具。
请问双语互译的词典,在和这两项怎么填呢?比如德汉互译。 我先前输入填de,输出填zh,可最后生成的词典,只能查询到对应单词而无解释,不知何故。
还有老铁,那个加密epub的有头绪了么¿
max版可以怎么把mdx转换成mobi
max版指的是什么?
你好,已有mobi版字典,如何轉成kindle版字典呢?
如果你所说的“MOBI 版字典”本身就是字典格式,那可以直接在 Kindle 中使用。如果你所说的“MOBI 版字典”是普通电子书而不是字典格式,可能不太好转换,因为普通电子书可能不具备字典所需要的词条元数据。
是普通的電子書格式,想要轉成字典格式