掌上百科 - PDAWIKI

 找回密码
 免费注册

QQ登录

只需一步,快速开始

查看: 6906|回复: 21

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

[复制链接]
  • TA的每日心情
    开心
    2023-9-27 20:45
  • 签到天数: 847 天

    [LV.10]以坛为家III

    发表于 2019-9-16 17:58:18 | 显示全部楼层 |阅读模式
    本帖最后由 nullname 于 2019-10-12 08:47 编辑
    + T2 ]0 s2 Y3 Y& m
    + P8 c  ~/ y! Q" F' B) @$ H006 h0 w) f9 r8 H/ ~" m
    相较于MDX词典的百花齐放、门类齐全(从学习型再到母语型再到俗语习语俚语等,不一而足。) Kindle用的MOBI词典就显得冷落多了,有意义的词典非常有限,也许是因为Kindle的使用人数很少吧.... 基本就是官方的英英、英汉和 skywind3000 大神的这本 简明英汉必应版 了。; f  y0 d3 Y: B( ?: C7 W. H
    其他的像书伴上的那些都很难用,主要问题就在于不具备 词形变化 的查询能力。比如书中出现了 looked, raised 这种单词,它们基本都不能直接查询到 look, raise。( [" q: Z) m2 b: N( L" ~  ?5 v
    + ]- u2 [' N3 C/ @$ x% Q
    之前在知乎上看见孙缓之的一篇帖子(见此 Kindle OALD9 民间发布(仅限交流使用)),可以用 dsl2mobi 这个工具来将 dsl 词典转化为 mobi,且具备词形变化的查询能力。但貌似 dsl 词典不是太好找。
    : t; {$ e7 @+ ^$ p1 M! M3 V0 Q, y" t- m: [  |
    因此,想试试能否将 MDX 转为 MOBI。教程不多,仅在书伴上找到了这几篇文章。(请见 《如何把 MDX 格式词典转换成 Kindle 字典》《自制 Kindle 字典简明教程(入门篇)》《自制 Kindle 字典简明教程(进阶篇)》
    2 G$ Q# R9 G2 U( \) E( X/ o' ]1 b6 E5 e' L9 Q5 s- M' u
    根据  《如何把 MDX 格式词典转换成 Kindle 字典》 这篇教程,转化出来的词典不具备查询 词形变化 的单词的能力。主要原因在于没有添加变化后的单词,如图红色矩形区域(更详细的请见 《自制 Kindle 字典简明教程(进阶篇)》)。
    - S5 U) G& w, T1 h3 s
    % c6 U& T% p' K3 c/ l, {
    以 COED11 举例,这是转换后的 HTML 中的词头部分:
      b1 c- W  m0 g5 C' \
      w! d0 z% N1 C9 }, C若要具备 词形变化 能力,需要的区块(红色矩形部分):  t0 ]; b  z. Z3 S+ D
      I: @+ f6 y: i( h6 W! c4 K
    ' o  ?* {+ o1 v, ^! N

    + \. f/ @3 P5 z6 O$ F. ?/ O- b我抓破脑袋都想不出怎么样才能自动添加这些进去,后来想起 dsl2mobi 有这个功能,就下载下来研究了一下。该工具是 ruby 写的,基本看不大懂,不过我在其目录下发现了包含十几万英文单词词形变化的 TXT:
    & f% c# A- j* E' t" e

    + x, i; D- B) T2 z" C9 |& E: m0 e, H

    & I2 T/ K1 t% F. P5 A排列比较有规律,格式为  单词原型:变化1,变化2,变化3......  因此用 python 写了正则批量查询添加:
    5 c' x8 B) L4 M$ R
    4 [% l9 a! S  P0 Q" \
    9 u; W1 _% y# o$ l4 N# _+ f
    9 y# O  P* m2 D; N
    跑完之后:
    - H# \4 ^2 V8 J. n: R. c' ^8 J+ R

    : C  I" m0 m* H) r9 V3 |% E6 y" }" W9 ~

    1 c# z7 P0 ~- b1 w基本原理大概就是从词典中取出主词条单词后再在 forms-EN.txt 中查询匹配,若成功则返回所有的变化形式并添加区块代码。然后重新生成 mobi 。: o4 O: m% E  X- {9 x% V" N& h
    3 Y$ p8 E) d2 ~8 o0 `
    兴冲冲的试了试,
    9 F' L- S' G+ F
    , D' [) [" `" h7 X# {  j$ x
                              两个看起来都没什么问题,和我们想想中一样。
    0 n* ^  l+ V9 h! w* [& Y$ E; ]$ @6 x5 V7 w& c! S+ J& b
    再试试,
    0 N% U  l* \6 \6 h7 S4 S

    % Z, g* g* `# G6 H7 V; e5 l     查询dealt的时候,按设想,应该是查询deal才对,结果并不是。5 s4 |' E, e1 N/ S
    ) R  c% [7 e# W( }
    用官方的词典试试8 ~2 p6 k' V0 Q9 c
    7 m. b/ }8 H) G1 h: s- F. h1 X
    同样如此。
    1 ?: l3 B8 [4 N6 P0 V
    , Q) `! q5 \; z) J* e2 L
    , s2 Z/ e9 B, t/ c3 \7 ^

    9 |: A6 w  W2 a2 k01" @6 z6 `7 T4 L! g1 H6 i# w2 I
    ! C$ G4 v* d" Z% C0 w6 H9 s* {
    后来经过反复试验,发现了 Kindle 的查词逻辑:选中单词后,查询主词条是否匹配成功,成功则返回对应的条目,同时不再继续查询变形词条。没有主词条的话则查询词形变化区块是否有匹配,若有则返回变化词条的原型主词条。
    ) v: v+ R8 B* A3 G$ p9 W
    % b- a( x5 K3 Q1 zdeal 的词条部分已经添加了 dealt 作为变形词条,然而我手中的这版 COED11.mdx 和官方的Oxford Dictionary of English 都有了 dealt 这个主词条,词条内容如上图。因此不会返回 deal 词条的内容。
    + l) m- Y9 z% ]! j; Z* d3 ], K+ r: J5 [6 m) ~# I
    知道问题所在后,如何解决呢?想了想,很难,因为英语词义太丰富(Rich)了。比如flame,它的词形变化理应有flaming对吧。但是flaming本身可能自成一义(火爆的,讨厌的,该死的),如果查询flaming的时候跳转到了flame,从flame很难猜到flaming的一些专有词义。除非亚马逊更新固件,修改上述的查词逻辑,即不论查不查的到主词条,变形词条所在的原型主词条一并显示。不过目前看来希望渺茫。
    & Y& }  K' H# a# K+ z+ H$ g

    ) l" g, H0 k5 Y7 p- l! q

    9 i4 w& s5 k; ~% ?) K+ O5 g1 t02
    ; c0 z0 H: Y/ \& {( I9 g即使如此,还是有许多优秀的 MDX 词典值得页应该被转化为 mobi 以供大家使用的。个人认为kindle上不适合使用学习型词典这类词义较少的词典。比如你在看书的时候看到了square这个单词,假如你用牛津高阶,你翻到底都翻不到“步兵方阵”这个释义,最后陷入深深的自我怀疑...然后又去提问“为什么我每个单词的意思都看得懂但是就是读不懂句子的意思...”。
    & m& Y5 z: D  R' b, E: v# x
    , \4 [% A9 g  e( ~( y6 U经过一段时间的试验,我发现 The World Book Dictionary 和 Microsoft Encarta Dictionary 这两本词典非常适合“高阶有余,母语不足”的英语水平者的使用,但把它们转成mobi难度略大......由于水墨屏的特性,kindle 上词典个人以为只需要1.粗体 2. 斜体 3.浅色 这几种样式即可,不要图片、音频。同时要求css内置在mdx中,不能外挂。在此也向各位请教如何将外挂的css内置进mdx中的方法,我尝试了在html中添加style标签然后将css全部复制进去,但似乎并没有效果?各位如果有较好的适合在kindle上使用的词典也可以发出来大家尝试转换。
    9 ~* m7 R" e) o- Y( {! g
    , E. q' u" y4 W8 L$ w' @; ]  b写的比较乱,抱歉。也欢迎大家交流讨论和指点。
    + n7 y- ]2 ]3 E- t+ _# W) ?

    , j/ x1 S. q3 h% d
    3 V) R. C2 d" a, b
    最后附上制作完成的COED11th.mobi
    $ X  A% ^3 D$ I3 }# @/ L! `; ]* i8 g' M

    0 M0 S4 y" @2 x0 l& }& X3 z链接: https://pan.baidu.com/s/1TyMK4P1A6ltCEDr2Bt_rNg 提取码: zp3b
    ; ^! S  j# l' `: s9 m, z3 n( Z; x
      Y  h9 G) b* m% O5 H8 K
    ----------------------2019.10.12补链----------------------& _. U9 @) h& ~6 a) D
    链接: https://pan.baidu.com/s/1bSRfcScur482utaLmsxOgg 提取码: 4b5h) Y0 Y1 J; p% h1 F9 w
    * ^. `+ G; D2 p1 t
    ' h) P$ b) @: f; t9 G7 |: k
    ( v' Z  o1 r- M& V; e  M
    ( Y' z. G2 T% A. c* Z/ @, W' N4 o

    ( I" R9 X; o8 j
    ; m, d. h# l( }* O
    / k6 b4 A& a, k; B( m& z: e/ }0 S

    1 u% g5 z9 V" M7 v' q2 }1 b
    " R) B) e- C* M; ?3 }

    % G& F( l* i* e0 V3 f6 D# ?1 N/ b# F" ?
    / F! T, X3 n0 L5 B( S

    本帖子中包含更多资源

    您需要 登录 才可以下载或查看,没有账号?免费注册

    x

    评分

    3

    查看全部评分

    本帖被以下淘专辑推荐:

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

    [LV.7]常住居民III

    发表于 2019-9-16 18:36:15 | 显示全部楼层
    按浏览器加载css文件的逻辑(不包括css外挂,css外挂是MDict和Eudic默认允许的非通行标准做法,国际软件一般还未支持)的三种:
    0 U8 c5 g& `! ]! d' o) \' m/ \5 ?1. html tag 上的style, inline,如 <div style="font-size:14px">
    / J& w: h1 E2 @! C2. <style>div {font-size:14px;}</style>
    8 e" X. O5 p6 n+ B- B0 m/ x3. <link href="styles.css">. r- X+ p4 v6 @9 W4 z
    2 _4 z! S, q4 Z: c
    第三种,根据mdict的设计逻辑,可以放到mdd文件中;前两种,直接在mdx文件中。6 t" X! w$ R2 |$ A/ }. k6 e( R; T
  • TA的每日心情
    奋斗
    2019-4-14 02:12
  • 签到天数: 93 天

    [LV.6]常住居民II

    发表于 2019-9-16 19:24:53 | 显示全部楼层
    00开头,程序员无疑了
  • TA的每日心情
    奋斗
    2019-4-14 02:12
  • 签到天数: 93 天

    [LV.6]常住居民II

    发表于 2019-9-16 19:25:15 | 显示全部楼层
    看了下这个源码跟mac词典源码有点像
  • TA的每日心情
    开心
    2023-9-27 20:45
  • 签到天数: 847 天

    [LV.10]以坛为家III

     楼主| 发表于 2019-9-16 19:39:05 | 显示全部楼层
    johannhuang 发表于 2019-9-16 18:36. I6 ], s" _1 J0 G9 g9 Y- w
    按浏览器加载css文件的逻辑(不包括css外挂,css外挂是MDict和Eudic默认允许的非通行标准做法,国际软件一 ...

    # I" W% ^, H0 b+ k; [学习了,不过我想的是是否有什么方法能将现成的外挂css中的样式还原进mdx中呢?因为mdx差不多本身就是多个html
  • TA的每日心情
    开心
    2023-9-27 20:45
  • 签到天数: 847 天

    [LV.10]以坛为家III

     楼主| 发表于 2019-9-16 19:39:57 | 显示全部楼层
    jonah_w 发表于 2019-9-16 19:25
    : `; V& M% P: j. A; Q4 T看了下这个源码跟mac词典源码有点像
    # _1 B2 }6 @! n/ B5 T/ v
    可惜只是像...若是一样的那大神就很多了..
  • TA的每日心情
    擦汗
    2024-2-8 08:54
  • 签到天数: 902 天

    [LV.10]以坛为家III

    发表于 2019-9-16 20:12:37 | 显示全部楼层
    Great you are! thanks for sharing
  • TA的每日心情
    开心
    2018-7-30 20:23
  • 签到天数: 9 天

    [LV.3]偶尔看看II

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

    [LV.7]常住居民III

    发表于 2019-9-16 21:46:58 | 显示全部楼层
    nullname 发表于 2019-9-16 19:399 E' M' g% p. h* `* T$ w
    学习了,不过我想的是是否有什么方法能将现成的外挂css中的样式还原进mdx中呢?因为mdx差不多本身就是多 ...
    ' D% e8 D# D8 f: ^3 V4 O
    1. 解包mdd,加入css再打包,同时修改mdx里面得css引用4 G% x' a% G' `2 ~
    2. 在mdx中按照前述方法2进行加style (但你似乎说了不行,不知道你为什么不行,可能有局部出错了)
  • TA的每日心情
    开心
    2023-9-27 20:45
  • 签到天数: 847 天

    [LV.10]以坛为家III

     楼主| 发表于 2019-9-17 08:29:36 | 显示全部楼层
    johannhuang 发表于 2019-9-16 21:461 U. W: Y4 B7 ~, r: x
    1. 解包mdd,加入css再打包,同时修改mdx里面得css引用
    : e( h6 I3 W% |! X/ E" O2. 在mdx中按照前述方法2进行加style (但你似乎 ...
      \! q% V- f5 ^
    我再试了下,这次删掉了一些比较高级的样式,有效果,一些颜色斜体之类的能显示,这样看来,应该是kindle的mobi不支持太多高级CSS,只支持简单的
  • TA的每日心情
    开心
    2023-9-27 20:45
  • 签到天数: 847 天

    [LV.10]以坛为家III

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

    该用户从未签到

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

    点评

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

    该用户从未签到

    发表于 2019-9-24 08:13:11 | 显示全部楼层
    天赋的太阳 发表于 2019-9-23 16:28
    * V' D3 u; q) K% K, S, P9 Q* b: L楼主,很巧,我这两天也是在忙着转一部词根词缀的词典为mobi,按照书伴的方法做出来了,只是不支持模糊搜索 ...

    % J9 B' k1 [# i0 z1 G& z. S好,支持,感谢
  • TA的每日心情

    2023-12-13 15:25
  • 签到天数: 4 天

    [LV.2]偶尔看看I

    发表于 2019-10-11 20:24:57 | 显示全部楼层
    不好意思打扰了,楼主,链接挂了... :-P
  • TA的每日心情
    开心
    2023-9-27 20:45
  • 签到天数: 847 天

    [LV.10]以坛为家III

     楼主| 发表于 2019-10-12 08:48:08 | 显示全部楼层
    vicizero 发表于 2019-10-11 20:249 I) y: D+ n* I4 ~* g6 J% d; E
    不好意思打扰了,楼主,链接挂了... :-P

    " V8 {* c9 _) `6 y2 }分享链接已补
  • TA的每日心情

    2023-12-13 15:25
  • 签到天数: 4 天

    [LV.2]偶尔看看I

    发表于 2019-10-12 23:05:58 | 显示全部楼层
    nullname 发表于 2019-10-12 08:48" }9 Y, o6 f' ~1 @$ D- ~
    分享链接已补

    7 q7 G3 h8 {) ?' P5 L- K好的,已收到,正尝试使用
  • TA的每日心情
    开心
    2019-3-26 21:36
  • 签到天数: 178 天

    [LV.7]常住居民III

    发表于 2019-10-13 01:24:40 | 显示全部楼层
    本帖最后由 流星冲击 于 2019-10-13 01:28 编辑 # c  |) ^( E5 ]
    * @1 ?- y# ^% m5 h+ G, q3 O+ \, z
    转macos词典和kindle词典最好的源文本格式是stardict格式,而不是mdict(mdx)和lingvo(dsl)格式,stardict可以通过词头添加|来实现查询词条变形,例如walk|walks|walked|walking(mdict需要用@@@link来实现),用pyglossry转成macos词典源码就自动转成相应的词性变化的词条索引,查walked会自动跳转到walk。3 b/ s- h) F# P
    epub dict文档的格式、kindle词典、macos词典、epwing词典的源码在处理词性变化索引都是一致的,源码也类似。kindle词典还停留在xhtml时代,不支持音视频,支持css元素少,不开源,可能受限于机器性能,所以一直没有kindle fire8制式(类似epub3)的开发文档。/ x8 I6 z2 ]& d9 D  w' u% K5 A9 R
    epub dict有开发文档了,但没有编译器和相关阅读器来支持,用epub3制式来开发一款词典,可用的css元素相当多,之前想用encarta dictionary研究如何转成epub,发现只能作阅读使用,不能用来查询单词,就放弃了。epwing的词头索引适合做日本语的词条索引,当然也适用于印欧语的词性变化词典的索引,但不支持css。macos词典自从2011年以来,苹果就没对其格式进行大的修改,可能js方面兼容性有问题,css应该没问题,用三指查询macos词典可是会上瘾的(即点生词即弹出解释界面,非常方便)。
    / d+ I: T! d0 Y8 v所以我的思路是,dsl,mdx等格式,先转成stardict,由于stardict开源,工具多,转换成mobi的源码可能会自带词性变形。
    * r& c% F7 w3 |7 h还有mdx内嵌style标签,需要每个词头content都要包含,你是想让mobi每个词条都实现某些css效果吧,mobi7不是可以内嵌css吗?为什么还要内嵌style标签?当然,我没有转过mobi词典,只是提出疑问,没有打击楼主制作mobi词典的热情。
  • TA的每日心情
    开心
    2023-9-27 20:45
  • 签到天数: 847 天

    [LV.10]以坛为家III

     楼主| 发表于 2019-10-13 09:11:32 | 显示全部楼层
    本帖最后由 nullname 于 2019-10-13 09:12 编辑
    1 E* V; _1 K* [& x
    流星冲击 发表于 2019-10-13 01:24
    : w, Q! m" S8 F( R4 ^/ Y' i转macos词典和kindle词典最好的源文本格式是stardict格式,而不是mdict(mdx)和lingvo(dsl)格式,stardict可 ...
    4 b& P/ ]2 J0 `! E8 O$ v+ l
    是的,书伴上的教程也是这个原理,即MDX转StarDict再转tab文件再转OPF最后转MOBI。因为tab2opf这个工具比较方便,且tab文件的格式也比较友好(每个词条由词头tab空格意向这三个部分组成),所以只要能转成tab即可,后来我也发现了pyglossary这个工具,但是该工具有个缺点就是转一些词典(尤其是一些汉语辞典)的时候,tab文件中意项部分全部都是数字形式的CSS,可能是该辞典在用MDXBuilder生成的时候添加了style资源。
    6 ~' v) Z3 i. j9 V0 I! I
    % ^: u6 W4 c! A9 Y3 [, c; V+ Kdsl2mobi这个工具可以直接为dsl词典生成带有词性变化的mobi,但是考虑到词典内本身存在的大量@LINK跳转,最好还是解包后进一步处理较好。
    , x4 b4 B; C3 y0 t0 L' e  O0 z( m
    关于内嵌CSS,此篇帖子发出后我又经过试验搜索,最终得出的结论是,可以支持外挂CSS,在每个HTML文件的头部添加LINK即可。层主可以看看这篇:https://www.pdawiki.com/forum/forum.php?mod=viewthread&tid=36130
  • TA的每日心情
    慵懒
    2024-1-31 14:20
  • 签到天数: 121 天

    [LV.7]常住居民III

    发表于 2019-10-22 18:28:39 | 显示全部楼层
    楼主,在下学习心切,也向你恳求相关Python代码,anyway,我已不胜感激。。。
  • TA的每日心情
    开心
    2023-9-27 20:45
  • 签到天数: 847 天

    [LV.10]以坛为家III

     楼主| 发表于 2019-10-22 19:18:37 | 显示全部楼层
    vpda2016 发表于 2019-10-22 18:28' Q$ W8 V+ U$ v7 I9 k" i
    楼主,在下学习心切,也向你恳求相关Python代码,anyway,我已不胜感激。。。 ...
    ! f3 ?, o6 r; n8 \/ j
    代码已经发了,在这个帖子里面% E0 Z) z$ Y& f8 S
    : |% X8 c1 L8 K# q2 A/ ~2 x
    Python辅助MDX转MOBI(以AHD5th为例)
    . e; V0 v+ K! V' e! k8 ]) ihttps://www.pdawiki.com/forum/fo ... hread&tid=361308 H3 P6 M7 j7 Y1 y, h3 n4 b
    (出处: 掌上百科 - PDAWIKI)
    8 ^9 U6 g7 G' h
  • TA的每日心情
    慵懒
    2024-1-31 14:20
  • 签到天数: 121 天

    [LV.7]常住居民III

    发表于 2019-10-22 19:32:25 | 显示全部楼层
    nullname 发表于 2019-10-22 19:189 k. T1 y8 w, Y: H8 N& ~' }! l
    代码已经发了,在这个帖子里面
    5 L3 J+ K* K& x/ t' ?# s' Q4 X+ s2 j* O1 z: [: R
    Python辅助MDX转MOBI(以AHD5th为例)

    ! L3 A. A# S' G3 c" H. L* g" x* O正在看,谢谢亲。大神。
    您需要登录后才可以回帖 登录 | 免费注册

    本版积分规则

    小黑屋|手机版|Archiver|PDAWIKI |网站地图

    GMT+8, 2024-4-19 17:14 , Processed in 0.138933 second(s), 10 queries , MemCache On.

    Powered by Discuz! X3.4

    Copyright © 2001-2023, Tencent Cloud.

    快速回复 返回顶部 返回列表