制作kindle词典
Posted
技术标签:
【中文标题】制作kindle词典【英文标题】:Creating a kindle dictionary 【发布时间】:2021-12-29 05:30:56 【问题描述】:我正在尝试创建可用于离线查找的 Kindle 词典。我已经知道了单词和它们的变形,但是把它变成一本有效的字典是很困难的。
亚马逊提供了一些关于此的documentation。它基本上说你应该:
-
创建一个带有特殊标记的 Xhtml 文件,指定所有变形等。
把它变成一个 epub
用 Kindle Previewer 打开它
使用 Kindle Previewer 将其导出到 MOBI
所以我根据亚马逊的规范创建了一个大的 XHTML 文件(23 MB 左右)并在 Kindle Previewer 中打开它,它看起来很好。但是,Kindle Previewer 不允许您将 XHTML 文件导出到 MOBI。他们希望您创建一个中间 epub 文件。
我尝试使用 Pandoc 进行转换,但没有成功,因为它去掉了所有特定的 HTML 标记,只保留在段落中。然后我尝试使用口径。根据错误消息,由于 XHTML 文件太大,正常的 XHTML -> epub 转换失败。如果遇到此错误,Calibre 建议打开“启发式模式”,我尝试过,但运行数小时后仍未完成运行。
然后我尝试使用从this tutorial 获取的示例文件自己创建 epub 文件。我发现这不是微不足道的,使用epubcheck 的检查在我生成的文件中发现了许多难以理解的错误。 epub 文件的生成也有点复杂,因为您可能需要将 XHTML 文件拆分为许多较小的文件,这些文件的大小应该是 250 kb,因为电子阅读器往往难以解析较大的文件。
所以我认为应该有一种更简单的方法来做到这一点,或者可能有一个库可以帮助做到这一点。也许将单词 + 变形输出到其他更简单的字典格式,然后使用现有库将其转换为 MOBI 并完全省略 XHTML 生成,这甚至是一个好主意。目前我正在使用 Python,但如果有必要,我也会使用其他语言。我可以尝试什么?
编辑:添加到我尝试过的东西:有一个显然是封闭源脚本here,不幸的是它不支持变形,所以不起作用。并且有说明 here 建议使用 Mobipocket Creator 将文件转换为 PRC,然后使用 Kindle Previewer 打开它。这种方法的问题是 Kindle Previewer 会抛出错误:
Kindle Previewer 不支持此文件,该文件是使用旧版 KindleGen 或第三方应用程序创建的。我们建议直接使用 EPUB 或 DOCX 格式在 Kindle 上预览和发布您的图书。
Mobipocket Creator here 还有更详细的说明,告诉你直接将生成的.prc 文件移动到kindle 上。我试过了,但它没有被识别为字典。
【问题讨论】:
我认为 calibre 应该可以实现,但如果这不起作用,那么也许您可以使用网站 goodreads 创建一个库。在某些国家/地区,亚马逊可以直接链接到 goodreads。 help.goodreads.com/s/article/How-do-I-import-my-Amazon-books 如果这不可能,您可以手动添加书籍或尝试从亚马逊创建一个可以导入的文件。 @Klaus 不幸的是,据我所知,它似乎不支持导入 XHTML 文件。 【参考方案1】:我自己想出来的。首先我自己实现了一个解决方案,然后我找到了 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词典的主要内容,如果未能解决你的问题,请参考以下文章