创建一个 kindle 词典
Creating a kindle dictionary
我正在尝试创建一个可用于离线查找的 Kindle 词典。我已经有了这些词和它们的词形变化,但很难将其变成一本可用的词典。
亚马逊提供了一些关于此的 documentation。它基本上说你应该:
- 创建一个 XHTML 文件,其中包含指定所有变形等的特殊标记。
- 把它变成 epub
- 用 Kindle Previewer 打开它
- 使用 Kindle Previewer 将其导出到 MOBI
所以我根据 Amazon 规范创建了一个大的 XHTML 文件(23 MB 左右)并在 Kindle Previewer 中打开它,看起来不错。但是,Kindle Previewer 不允许您将 XHTML 个文件导出到 MOBI。他们希望您创建一个中间 epub 文件。
我尝试使用 Pandoc 进行转换,但没有成功,因为它删除了所有特定的 HTML 标签,只留在段落中。然后我尝试使用口径。根据错误消息,正常的 XHTML -> epub 转换失败,因为 XHTML 文件太大。如果您 运行 遇到此错误,Calibre 建议打开“启发式模式”,我试过了,但在 运行 时间 运行 小时后仍未完成 运行ning。
然后我尝试自己创建 epub 文件,使用取自 this tutorial. I discovered that this is not trivial, and a check using epubcheck 的示例文件显示我生成的文件中有许多难以理解的错误。 epub 文件的生成也有点复杂,因为您可能需要将 XHTML 文件拆分成许多较小的文件,这些文件的大小可能应该是 250 kb,因为电子阅读器往往难以处理正在解析较大的文件。
所以我想也许应该有更简单的方法来做到这一点,或者也许有一个图书馆可以帮助做到这一点。也许将单词 + 词形变化输出为其他一些更简单的字典格式,然后使用现有库将其转换为 MOBI 并完全省略 XHTML 生成甚至是一个好主意。目前我正在使用 Python,但如果有必要,我也会使用其他语言。我可以尝试什么?
编辑:补充一下我尝试过的事情:有一个明显封闭的源代码脚本 here that unfortunately doesn't support inflections, so does not work. And there are instructions here 建议使用 Mobipocket Creator 将文件转换为 PRC,然后使用 Kindle Previewer 打开它。这种方法的问题是 Kindle Previewer 抛出错误:
Kindle Previewer does not support this file, which has either been created using an older version of KindleGen or a third party application. We recommend using EPUB or DOCX format directly for previewing and publishing your book on Kindle.
Mobipocket Creator也有更详细的使用说明here,直接将生成的.prc文件移动到kindle上即可。我试过了,但它没有被识别为字典。
我自己想出来的。首先我自己实现了一个解决方案,然后我找到了 pyglossary 库(现在下面的代码只适用于 Github 而不是 pip 的版本)并像这样使用它:
from pyglossary.glossary import Glossary
Glossary.init()
glos = Glossary()
defiFormat = "h"
base_forms = get_base_forms()
for canonical_form in base_forms:
inflections = get_inflections(canonical_form)
definitions = get_definition(canonical_form)
definitionhtml = ""
for definition in definitions:
definitionhtml += "<p>" + gloss + "</p>"
all_forms = [canonical_form]
all_forms.extend(inflections)
glos.addEntryObj(glos.newEntry(all_forms, glosshtml, defiFormat))
glos.setInfo("title", "Russian-English Dictionary")
glos.setInfo("author", "Vuizur")
glos.sourceLangName = "Russian"
glos.targetLangName = "English"
glos.write("test.mobi", format="Mobi", keep=True, kindlegen_path="path/to/kindlegen.exe")
我正在尝试创建一个可用于离线查找的 Kindle 词典。我已经有了这些词和它们的词形变化,但很难将其变成一本可用的词典。
亚马逊提供了一些关于此的 documentation。它基本上说你应该:
- 创建一个 XHTML 文件,其中包含指定所有变形等的特殊标记。
- 把它变成 epub
- 用 Kindle Previewer 打开它
- 使用 Kindle Previewer 将其导出到 MOBI
所以我根据 Amazon 规范创建了一个大的 XHTML 文件(23 MB 左右)并在 Kindle Previewer 中打开它,看起来不错。但是,Kindle Previewer 不允许您将 XHTML 个文件导出到 MOBI。他们希望您创建一个中间 epub 文件。
我尝试使用 Pandoc 进行转换,但没有成功,因为它删除了所有特定的 HTML 标签,只留在段落中。然后我尝试使用口径。根据错误消息,正常的 XHTML -> epub 转换失败,因为 XHTML 文件太大。如果您 运行 遇到此错误,Calibre 建议打开“启发式模式”,我试过了,但在 运行 时间 运行 小时后仍未完成 运行ning。
然后我尝试自己创建 epub 文件,使用取自 this tutorial. I discovered that this is not trivial, and a check using epubcheck 的示例文件显示我生成的文件中有许多难以理解的错误。 epub 文件的生成也有点复杂,因为您可能需要将 XHTML 文件拆分成许多较小的文件,这些文件的大小可能应该是 250 kb,因为电子阅读器往往难以处理正在解析较大的文件。
所以我想也许应该有更简单的方法来做到这一点,或者也许有一个图书馆可以帮助做到这一点。也许将单词 + 词形变化输出为其他一些更简单的字典格式,然后使用现有库将其转换为 MOBI 并完全省略 XHTML 生成甚至是一个好主意。目前我正在使用 Python,但如果有必要,我也会使用其他语言。我可以尝试什么?
编辑:补充一下我尝试过的事情:有一个明显封闭的源代码脚本 here that unfortunately doesn't support inflections, so does not work. And there are instructions here 建议使用 Mobipocket Creator 将文件转换为 PRC,然后使用 Kindle Previewer 打开它。这种方法的问题是 Kindle Previewer 抛出错误:
Kindle Previewer does not support this file, which has either been created using an older version of KindleGen or a third party application. We recommend using EPUB or DOCX format directly for previewing and publishing your book on Kindle.
Mobipocket Creator也有更详细的使用说明here,直接将生成的.prc文件移动到kindle上即可。我试过了,但它没有被识别为字典。
我自己想出来的。首先我自己实现了一个解决方案,然后我找到了 pyglossary 库(现在下面的代码只适用于 Github 而不是 pip 的版本)并像这样使用它:
from pyglossary.glossary import Glossary
Glossary.init()
glos = Glossary()
defiFormat = "h"
base_forms = get_base_forms()
for canonical_form in base_forms:
inflections = get_inflections(canonical_form)
definitions = get_definition(canonical_form)
definitionhtml = ""
for definition in definitions:
definitionhtml += "<p>" + gloss + "</p>"
all_forms = [canonical_form]
all_forms.extend(inflections)
glos.addEntryObj(glos.newEntry(all_forms, glosshtml, defiFormat))
glos.setInfo("title", "Russian-English Dictionary")
glos.setInfo("author", "Vuizur")
glos.sourceLangName = "Russian"
glos.targetLangName = "English"
glos.write("test.mobi", format="Mobi", keep=True, kindlegen_path="path/to/kindlegen.exe")