之前书楼曾写过一篇文章《如何把 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 并安装(3.8 或 3.9 版本皆可,推荐 3.9)。为确保可以直接在“命令提示符”中使用相关命令,安装开始时,请务必在安装界面上勾选“Add Python 3.9 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
。
至此,字典的源代码已经准备完毕,接下来就需要将其转换成最终可用的 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
查看。
未经允许不得转载:书路 » PyGlossary:将其它格式的字典转换成 Kindle 字典