[网友投稿] MDictindle:MDX 词典转 MOBI 词典辅助工具
本文系网友“子恒”的投稿,内容来源于其博客文章《如何转换 .mdx 词典到 .mobi 词典》。
本软件能够就较短的时间内简化词典,同时把已经转化成 .txt 的 .mdx 词典(使用 GetDict.exe 把 .mdx 转化到 .txt)转换成 .opf 及附属文件,并且给记录了变形词的词典附上变形词支持。
0x00、前言
众所周知,.mdx 词典可谓全网资源最丰富的词典类型,数不胜数的词典被以 .mdx 的格式转为电子词典。但可惜的是,Kindle 并不支持 .mdx 词典文件,只支持 .mobi 或 prc 的词典,那如何把 .mdx 转化为 .mobi/.prc 呢?
首先,请参考以下的文章,本文或多或少从这些文章中得到的帮助(前两篇为科普)
- 亚马逊 Kindle 电子书发布指南(三)特定类型电子书指南
- 自制 Kindle 字典简明教程(进阶篇)
- 如何把 MDX 格式词典转换成 Kindle 字典
- Python辅助MDX转MOBI(以AHD5th为例)
- 美国传统词典American Heritage Dictionary 5th(精制版)
然而,这些方法共同的缺点如下:
- 词典内部链接无法点击
- 一个单词的不同词性没有分页
- 格式混乱
- 不支持 CSS
对于第三篇,还存在变形词无法识别、词典过大的问题;对于后两篇,还存在耗时过久的问题。
为了解决这些问题,我开发了软件 MDictindle,能够解决上述问题中除了格式混乱以外的所有问题,对于格式混乱的问题也有所改善。
0x01、把 .mdx 转化为 .txt
软件需求:
参见《如何把 MDX 格式词典转换成 Kindle 字典》的前两步。
0x02、把 .txt 转化为 .opf
软件需求:
- MDictindle.exe:Github 发布页面(需安装 .NET runtime)
使用命令行,输入命令:
MDictindle.exe <.txt 文档路径> [--clean-dict(建议启用)] [--css ]
如:
$ ./MDictindle.exe oxford.txt --clean-dict --css oald10.css
MDictindle v0.2.0 : 转换 Mdx 到 Mobi 的桥梁
本软件能够就较短时间内简化词典,同时把已经转换成 .txt 的 .mdx 词典转换成 .opf 及附属文件,并且给记录了变形词的词典附上变形词支持、补全链接跳转、给单词的不同词性创建单独项、添加 CSS
警告:在执行第零步骤(词典化简)时,会修改源词典,请您自行做好备份!
作者:子恒
本软件在 GPLv3.0 许可协议下开放源代码于 https://github.com/TsihenHo/MDictindle
程序将依次执行第零步至第三步。
部分参数及输出文件如下:
源文件: oxford.txt
执行第零步: 是
CSS 路径: oald10.css
输出的OPF: oxford.opf
第零步开始:清除图片、音乐、JS、无效链接等 Kindle 上无法正常使用的功能
本步骤能够就较短的时间内简化词典,同时把词典转换成 .opf 及附属文件,并且给记录了变形词的词典附上变形词(组)支持、补全链接跳转、带上CSS支持、给单词的不同词性创建单独意项
经测试,363012KB 的牛津高阶英汉双解词典能够在 114S 内完成本步骤。
0x03、把 .opf 转化为 .mobi
软件需求:
- MobiGen.exe:百度网盘
参见《如何把 MDX 格式词典转换成 Kindle 字典》的最后一步。
经测试,使用 MDictindle.exe v0.2.0 能够通过 MobiGen.exe,使用参数 -c1 最后生成的 .mobi 大小 81486KB。 已知问题:Hyperlink not resolved: .../...#h数字
,不知缘故。
© 「书伴」原创文章,转载请注明出处及原文链接:https://bookfere.com/post/1002.html
延伸阅读
- 亚马逊 Kindle 中国电子书店将于 2023 年 6 月 30 日停止运营
- 读书识电影:看什么电影,怎么看电影
- [每周一书]《忧郁的热带》记录人类社会的原始形态
- 修复 AZW3 电子书无法标注句子段落的问题
- 亚马逊 Kindle 电子书发布指南(一)入门
- 499 元新 Kindle 拆机分解:看看它的内心世界
- [2019.03.27] Kindle Paperwhite 4 固件升级至 5.11.1
- 通勤书单:根据通勤时长选择不同类型的图书
- Kindle 通用越狱教程:适用固件版本 5.12.2.2~5.14.2
- 如何将 Calibre 中的电子书拼音书名保存成中文书名
- [每周一书]《美妙的新世界》机械文明下的未来社会
- [2021.03.17] Kindle Paperwhite 3 固件升级至 5.13.5
- 王璐:对知识的占有欲和求知欲的区别
- [每周一书] 跟随《织梦人》开启我们的哲学之旅
- [每周一书] 从《九型人格》中认识自己和理解他人
关于教程里头:
0x02、把 .txt 转化为 .opf
“使用命令行,输入命令:
MDictindle.exe [–clean-dict(建议启用)] [–css ]
如:
这里头的路径究竟是怎么输入呢?你里头也没有路径啊。
“$ ./” 这个是需要加吗??
请解答以下, 感谢
假设你把 MDictindle.exe 放在了桌面上,如果在命令提示符上的当前目录就是桌面,则可使用相对路径
./MDictiondle.exe
,如果是在桌面上的子目录中,则可使用相对路径../MDictiondle.exe
,否则需要使用绝对路径:C:\Users\YOURNMAE\Desktop\MDictindle.exe
注意要把里面的 YOURNAME 换成你的系统用户名。
MDictindle.exe v.0.2 无法运行,总是闪退。 ! 已经安装了runtime~~有办法吗?谢谢。
另外后面那两个resourse 是什么?需要安装吗
想知道后来解决了吗?试了好多次都没办法成功,用第一版又会卡在最后一步。
每次使用都显示:
程序将依次执行第零步至第三步。
部分参数及输出文件如下:
源文件: ecd.txt
执行第零步: 是
CSS 路径:
输出的OPF: ecd.opf
第零步开始:清除图片、音乐、JS、无效链接等 Kindle 上无法正常使用的功能
第零步完成!
第一步开始:读取词典到数据库
致命:未知错误
==========详细信息==========
code = Constraint (19), message = System.Data.SQLite.SQLiteException (0x800027AF): constraint failed
UNIQUE constraint failed: Dictionary.Id
at System.Data.SQLite.SQLite3.Reset(SQLiteStatement stmt)
at System.Data.SQLite.SQLite3.Step(SQLiteStatement stmt)
at System.Data.SQLite.SQLiteDataReader.NextResult()
at System.Data.SQLite.SQLiteDataReader..ctor(SQLiteCommand cmd, CommandBehavior behave)
at System.Data.SQLite.SQLiteCommand.ExecuteReader(CommandBehavior behavior)
at System.Data.SQLite.SQLiteCommand.ExecuteNonQuery(CommandBehavior behavior)
at System.Data.SQLite.SQLiteCommand.ExecuteNonQuery()
at System.Data.Common.DbCommand.ExecuteNonQueryAsync(CancellationToken cancellationToken)
— End of stack trace from previous location —
at MDictindle.DictManager.AddEntryAsync(String name, String explanation)
at MDictindle.Step.AbsStepOne.DoAsync(DictManager manager, TextWriter logger)
at MDictindle.Step.AbsStepOne.DoAsync(DictManager manager, TextWriter logger)
at MDictindle.Step.AbsStepOne.DoAsync(DictManager manager, TextWriter logger)
at MDictindle.Step.AbsStepOne.DoAsync(DictManager manager, TextWriter logger)
at MDictindle.Step.AbsStep.AutoDo(DictManager manager, TextWriter logger)
at MDictindle.Program.RunOptions(Options opt)
这是为什么啊
兄弟,不知道为啥我每次都会把c盘点空间用完,然后就报错了。能来c盘还剩30个g,这个命令执行到这的时候c盘点temp文件就突然多了30个g(我网上查了temp是临时文件,可以直接删除),反正最后就是到这一步就报错了,磁盘空间已经满了。
部分参数及输出文件如下:
源文件: 1.txt
执行第零步: 是
CSS 路径: vocabulary.css
输出的OPF: 1.opf
第零步开始:清除图片、音乐、JS、无效链接等 Kindle 上无法正常使用的功能
第零步完成!
第一步开始:读取词典到数据库
第一步:读取完成,正在处理变形词…
致命:未知错误
==========详细信息==========
code = Full (13), message = System.Data.SQLite.SQLiteException (0x800007FF): database or disk is full
database or disk is full
at System.Data.SQLite.SQLite3.Reset(SQLiteStatement stmt)
at System.Data.SQLite.SQLite3.Step(SQLiteStatement stmt)
at System.Data.SQLite.SQLiteDataReader.NextResult()
at System.Data.SQLite.SQLiteDataReader..ctor(SQLiteCommand cmd, CommandBehavior behave)
at System.Data.SQLite.SQLiteCommand.ExecuteReader(CommandBehavior behavior)
at System.Data.SQLite.SQLiteCommand.ExecuteNonQuery(CommandBehavior behavior)
at System.Data.Common.DbCommand.ExecuteNonQueryAsync(CancellationToken cancellationToken)
— End of stack trace from previous location —
at MDictindle.DictManager.AddEntryForInflAsync(String name, String explanation, String infls)
at MDictindle.DictManager.MakeInflsAsync()
at MDictindle.DictManager.MakeInflsAsync()
at MDictindle.DictManager.MakeInflsAsync()
at MDictindle.DictManager.MakeInflsAsync()
at MDictindle.DictManager.MakeInflsAsync()
at MDictindle.DictManager.MakeInflsAsync()
at MDictindle.DictManager.MakeInflsAsync()
at MDictindle.Step.AbsStepOne.DoAsync(DictManager manager, TextWriter logger)
at MDictindle.Step.AbsStepOne.DoAsync(DictManager manager, TextWriter logger)
at MDictindle.Step.AbsStepOne.DoAsync(DictManager manager, TextWriter logger)
at MDictindle.Step.AbsStepOne.DoAsync(DictManager manager, TextWriter logger)
at MDictindle.Step.AbsStep.AutoDo(DictManager manager, TextWriter logger)
at MDictindle.Program.RunOptions(Options opt)
PS C:\Users\Lenovo\Desktop\新建文件夹\new\尝试1>
我又换了本字典尝试了一下,发现可以成功。
程序将依次执行第零步至第三步。
部分参数及输出文件如下:
源文件: cls.txt
执行第零步: 是
CSS 路径: glpa.css
输出的OPF: cls.opf
第零步开始:清除图片、音乐、JS、无效链接等 Kindle 上无法正常使用的功能
第零步完成!
第一步开始:读取词典到数据库
第一步:读取完成,正在处理变形词…
第一步完成!
第二步开始:处理链接
第二步:共有 36541 个条目需要处理,请耐心。除最前面的 2000 条目和最后的几千条目外,每个条目所花费的时间大致相同
第二步:已经处理了 4000 个条目
第二步:已经处理了 16000 个条目
第二步:已经处理了 22000 个条目
第二步:已经处理了 30000 个条目
第二步:已经处理了 34000 个条目
第二步完成!
第三步开始:写出到文件
第三步完成!
成功!耗时 10.704 秒。
现在,您可以编辑 cls.opf 中的内容,之后使用 mobigen 或 prcgen 生成词典!
按下任意键继续…
教程可用,制作出的字典有变形词。请问我制作出的字典拖入kindle,字典名显示很多个?要怎么解决呢?
希望有达人把汉典精简一下。足矣。汉典里面的无用资料太多了。