查看: 4977|回复: 21
打印 上一主题 下一主题

[讨论] MDX转MOBI过程及相关思考(附COED11th.mobi)

[复制链接]
  • TA的每日心情
    开心
    前天 18:05
  • 签到天数: 708 天

    [LV.9]以坛为家II

    28

    主题

    1178

    回帖

    2万

    积分

    状元

    Rank: 9Rank: 9Rank: 9

    积分
    27051
    跳转到指定楼层
    1
    发表于 2019-9-16 17:58:18 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
    本帖最后由 nullname 于 2019-10-12 08:47 编辑

    00
    相较于MDX词典的百花齐放、门类齐全(从学习型再到母语型再到俗语习语俚语等,不一而足。) Kindle用的MOBI词典就显得冷落多了,有意义的词典非常有限,也许是因为Kindle的使用人数很少吧.... 基本就是官方的英英、英汉和 skywind3000 大神的这本 简明英汉必应版 了。
    其他的像书伴上的那些都很难用,主要问题就在于不具备 词形变化 的查询能力。比如书中出现了 looked, raised 这种单词,它们基本都不能直接查询到 look, raise。

    之前在知乎上看见孙缓之的一篇帖子(见此 Kindle OALD9 民间发布(仅限交流使用)),可以用 dsl2mobi 这个工具来将 dsl 词典转化为 mobi,且具备词形变化的查询能力。但貌似 dsl 词典不是太好找。

    因此,想试试能否将 MDX 转为 MOBI。教程不多,仅在书伴上找到了这几篇文章。(请见 《如何把 MDX 格式词典转换成 Kindle 字典》《自制 Kindle 字典简明教程(入门篇)》《自制 Kindle 字典简明教程(进阶篇)》

    根据  《如何把 MDX 格式词典转换成 Kindle 字典》 这篇教程,转化出来的词典不具备查询 词形变化 的单词的能力。主要原因在于没有添加变化后的单词,如图红色矩形区域(更详细的请见 《自制 Kindle 字典简明教程(进阶篇)》)。

    以 COED11 举例,这是转换后的 HTML 中的词头部分:

    若要具备 词形变化 能力,需要的区块(红色矩形部分):



    我抓破脑袋都想不出怎么样才能自动添加这些进去,后来想起 dsl2mobi 有这个功能,就下载下来研究了一下。该工具是 ruby 写的,基本看不大懂,不过我在其目录下发现了包含十几万英文单词词形变化的 TXT:



    排列比较有规律,格式为  单词原型:变化1,变化2,变化3......  因此用 python 写了正则批量查询添加:



    跑完之后:



    基本原理大概就是从词典中取出主词条单词后再在 forms-EN.txt 中查询匹配,若成功则返回所有的变化形式并添加区块代码。然后重新生成 mobi 。

    兴冲冲的试了试,

                               两个看起来都没什么问题,和我们想想中一样。

    再试试,

         查询dealt的时候,按设想,应该是查询deal才对,结果并不是。

    用官方的词典试试

    同样如此。



    01

    后来经过反复试验,发现了 Kindle 的查词逻辑:选中单词后,查询主词条是否匹配成功,成功则返回对应的条目,同时不再继续查询变形词条。没有主词条的话则查询词形变化区块是否有匹配,若有则返回变化词条的原型主词条。

    deal 的词条部分已经添加了 dealt 作为变形词条,然而我手中的这版 COED11.mdx 和官方的Oxford Dictionary of English 都有了 dealt 这个主词条,词条内容如上图。因此不会返回 deal 词条的内容。

    知道问题所在后,如何解决呢?想了想,很难,因为英语词义太丰富(Rich)了。比如flame,它的词形变化理应有flaming对吧。但是flaming本身可能自成一义(火爆的,讨厌的,该死的),如果查询flaming的时候跳转到了flame,从flame很难猜到flaming的一些专有词义。除非亚马逊更新固件,修改上述的查词逻辑,即不论查不查的到主词条,变形词条所在的原型主词条一并显示。不过目前看来希望渺茫。


    02
    即使如此,还是有许多优秀的 MDX 词典值得页应该被转化为 mobi 以供大家使用的。个人认为kindle上不适合使用学习型词典这类词义较少的词典。比如你在看书的时候看到了square这个单词,假如你用牛津高阶,你翻到底都翻不到“步兵方阵”这个释义,最后陷入深深的自我怀疑...然后又去提问“为什么我每个单词的意思都看得懂但是就是读不懂句子的意思...”。

    经过一段时间的试验,我发现 The World Book Dictionary 和 Microsoft Encarta Dictionary 这两本词典非常适合“高阶有余,母语不足”的英语水平者的使用,但把它们转成mobi难度略大......由于水墨屏的特性,kindle 上词典个人以为只需要1.粗体 2. 斜体 3.浅色 这几种样式即可,不要图片、音频。同时要求css内置在mdx中,不能外挂。在此也向各位请教如何将外挂的css内置进mdx中的方法,我尝试了在html中添加style标签然后将css全部复制进去,但似乎并没有效果?各位如果有较好的适合在kindle上使用的词典也可以发出来大家尝试转换。

    写的比较乱,抱歉。也欢迎大家交流讨论和指点。


    最后附上制作完成的COED11th.mobi


    链接: https://pan.baidu.com/s/1TyMK4P1A6ltCEDr2Bt_rNg 提取码: zp3b

    ----------------------2019.10.12补链----------------------
    链接: https://pan.baidu.com/s/1bSRfcScur482utaLmsxOgg 提取码: 4b5h












    评分

    3

    查看全部评分

    本帖被以下淘专辑推荐:

  • TA的每日心情
    慵懒
    2020-5-3 16:00
  • 签到天数: 207 天

    [LV.7]常住居民III

    28

    主题

    690

    回帖

    1万

    积分

    状元

    Rank: 9Rank: 9Rank: 9

    积分
    12838
    2
    发表于 2019-9-16 18:36:15 | 只看该作者
    按浏览器加载css文件的逻辑(不包括css外挂,css外挂是MDict和Eudic默认允许的非通行标准做法,国际软件一般还未支持)的三种:
    1. html tag 上的style, inline,如 <div style="font-size:14px">
    2. <style>div {font-size:14px;}</style>
    3. <link href="styles.css">

    第三种,根据mdict的设计逻辑,可以放到mdd文件中;前两种,直接在mdx文件中。
  • TA的每日心情
    奋斗
    2019-4-14 02:12
  • 签到天数: 93 天

    [LV.6]常住居民II

    250

    主题

    2966

    回帖

    53万

    积分

    状元

    吃水不忘挖井人

    Rank: 9Rank: 9Rank: 9

    积分
    531111

    灌水大神章笑傲江湖章推广专家QQ 章

    3
    发表于 2019-9-16 19:24:53 | 只看该作者
    00开头,程序员无疑了
  • TA的每日心情
    奋斗
    2019-4-14 02:12
  • 签到天数: 93 天

    [LV.6]常住居民II

    250

    主题

    2966

    回帖

    53万

    积分

    状元

    吃水不忘挖井人

    Rank: 9Rank: 9Rank: 9

    积分
    531111

    灌水大神章笑傲江湖章推广专家QQ 章

    4
    发表于 2019-9-16 19:25:15 | 只看该作者
    看了下这个源码跟mac词典源码有点像
  • TA的每日心情
    开心
    前天 18:05
  • 签到天数: 708 天

    [LV.9]以坛为家II

    28

    主题

    1178

    回帖

    2万

    积分

    状元

    Rank: 9Rank: 9Rank: 9

    积分
    27051
    5
     楼主| 发表于 2019-9-16 19:39:05 | 只看该作者
    johannhuang 发表于 2019-9-16 18:36
    按浏览器加载css文件的逻辑(不包括css外挂,css外挂是MDict和Eudic默认允许的非通行标准做法,国际软件一 ...

    学习了,不过我想的是是否有什么方法能将现成的外挂css中的样式还原进mdx中呢?因为mdx差不多本身就是多个html
  • TA的每日心情
    开心
    前天 18:05
  • 签到天数: 708 天

    [LV.9]以坛为家II

    28

    主题

    1178

    回帖

    2万

    积分

    状元

    Rank: 9Rank: 9Rank: 9

    积分
    27051
    6
     楼主| 发表于 2019-9-16 19:39:57 | 只看该作者
    jonah_w 发表于 2019-9-16 19:25
    看了下这个源码跟mac词典源码有点像

    可惜只是像...若是一样的那大神就很多了..
  • TA的每日心情
    擦汗
    前天 16:06
  • 签到天数: 885 天

    [LV.10]以坛为家III

    7

    主题

    2845

    回帖

    2万

    积分

    状元

    Rank: 9Rank: 9Rank: 9

    积分
    24806
    7
    发表于 2019-9-16 20:12:37 | 只看该作者
    Great you are! thanks for sharing
  • TA的每日心情
    开心
    2018-7-30 20:23
  • 签到天数: 9 天

    [LV.3]偶尔看看II

    1

    主题

    107

    回帖

    6265

    积分

    会元

    Rank: 7Rank: 7Rank: 7

    积分
    6265
    8
    发表于 2019-9-16 20:26:44 | 只看该作者
    希望像楼主这样的热心肠同时技术又高超的人越来越多,Kindle词典的资源确实很少,而且官网的都很陈旧了,thesaurus 就相当于没有,作为用Kindle学习英语的人来讲,还是有小小的失望
  • TA的每日心情
    慵懒
    2020-5-3 16:00
  • 签到天数: 207 天

    [LV.7]常住居民III

    28

    主题

    690

    回帖

    1万

    积分

    状元

    Rank: 9Rank: 9Rank: 9

    积分
    12838
    9
    发表于 2019-9-16 21:46:58 | 只看该作者
    nullname 发表于 2019-9-16 19:39
    学习了,不过我想的是是否有什么方法能将现成的外挂css中的样式还原进mdx中呢?因为mdx差不多本身就是多 ...

    1. 解包mdd,加入css再打包,同时修改mdx里面得css引用
    2. 在mdx中按照前述方法2进行加style (但你似乎说了不行,不知道你为什么不行,可能有局部出错了)
  • TA的每日心情
    开心
    前天 18:05
  • 签到天数: 708 天

    [LV.9]以坛为家II

    28

    主题

    1178

    回帖

    2万

    积分

    状元

    Rank: 9Rank: 9Rank: 9

    积分
    27051
    10
     楼主| 发表于 2019-9-17 08:29:36 | 只看该作者
    johannhuang 发表于 2019-9-16 21:46
    1. 解包mdd,加入css再打包,同时修改mdx里面得css引用
    2. 在mdx中按照前述方法2进行加style (但你似乎 ...

    我再试了下,这次删掉了一些比较高级的样式,有效果,一些颜色斜体之类的能显示,这样看来,应该是kindle的mobi不支持太多高级CSS,只支持简单的
  • TA的每日心情
    开心
    前天 18:05
  • 签到天数: 708 天

    [LV.9]以坛为家II

    28

    主题

    1178

    回帖

    2万

    积分

    状元

    Rank: 9Rank: 9Rank: 9

    积分
    27051
    11
     楼主| 发表于 2019-9-17 16:39:05 | 只看该作者
    试了一下午,崩溃了。可以插入外置CSS,在此篇文章《如何把 MDX 格式词典转换成 Kindle 字典》第三步之后生成的html文件<body>标签之前可插入<head><link rel.xxxxxxxx></head>来引用外部CSS,但是不知为何生成的margin和padding等在html中显示正常生成mobi后怎么页不正常。

    该用户从未签到

    0

    主题

    46

    回帖

    195

    积分

    童生

    Rank: 2

    积分
    195
    12
    发表于 2019-9-23 16:28:01 | 只看该作者
    楼主,很巧,我这两天也是在忙着转一部词根词缀的词典为mobi,按照书伴的方法做出来了,只是不支持模糊搜索,遂觉得很难受,查了一番后,刚巧也看到了知乎专栏上的dsl教程,只是我这本词典并无dsl格式,网上遍寻又是找不到mdx转dlc的方法,看到楼主的方法,我也想批量增加变形,只是Python还没入门,不知楼主能否分享一下Python代码,我自己试一试,恳求

    点评

    我正在制作一部Kindle词典,为解决一些问题写了两个工具,其中一个就是这个。等我近期整理  发表于 2019-9-23 18:12

    该用户从未签到

    0

    主题

    46

    回帖

    195

    积分

    童生

    Rank: 2

    积分
    195
    13
    发表于 2019-9-24 08:13:11 | 只看该作者
    天赋的太阳 发表于 2019-9-23 16:28
    楼主,很巧,我这两天也是在忙着转一部词根词缀的词典为mobi,按照书伴的方法做出来了,只是不支持模糊搜索 ...

    好,支持,感谢
  • TA的每日心情
    郁闷
    2019-12-9 22:20
  • 签到天数: 3 天

    [LV.2]偶尔看看I

    0

    主题

    14

    回帖

    142

    积分

    童生

    Rank: 2

    积分
    142
    14
    发表于 2019-10-11 20:24:57 | 只看该作者
    不好意思打扰了,楼主,链接挂了... :-P
  • TA的每日心情
    开心
    前天 18:05
  • 签到天数: 708 天

    [LV.9]以坛为家II

    28

    主题

    1178

    回帖

    2万

    积分

    状元

    Rank: 9Rank: 9Rank: 9

    积分
    27051
    15
     楼主| 发表于 2019-10-12 08:48:08 | 只看该作者
    vicizero 发表于 2019-10-11 20:24
    不好意思打扰了,楼主,链接挂了... :-P

    分享链接已补
  • TA的每日心情
    郁闷
    2019-12-9 22:20
  • 签到天数: 3 天

    [LV.2]偶尔看看I

    0

    主题

    14

    回帖

    142

    积分

    童生

    Rank: 2

    积分
    142
    16
    发表于 2019-10-12 23:05:58 | 只看该作者

    好的,已收到,正尝试使用
  • TA的每日心情
    开心
    2019-3-26 21:36
  • 签到天数: 178 天

    [LV.7]常住居民III

    16

    主题

    549

    回帖

    2万

    积分

    状元

    Rank: 9Rank: 9Rank: 9

    积分
    26462

    QQ 章

    17
    发表于 2019-10-13 01:24:40 | 只看该作者
    本帖最后由 流星冲击 于 2019-10-13 01:28 编辑

    转macos词典和kindle词典最好的源文本格式是stardict格式,而不是mdict(mdx)和lingvo(dsl)格式,stardict可以通过词头添加|来实现查询词条变形,例如walk|walks|walked|walking(mdict需要用@@@link来实现),用pyglossry转成macos词典源码就自动转成相应的词性变化的词条索引,查walked会自动跳转到walk。
    epub dict文档的格式、kindle词典、macos词典、epwing词典的源码在处理词性变化索引都是一致的,源码也类似。kindle词典还停留在xhtml时代,不支持音视频,支持css元素少,不开源,可能受限于机器性能,所以一直没有kindle fire8制式(类似epub3)的开发文档。
    epub dict有开发文档了,但没有编译器和相关阅读器来支持,用epub3制式来开发一款词典,可用的css元素相当多,之前想用encarta dictionary研究如何转成epub,发现只能作阅读使用,不能用来查询单词,就放弃了。epwing的词头索引适合做日本语的词条索引,当然也适用于印欧语的词性变化词典的索引,但不支持css。macos词典自从2011年以来,苹果就没对其格式进行大的修改,可能js方面兼容性有问题,css应该没问题,用三指查询macos词典可是会上瘾的(即点生词即弹出解释界面,非常方便)。
    所以我的思路是,dsl,mdx等格式,先转成stardict,由于stardict开源,工具多,转换成mobi的源码可能会自带词性变形。
    还有mdx内嵌style标签,需要每个词头content都要包含,你是想让mobi每个词条都实现某些css效果吧,mobi7不是可以内嵌css吗?为什么还要内嵌style标签?当然,我没有转过mobi词典,只是提出疑问,没有打击楼主制作mobi词典的热情。
  • TA的每日心情
    开心
    前天 18:05
  • 签到天数: 708 天

    [LV.9]以坛为家II

    28

    主题

    1178

    回帖

    2万

    积分

    状元

    Rank: 9Rank: 9Rank: 9

    积分
    27051
    18
     楼主| 发表于 2019-10-13 09:11:32 | 只看该作者
    本帖最后由 nullname 于 2019-10-13 09:12 编辑
    流星冲击 发表于 2019-10-13 01:24
    转macos词典和kindle词典最好的源文本格式是stardict格式,而不是mdict(mdx)和lingvo(dsl)格式,stardict可 ...

    是的,书伴上的教程也是这个原理,即MDX转StarDict再转tab文件再转OPF最后转MOBI。因为tab2opf这个工具比较方便,且tab文件的格式也比较友好(每个词条由词头tab空格意向这三个部分组成),所以只要能转成tab即可,后来我也发现了pyglossary这个工具,但是该工具有个缺点就是转一些词典(尤其是一些汉语辞典)的时候,tab文件中意项部分全部都是数字形式的CSS,可能是该辞典在用MDXBuilder生成的时候添加了style资源。

    dsl2mobi这个工具可以直接为dsl词典生成带有词性变化的mobi,但是考虑到词典内本身存在的大量@LINK跳转,最好还是解包后进一步处理较好。

    关于内嵌CSS,此篇帖子发出后我又经过试验搜索,最终得出的结论是,可以支持外挂CSS,在每个HTML文件的头部添加LINK即可。层主可以看看这篇:https://www.pdawiki.com/forum/forum.php?mod=viewthread&tid=36130
  • TA的每日心情
    慵懒
    2019-11-1 20:48
  • 签到天数: 120 天

    [LV.7]常住居民III

    0

    主题

    232

    回帖

    896

    积分

    举人

    Rank: 4

    积分
    896
    19
    发表于 2019-10-22 18:28:39 | 只看该作者
    楼主,在下学习心切,也向你恳求相关Python代码,anyway,我已不胜感激。。。
  • TA的每日心情
    开心
    前天 18:05
  • 签到天数: 708 天

    [LV.9]以坛为家II

    28

    主题

    1178

    回帖

    2万

    积分

    状元

    Rank: 9Rank: 9Rank: 9

    积分
    27051
    20
     楼主| 发表于 2019-10-22 19:18:37 | 只看该作者
    vpda2016 发表于 2019-10-22 18:28
    楼主,在下学习心切,也向你恳求相关Python代码,anyway,我已不胜感激。。。 ...

    代码已经发了,在这个帖子里面

    Python辅助MDX转MOBI(以AHD5th为例)
    https://www.pdawiki.com/forum/fo ... hread&tid=36130
    (出处: 掌上百科 - PDAWIKI)
  • TA的每日心情
    慵懒
    2019-11-1 20:48
  • 签到天数: 120 天

    [LV.7]常住居民III

    0

    主题

    232

    回帖

    896

    积分

    举人

    Rank: 4

    积分
    896
    21
    发表于 2019-10-22 19:32:25 | 只看该作者
    nullname 发表于 2019-10-22 19:18
    代码已经发了,在这个帖子里面

    Python辅助MDX转MOBI(以AHD5th为例)

    正在看,谢谢亲。大神。