PyGlossary:将其它格式的字典转换成 Kindle 字典

之前书楼曾写过一篇文章《如何把 MDX 格式词典转换成 Kindle 字典》,介绍了一种将 MDX 格式的字典转换成 Kindle 字典的方法。不过该方法有三个缺点:一是只能转换源格式为 MDX 的字典;二是步骤较多、操作较为繁琐;三是部分操作依赖 Windows 系统,对于使用其它系统的(如 macOS)的小伙伴来说不太方便。为解决这个问题,本文将会介绍一种跨平台且支持更多格式的 Kindle 字典转换方法。

目录

一、安装运行 PyGlossary
● Windows 系统
● macOS 系统
二、转换 Kindle 字典源码
三、修改 Kindle 字典源码
四、生成 Kindle 字典文件
五、附录:PyGlossary 支持的格式

本文会将用到 PyGlossaryKindleGen 这两款软件。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 字典文件。以下是详细转换步骤。

  1. 点击“Input File”输入框后面的【Browse】按钮,在弹出的窗口中选择要转换的字典文件(软件会自动检测文件格式,如检测有误,可通过“Input Format”后面的【[Select Format]】手动选择)。
  2. 点击软件界面上的“Output File”输入框后面的【Browse】按钮,在弹出的窗口的“文件名”处输入源代码存放的文件夹名称(注意,为避免混淆,名称最好不要与当前路径中已存在的文件夹同名)。
  3. 点击“Output Format”后的【[Select Format]】,在弹出框中双击选定“MOBI E-Book”。
  4. 最后点击界面上的大按钮【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 标准(来源),如 enzh-CNDictionaryInLanguageDictionaryOutLanguage 标签中的“语言代码”需符合 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 字典

赞 (1) 打赏

觉得文章有用就打赏一下文章作者

微信扫一扫打赏