PyGlossary:将不同格式的字典转换成 Kindle 字典
之前书伴曾写过一篇文章《如何把 MDX 格式词典转换成 Kindle 字典》,介绍了一种将 MDX 格式的字典转换成 Kindle 字典的方法。不过该方法有三个缺点:一是只能转换源格式为 MDX 的字典;二是步骤较多、操作较为繁琐;三是部分操作依赖 Windows 系统,对于使用其它系统的(如 macOS)的小伙伴来说不太方便。为解决这个问题,本文将会介绍一种跨平台且支持更多格式的 Kindle 字典转换方法。
目录
一、安装运行 PyGlossary
● Windows 系统
● macOS 系统
二、转换 Kindle 字典源码
三、修改 Kindle 字典源码
四、生成 Kindle 字典文件
五、附录:PyGlossary 支持的格式
本文会将用到 PyGlossary 和 KindleGen 这两款软件。PyGlossary 是一款开源跨平台的字典转换工具,可将多种字典格式转换成不同字典格式,这里我们主要用它转换 Kindle 字典格式。KindleGen 是亚马逊官方提供的 Kindle 电子书转换工具,我们用它来把源代码转换成 MOBI 格式的 Kindle 字典。
一、安装运行 PyGlossary
以下是针对各操作系统的安装方法,也可参考项目中的 README.md 文档提供的的步骤进行安装。
● Windows 系统
1、安装 Python3 及相关依赖:
PyGlossary 需要你的操作系统装有 3.8 或更新的 Python 版本,如此条件已具备可跳过此步骤。
从 Python 官方网站下载最新版 Python 并安装。为确保可以直接在“命令提示符”中使用相关命令,安装开始时,请务必在安装界面上勾选“Add Python 3.x to PATH”。
Python 安装完成后,以管理员身份运行“命令提示符”(先按组合快捷键 Win + R
调出“运行”窗口,然后输入 cmd
,最后同时按住 Ctrl + Shift
并按 Enter
键)。在命令提示符中输入以下命令并按 Enter 键:
pip3 --version
如果 pip 命令可用的话,应该可以看到类似如下所示的提示信息:
pip 21.0 from /usr/local/lib/python3.9/site-packages/pip (python 3.9)
注意:如果你的 Windows 系统曾安装过 Python 2.x 版本,可能会遇到环境变量冲突问题,解决方法是将新安装的 Python 3.x 程序目录中的 python.exe 复制一份并将其重命名为 python3.exe,这样就可以在命令提示符中使用 python3
命令来使用新版本的 Python,使用 python
命令使用旧版本的 Python。
2、安装 PyGlossary:
在命令提示符中输入以下命令并按 Enter 键安装 PyGlossary:
pip3 install pyglossary
安装完成后,在命令提示符中执行命令 pyglossary --version
,如看到版本号就表示安装成功。
3、运行 PyGlossary:
在命令提示符中输入如下所示的命令并按 Enter 键即可启动带界面的 PyGlossary:
pyglossary --tk
* 提示:如果运行时出现了错误提示 FileNotFoundError: [Errno 2]
(反馈1,反馈2),这是由于安装了项目作者最近引入 BUG 的版本导致的,解决此问题请运行命令 pip3 install pyglossary --upgrade --pre
安装已修复的版本。
● macOS 系统
1、安装 Homebrew:
对于 macOS 系统,书伴推荐使用包管理器 Homebrew 安装 Python3 及相关环境依赖。如果你的系统还未安装 Homebrew,请打开“应用程序 → 实用工具”中的“终端”程序,并输入如下所示的命令:
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
安装完成后,输入命令 brew --version
,如看到类似如下所示信息就表示安装成功:
brew --version
Homebrew 3.0.1
Homebrew/homebrew-core (git revision 013cd; last commit 2021-02-16)
Homebrew/homebrew-cask (git revision ef7151; last commit 2021-02-16)
2、安装 Python3 及相关依赖:
在终端输入如下所示命令按 Enter 键安装 Python3 及相关依赖:
brew install python3 pygobject3 gtk+3
3、安装 PyGlossary:
在终端输入如下命令按 Enter 键安装 PyGlossary:
pip3 install pyglossary
安装完成后,在终端输入命令 pyglossary --version
并按 Enter 键,如看到版本号就表示安装成功。
4、运行 PyGlossary:
运行如下所示的命令启动带界面的 PyGlossary:
pyglossary --gtk
* 提示:PyGlossary 提供了两种图形界面方案,一种是 Python3 内置的 Gtk3,另一种是 Tkinter,可以在运行 pyglossary
命令时附加参数 --gtk
或 --tk
指定相应的界面方案。如果只运行 pyglossary
命令不附加参数,PyGlossary 会优先使用 Gtk3,若不满足条件则使用 Tkinter。对于 Gtk3 界面方案,Windows 系统安装起来可能比较麻烦,所以建议使用 Tkinter;对于 Tkinter 方案,由于 PyGlossary 使用了 Tix 扩展,在 macOS 系统中与 Python3 存在兼容问题,所以建议使用 Gtk3。此外 PyGlossary 还支持命令行界面,如喜欢这种使用方式,可通过 pyglossary --help
命令查看使用说明。
除 Windows 系统和 macOS 系统外,PyGlossary 还支持众多分发版本的 Linux 系统(如 Ubuntu)。如果你使用的是 Linux 系统,请根据自己使用的分发版本,参考官方文档相应内容进行安装。
二、转换 Kindle 字典源码
目前 PyGlossary 转换 Kindle 字典的功能还不太完善,无法直接将其它字典格式转换成最终的 Kindle 字典文件,因此需要一个中间过程:先将其它字典格式转换成 Kindle 字典源代码,然后对源代码做一些必要的修改,最后再用 KindleGen 把源代码转成最终的 Kindle 字典文件。以下是详细转换步骤。
- 点击“Input File”输入框后面的【Browse】按钮,在弹出的窗口中选择要转换的字典文件(软件会自动检测文件格式,如检测有误,可通过“Input Format”后面的【[Select Format]】手动选择)。
- 点击软件界面上的“Output File”输入框后面的【Browse】按钮,在弹出的窗口的“文件名”处输入转换后的源代码将要存放的文件夹名称(注意,为避免混淆,名称最好不要与当前路径中已存在的文件夹同名)。
- 点击“Output Format”后的【[Select Format]】,在弹出框中双击选定“MOBI E-Book”。
- 最后点击界面上的大按钮【Convert】开始转换,直至转换完毕。
注意,正如前面所提到的,PyGlossary 转换 Kindle 字典的功能还不够完善和健壮,如在转换过程中可能会遇到卡顿或命令提示符出现错误提示,都不必担心,只需要确保它成功输出了源文件即可。
三、修改 Kindle 字典源码
接下来使用代码编辑器打开转换后源码中的 content.opf 文件,修改必要的字典元数据。
首先是为字典的语言元数据设定语言代码,一般情况下字典的语言和要查询字词的语言一致。
假设字典为“英汉字典”,那么字典语言就应为“英语”,语言代码为“en”。该元数据会影响字典在 Kindle 中的某些行为。比如在 Kindle 设备的设置中为英语这一语言指定默认字典时,如果语言代码有误,就会找不到该字典。另外,错误的语言代码还会导致即便是英文电子书,查词时也无法自动调用该字典。
更改前:
<dc:Language></dc:Language>
更改后:
<dc:Language>en</dc:Language>
然后是设定字典的输入语言代码,即查询字词的语言。示例中为“英文”,语言代码为“en”。
更改前:
<DictionaryInLanguage></DictionaryInLanguage>
更改后:
<DictionaryInLanguage>en</DictionaryInLanguage>
最后是设定字典的输出语言代码,即释义内容的语言。示例中为“中文”,语言代码为“zh”。
更改前:
<DictionaryOutLanguage></DictionaryOutLanguage>
更改后:
<DictionaryOutLanguage>zh</DictionaryOutLanguage>
注意,language
元素中的“语言代码”需遵守 RFC5646 规范(来源),如 en
、zh-CN
,DictionaryInLanguage
和 DictionaryOutLanguage
元素中的“语言代码”需遵守 ISO 639-1 规范(来源),如 en
、en-US
。语言代码可附加两位地区代码,规范可参考 ISO 3166-1。
下表是常用的语言代码:
语言代码 | 对应语言 |
---|---|
zh |
中文 |
zh-CN |
中文(中国) |
zh-HK |
中文(香港) |
zh-TW |
中文(台湾) |
en |
英文 |
en-US |
英文(美国) |
en-UK |
英文(英国) |
de |
德文 |
ja |
日文 |
ko |
韩文 |
至此,字典的源代码已经准备完毕,接下来就需要将其转换成最终可用的 Kindle 字典文件。
四、生成 Kindle 字典文件
将源码转换成 MOBI 格式的字典需要用到亚马逊官方提供的电子书转换工具 KindleGen。请先按照《官方转换工具 Kindle Previewer 和 KindleGen》这篇文章准备好 KindleGen 程序并掌握其使用方法。
接下来就可以执行如下所示的命令将源代码转换成最终的 Kindle 字典文件(注意,Windows 系统中想要直接运行 kindlegen
命令,必须将其添加到系统的环境变量,具体方法参考上面提到的文章):
kindlegen /path/to/content.opf -dont_append_source
注意,命令中的 /path/to/content.opf
必须换成真实的 content.opf 文件路径,否则就是无效命令。假设输出的文件夹名为 sample,存放在桌面上,在 macOS 系统或 Linux 系统中,其路径应如下所示:
~/Desktop/OEBPS/content.opf
在 Windows 系统中,其路径应如下所示(YOURNAME 替换成真实的系统用户名):
C:\Users\YOUNAME\Desktop\sample\OEBPS\content.opf
五、附录:PyGlossary 支持的格式
PyGlossary 支持的输入格式:
名称 | 简介 | 扩展名 |
---|---|---|
Aard2Slob | Aard 2 (.slob) | .slob |
ABCMedicalNotes | ABC Medical Notes (SQLite3) | |
Almaany | Almaany.com (SQLite3) | |
AppleDictBin | AppleDict Binary | .dictionary .data |
BabylonBgl | Babylon (.BGL) | .bgl |
CC-CEDICT | CC-CEDICT | .u8 |
cc-kedict | cc-kedict | |
CrawlerDir | Crawler Directory | .crawler |
Csv | CSV (.csv) | .csv |
Dicformids | DictionaryForMIDs | .mids |
Dictcc | Dict.cc (SQLite3) | |
Dictcc_split | Dict.cc (SQLite3) – Split | |
DictOrg | DICT.org file format (.index) | .index |
Dictunformat | dictunformat output file | .dictunformat |
DigitalNK | DigitalNK (SQLite3, N-Korean) | |
ABBYYLingvoDSL | ABBYY Lingvo DSL (.dsl) | .dsl |
Dictfile | Kobo E-Reader Dictfile (.df) | .df |
Edlin | EDLIN | .edlin |
FreeDict | FreeDict (.tei) | .tei |
GettextPo | Gettext Source (.po) | .po |
Info | Glossary Info (.info) | .info |
JMDict | JMDict | |
LingoesLDF | Lingoes Source (.ldf) | .ldf |
OctopusMdict | Octopus MDict (.mdx) | .mdx |
Sdict | Sdictionary Binary(dct) | .dct |
Stardict | StarDict (.ifo) | .ifo |
Tabfile | Tabfile (.txt, .dic) | .txt .tab .tsv |
WiktionaryDump | Wiktionary Dump (.xml) | .xml |
Wordset | Wordset.org JSON directory | |
Xdxf | XDXF (.xdxf) | .xdxf |
Zim | Zim (.zim, for Kiwix) | .zim |
PyGlossary 支持的输出格式:
名称 | 简介 | 扩展名 |
---|---|---|
Aard2Slob | Aard 2 (.slob) | .slob |
AppleDict | AppleDict Source | .apple |
CrawlerDir | Crawler Directory | .crawler |
Csv | CSV (.csv) | .csv |
Dicformids | DictionaryForMIDs | .mids |
DictOrg | DICT.org file format (.index) | .index |
DictOrgSource | DICT.org dictfmt source file | .dtxt |
Epub2 | EPUB-2 E-Book | .epub |
Kobo | Kobo E-Reader Dictionary | .kobo |
Dictfile | Kobo E-Reader Dictfile (.df) | .df |
Mobi | MOBI E-Book | .mobi |
Edlin | EDLIN | .edlin |
FreeDict | FreeDict (.tei) | .tei |
GettextPo | Gettext Source (.po) | .po |
HtmlDir | HTML Directory | .hdir |
Info | Glossary Info (.info) | .info |
Json | JSON (.json) | .json |
LingoesLDF | Lingoes Source (.ldf) | .ldf |
SdictSource | Sdictionary Source (.sdct) | .sdct |
Sql | SQL (.sql) | .sql |
Stardict | StarDict (.ifo) | .ifo |
Tabfile | Tabfile (.txt, .dic) | .txt .tab .tsv |
* 注:以上内容也可通过执行命令 pyglossary --help
查看。
© 「书伴」原创文章,转载请注明出处及原文链接:https://bookfere.com/post/883.html
延伸阅读
- 如何用 KindleEar 推送无 RSS 的网站内容(上篇)
- [每周一书]《心外传奇》心脏外科的发展之路
- [每周一书] 辉煌经济背后《陌生的中国人》
- [每周一书]《反脆弱》如何不害怕变化并从中受益?
- [每周一书]《写给大家看的设计书》
- 中亚 2018 全民阅读报告:解读六大阅读行为趋势
- 格非:盲目“信书”比不读书更糟糕
- 读书从娃娃抓起:亚马逊推出儿童版 Kindle
- [每周一书]《我与地坛》从绝望中寻求希望
- 推送 EPUB 文件到 Kindle 的常见失败原因及解决方法
- [每周一书]《巨婴国》怎样才是一个成熟的个体?
- [每周一书] 从历史细节中《重新发现宋朝》
- [每周一书]《鼠疫》荒谬生活里的存在主义拷问
- DRM-free,不止拥抱这一天
- 三星版 Kindle 可每月免费领取一本正版电子书
为什么每次都提示“另一个程序正在使用此文件,进程无法访问。”啊?然后下面的进度条就一直是0%不动了
这是完整的显示:
[INFO] Automatically switching to SQLite mode for writing Mobi
[INFO] Using sortKeyName = ‘ebook’
[INFO] Removing and re-creating ‘C:\\Users\\zrnap\\AppData\\Local\\PyGlossary\\Cache\\oed.index.db’
unhandled exception:
Traceback (most recent call last):
File “D:\Program Files\Python310\lib\site-packages\pyglossary\glossary.py”, line 588, in _read
reader.open(filename)
File “D:\Program Files\Python310\lib\site-packages\pyglossary\plugins\dict_org.py”, line 83, in open
self._dictdb = DictDB(filename, “read”, 1)
File “D:\Program Files\Python310\lib\site-packages\pyglossary\plugin_lib\dictdlib.py”, line 127, in __init__
self._initindex()
File “D:\Program Files\Python310\lib\site-packages\pyglossary\plugin_lib\dictdlib.py”, line 159, in _initindex
for line in self.indexfile:
UnicodeDecodeError: ‘gbk’ codec can’t decode byte 0xa5 in position 1812: illegal multibyte sequence
[CRITICAL] Reading file ‘D:/Downloads/oedd/oed.index’ failed.
[ERROR] error removing C:\Users\zrnap\AppData\Local\PyGlossary\Cache\oed.index.db
Traceback (most recent call last):
File “D:\Program Files\Python310\lib\site-packages\pyglossary\glossary.py”, line 180, in cleanup
os.remove(cleanupPath)
PermissionError: [WinError 32] 另一个程序正在使用此文件,进程无法访问。: ‘C:\\Users\\zrnap\\AppData\\Local\\PyGlossary\\Cache\\oed.index.db’
Traceback (most recent call last):
File “D:\Program Files\Python310\lib\site-packages\pyglossary\glossary.py”, line 180, in cleanup
os.remove(cleanupPath)
PermissionError: [WinError 32] 另一个程序正在使用此文件,进程无法访问。: ‘C:\\Users\\zrnap\\AppData\\Local\\PyGlossary\\Cache\\oed.index.db’
kindlegen怎么使用啊,完全不明白
如果你使用的是 Windows 系统,可以用鼠标将 content.opf 直接拖放到 kindlegen.exe 程序图标上。如果是 macOS 系统,需要打开“终端”,先将 kindlegen 拖放到终端上,然后输入一个空格,再把 content.opf 拖放到终端上,最后按回车键开始转换。
还有MDictindle怎么不能运行,用命令提示符也不能运行
pip不能用怎么办
感谢大神,用此方法已经成功将.mdx字典转换成mobi字典了,只是最后一步用kindlegen始终不能成功,后改为直接将.opf文件拖在mobigen上成功的。另外,我有一个问题想问,由于字典里的字的颜色是彩色的,在kindle里看到的字色很浅不方便看,在转换时能不能把所有字的颜色变为黑色?谢谢。
点击软件界面上的“Output File”输入框后面的【Browse】按钮,在弹出的窗口的“文件名”处输入源代码存放的文件夹名称(注意,为避免混淆,名称最好不要与当前路径中已存在的文件夹同名)。中的源代码存放文件怎么看啊
你的意思是不知如何编辑转换后的源代码文件吗?
kindlegen出现了【错误(kindlegen):E30010: 不受支持的自变量】提示,请问可以怎么解决呢?
你在做什么操作的时候出现的这个提示?
把kindlegen加入环境变量后执行kindlegen /path/to/content.opf -dont_append_source命令后出现的……
如果用提供的另一种输入C:/Kindlegen/kindelgen.exe的方法的话则会出现错误【(kindlegen):E30005: 不能打开文件】这样的提示。
content.opf 换成真实路径了吗?/path/to/content.opf 这个路径只是个示例。
换了,而且仅输入路径是可以打开文件的。
【重新尝试又变成这样了…….】
这和软件本身没有关系了,你需要根据提示检查电子书源文件存在的错误。
好的,十分感谢回复!
安装成功,但是执行命令 pyglossary –version 时出现
是什么原因,有解决办法吗
这是项目作者最近引入的一个 BUG。四天前有人在项目 Issues 中提出了这个问题(链接),作者给出了解决方法,运行下面这条命令安装已修复版本:
按照步骤把字典转成MOBI格式:但有些字符显示不出来,
比如
乾
qiánㄑㄧㄢˊ渠焉切,平,仙韻,羣。元部。
㊀易卦名。八卦的首卦,卦形;又六十四卦之一,卦形,乾上乾下。
㊁易乾象天、象君、象陽,見“乾坤”、“乾綱”、“乾宅”。
㊂剛健。易説卦:“乾,健也。”
gānㄍㄢ古寒切,平,寒韻,見。元部。
㊀乾燥。
詩王風中谷有蓷:“暵其乾矣。”
㊁枯竭。
左傳僖十五年:“外彊中乾。”注:“外雖有彊形,而内實乾竭。”
㊂空,徒然。見“乾2笑”、“乾2愁”。
㊃有名無實。見“乾2娘”、“乾2兒”。
蝌蚪的字典有入口吗,我想当电子词典查怎么找不到入口?
“蝌蚪的字典”是什么?
kindle啊
字典都存放在“字典”收藏夹中,翻到图书馆最后一页就可以看到(小技巧:可以点击图书馆右下角页码处,随意输入一个大数,如 999,就可以跳转到最后一页)。