查词时 Kindle 字典在中英文电子书中的不同表现

昨天有一位小伙伴向 Kindle 伴侣提出一个比较令人费解的和字典有关的问题,针对这一问题,Kindle 伴侣花费了四五个小时反复测试,终于得到一个比较说得过去并且能够解决该问题的结果。这些问题和回答都可以在字典下载留言区看到,本文系据此整理而成。

目录

一、问题起因
二、几种猜测
三、反复测试
四、得出结论
五、解决问题

一、问题起因

这位小伙伴提出的问题是这样的。他有两个版本的《白鲸》英文书,一本是《白鲸(中文导读英文版)》,一本是《Moby Dick: or the White Whale (白鲸) (免费公版书)》。当分别在两本书里查询两个相同的单词,比如 nailed,前者可以显示出字典中的 nail 单词释义,但是在后者里却无法显示释义,其他第三方字典也是这样的情况。

二、几种猜测

对于 Kindle 字典的工作原理,在文章《自制 Kindle 字典简明教程(进阶篇)》有详细叙述。这里提取一个要点再说明一下。

在使用字典查词时,Kindle 是通过字典文件中的一行代码来锚定单词的,比如 do 这个单词,便是调用字典文件中的 <idx:orth value="do"> 这行代码来锚定的。但是我们都知道单词 do 有很多形式,比如 does、did、doing,还有很多缩写词,比如 don’t、doesn’t,甚至短语 do something、do sth. 等。Kindle 本身是不会区分他们的,而是需要在字典文件中预设它们,才能让 Kindle 知道哪些词和哪个词是一个意思。有些比较好的字典,比如官方字典就会在代码中添加比较全面的扩展单词,类似 <idx:iform value="did" /><idx:iform value="does" /> …… 这种,这样在查询 do 这个单词时,它的不同形式的单词或缩略词才会显示出和 do 相同的含义。

但是有很多第三方字典并没有做到这样细致,仅在锚定单词中写了一个 do,那自然 does、doesn’t 这些同义不同形或缩略形式被选中后就无法显示释义。如果想要解决这个问题就需要修改字典文件。不过遗憾的是手工编辑效率太低,目前也没有比较顺手的工具。

按照以上的解释,如果使用同一本字典,查询不同的两本书中的同一个单词,显示结果应该是一样的。比如那位小伙伴所查询的 nailed 这个单词,应该是不可能一本书显示一本书不显示的。但通过对这两本书的实际测试,发现问题确实存在,如下面截图所示:

nailed_1

▲《白鲸(中文导读英文版)》查询单词 nailed 显示词义

nailed_2

▲《Moby Dick: or the White Whale (白鲸) (免费公版书)》查询单词 nailed 不显示词义

这确实令人费解。因为 Kindle 在撰写自制字典教程时曾经测试过,Kindle 确实是无法自动识别单词的时态的。为了验证这个问题,Kindle 伴侣又进行了一系列的测试工作。

三、反复测试

首先要排查的是字典中到底有没有 nailed 这个单词。为了方便对比,分别选取了一本 Kindle 内置的“A Modern English- Chinese Dictionary (现代英汉词典)”,一本名为“朗道英文字典”第三方字典,然后使用 Kindle Unpack 分别把它们的词条列表提取出来,并找到 nail 这个词。

首先可以排出的就是官方的英汉字典,因为通过查看字典文件的代码可以看到,官方字典对 nail 的每个时态都在代码里进行了扩展,所以不论在哪一本书里都会得到一致的结果。而朗道英文字典的代码中只有一个 nail,并没有其他 nailed、nails 这样的扩展词汇。按理说,所有的电子书在使用该字典时查询 nailed 这个单词时,都不应该显示词义。换句话说,查询 nailed 这个单词的时候,不显示词义才是正常的,显示的倒不正常了。难道问题出在电子书上?

接下来需要对比的就是《白鲸(中文导读英文版)》和《Moby Dick: or the White Whale (白鲸) (免费公版书)》两本书。同样使用 Kindle Unpack 分别把它们的页面文档提取出来,同时查询页面代码中的单词 nailed,发现并没有什么区别。接着检查了这两本书的 opf 配置文件,发现这两本书指定的页面语言不一样。中文导读版页面指定的语言是 <dc:language>zh</dc:language>,而免费公版书页面指定的语言是 <dc:language>en</dc:language>。看来问题可能就出在这里了。为了确认又经过了一些测试验证了下,最终得出了以下结论。

四、得出结论

首先可以肯定,字典本身是没有问题的,当查询某词不显示的时候确实是因为字典中没有这个词。问题极可能出在 Kindle 的处理机制上,下面是经过反复测试得出的一些结论,虽然不能肯定,但也八九不离十,供参考。

测试文件关于字典问题的测试文件

在测试文件中,分别有一本指定语言为 en 的电子书和一个指定语言为 zh 的电子书,他们的内容都相同,都有 nail、do、go 这三个单词的不同形式和短语,还包含一个错字。还有一本测试字典,里面只有 nail、do、go 这三个单词,无任何其他扩展形式。请先下载测试文件,并把测试电子书和字典分别放到您的 Kindle 中,然后再看下面的解释。

电子书分为英文电子书和中文电子书,这可以通过调取字体设置判断,当选择字体时显示的都是中文字体,那电子书的语言指定的就是 zh,反之,电子书的语言指定的就是 en。电子书指定语言的不同可能会导致 Kindle 字典的工作方式有所不相同。当电子书语言指定为 en 的时候,字典的工作方式可能是全词匹配,比如 do,如果字典中并没有设置 doing、does 等扩展词时,只有选择 do 这个词的时候才能显示词义,而选择 doing、does 这种词是无法显示释义的。

而当电子书文件指定语言为 zh 时,字典的工作方式好像发生了变化。比如查询 nailed 的时候,虽然字典文件中只有 nail 这个词,并没有预设 nailed、nails 这样的扩展词,但 Kindle 好像会自动识别时态似的,居然能显示出 nail 的释义。但是,这其实只是一种假象。通过测试文件就能发现,选择 do,虽然能识别 does、doing,但却不能识别 did,这就证明 Kindle 并不能识别时态。

很有可能是 Kindle 在处理中文电子书中的字词包括英文单词时,使用的是某种识别机制。当遇到某个单词时,首先判断这是否是个正确的单词,如果是一个正确的单词,但字典中却没有相对应的单词释义时,那么就会自动截取字典中能够匹配的那一段。比如 nailed,虽然字典中没有这个单词,单 Kindle 认为这是一个存在、正确的单词,所以就取其中和字典中匹配的一部分 nail 并显示出来其释义。但是当选择 nailings 这个不存在的单词,字典就会直接忽略,不显示任何释义。

其他单词也是如此,比如 doing、does 都会被识别成 do,但是 did 却不行。going、goes 都会被识别成 go,但是 went 却不行。另外还有个有趣的现象,do sth 会被识别成 do,但是 go away 却不行,这就证明 Kindle 中肯定有一个规则在起作用,至于什么规则就不知道了。

五、解决问题

综上所述,您遇到的问题和字典文件无关,只是因为电子书指定的语言和 Kindle 的对单词的处理机制刚好碰到一起产生了作用。所以如果您想要利用这种处理机制,只需要把电子书指定的语言更改为 zh 即可。可以使用 Kindle Unpack 把电子书分解,然后修改 opf 文件,把其中的 <dc:language>en</dc:language> 更改为 <dc:language>zh</dc:language>,然后再用 KindleGen 重新打包成 mobi 文件。感觉这样太麻烦也可以使用 Calibre 修改元数据的方法解决。

有帮助,[ 捐助本站 ] 或分享给小伙伴:

发表评论

标注为 * 的是必填项。您填写的邮箱地址将会被保密。如果是在本站首次留言,审核后才能显示。
若提问,请务必描述清楚该问题的前因后果,提供尽可能多的对分析该问题有帮助的线索。

小伙伴们发表了 5 条评论

  1. 很想问问 kindle的字典怎样才能直接搜索相关短语??比如bring in之类的短语该如何搜索???

    • 李中恺 您好。是否能显示短语释义是由字典本身决定的,如果字典有这么一个词条就会显示,否则就不显示。所以不论哪个字典,都不能保证每个短语都能显示。

  2. 改变语言种类 也可以用calibre修改元数据 感觉更简单 一个回复在评论下的问题 先是花费大量时间测试 随即就编辑成一篇报告 顿时感觉这个伴侣真的很有人情味