掌上百科 - PDAWIKI

 找回密码
 免费注册

QQ登录

只需一步,快速开始

查看: 6902|回复: 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 编辑 ; g7 d) ~8 n& t, n' S$ B

    # D5 ~) x1 E1 W2 F6 P' M/ U00
    + G* o2 `$ g* d& w; C7 p, S" }' E相较于MDX词典的百花齐放、门类齐全(从学习型再到母语型再到俗语习语俚语等,不一而足。) Kindle用的MOBI词典就显得冷落多了,有意义的词典非常有限,也许是因为Kindle的使用人数很少吧.... 基本就是官方的英英、英汉和 skywind3000 大神的这本 简明英汉必应版 了。5 r* o, ~  _$ o
    其他的像书伴上的那些都很难用,主要问题就在于不具备 词形变化 的查询能力。比如书中出现了 looked, raised 这种单词,它们基本都不能直接查询到 look, raise。
    % _6 ?" O* n  X+ H/ H0 |$ r) [& H# A4 Y4 ]: U, z  b
    之前在知乎上看见孙缓之的一篇帖子(见此 Kindle OALD9 民间发布(仅限交流使用)),可以用 dsl2mobi 这个工具来将 dsl 词典转化为 mobi,且具备词形变化的查询能力。但貌似 dsl 词典不是太好找。
    5 F3 x2 z' k% t8 ~9 m( [! K( f
    8 H2 G4 Y* H/ s* V, X( D- ~因此,想试试能否将 MDX 转为 MOBI。教程不多,仅在书伴上找到了这几篇文章。(请见 《如何把 MDX 格式词典转换成 Kindle 字典》《自制 Kindle 字典简明教程(入门篇)》《自制 Kindle 字典简明教程(进阶篇)》+ U" q% h* O2 t
    ; _3 Z# i( w! h5 d; x$ Z
    根据  《如何把 MDX 格式词典转换成 Kindle 字典》 这篇教程,转化出来的词典不具备查询 词形变化 的单词的能力。主要原因在于没有添加变化后的单词,如图红色矩形区域(更详细的请见 《自制 Kindle 字典简明教程(进阶篇)》)。
    + v- f( |) D% z  c
    0 O# }5 f4 l$ O- A% H7 `
    以 COED11 举例,这是转换后的 HTML 中的词头部分:
    3 B8 E+ ~& }! L. |- F* w* h6 u( C5 v1 F. b1 w/ c
    若要具备 词形变化 能力,需要的区块(红色矩形部分):
    8 Z3 f+ f  g# b" o9 x

    1 a+ ]2 y+ R" C; B5 h* ?3 }4 s! y! j. D& u8 I
    ' c- b! @; ]! Q: b
    我抓破脑袋都想不出怎么样才能自动添加这些进去,后来想起 dsl2mobi 有这个功能,就下载下来研究了一下。该工具是 ruby 写的,基本看不大懂,不过我在其目录下发现了包含十几万英文单词词形变化的 TXT:9 e* H2 Z. D4 u$ H0 h

    7 \! M2 A9 T4 l$ F  J4 q9 E5 P5 {: \
    ) z! E& q) X6 b: b
    排列比较有规律,格式为  单词原型:变化1,变化2,变化3......  因此用 python 写了正则批量查询添加:
      @" L5 a* i; X  A. P! X
    , v5 z- A5 T6 N3 C
    ' h7 q: h2 j! x
    / ]' E9 ?8 L. u* \4 ~. d7 _  L- h2 S
    跑完之后:: y/ M! Z4 n& `& ^

      a3 n  j! b, G. n, [2 L# o; c6 v' U1 J3 h; E( D/ u

    ( Z3 a( @+ P! n1 q. c+ ]0 G/ H5 z0 u6 S基本原理大概就是从词典中取出主词条单词后再在 forms-EN.txt 中查询匹配,若成功则返回所有的变化形式并添加区块代码。然后重新生成 mobi 。
    2 I- J& l' S! ?% g3 z9 E* b" H/ w% y
    兴冲冲的试了试,
    8 d1 w! D' d8 G; z8 U5 D, m+ x3 U

    ( j' Y) l% t: X) k* k# l( R1 ^                          两个看起来都没什么问题,和我们想想中一样。8 c8 r6 p6 O' ]  f$ I/ P5 \5 r  m
    4 d' ]5 L9 R- D8 [3 G6 }7 _5 d, \
    再试试,
    8 D: d" D6 A! Q) z2 ?2 d% R1 c6 ~

    # C. Q. `+ J4 N7 |5 q     查询dealt的时候,按设想,应该是查询deal才对,结果并不是。
    5 P$ _( l, k0 L+ z8 F
    ; q, L) Q9 y8 x' s1 i用官方的词典试试$ E6 Y4 v7 T5 q: d: m% n& F# A  Z

    $ N" U' p/ D( t; r同样如此。6 A; B) P% Q4 U  q! Y  h
      X1 k$ [6 y+ Z% \' G( A6 E
    : F. }5 _. ^% [4 |9 ^' {* ?) d

    ; n/ P& v* b. L3 C& X) D1 i+ @) |01
    ' s- q  V' y4 A3 D- p& m% P7 @) s( ]9 Y
    后来经过反复试验,发现了 Kindle 的查词逻辑:选中单词后,查询主词条是否匹配成功,成功则返回对应的条目,同时不再继续查询变形词条。没有主词条的话则查询词形变化区块是否有匹配,若有则返回变化词条的原型主词条。
    # W7 c5 C! k) b" W
    4 I1 |. \% n' b/ t2 N9 L" p. ]deal 的词条部分已经添加了 dealt 作为变形词条,然而我手中的这版 COED11.mdx 和官方的Oxford Dictionary of English 都有了 dealt 这个主词条,词条内容如上图。因此不会返回 deal 词条的内容。, X. u9 [% t1 n# L9 K
    - M8 C4 `7 {: @) b  m
    知道问题所在后,如何解决呢?想了想,很难,因为英语词义太丰富(Rich)了。比如flame,它的词形变化理应有flaming对吧。但是flaming本身可能自成一义(火爆的,讨厌的,该死的),如果查询flaming的时候跳转到了flame,从flame很难猜到flaming的一些专有词义。除非亚马逊更新固件,修改上述的查词逻辑,即不论查不查的到主词条,变形词条所在的原型主词条一并显示。不过目前看来希望渺茫。
    0 j9 U+ R4 b) q. u' X: a; a% T% K

    - }5 s7 d' q: E; _+ V+ C7 t
    ' j9 S& O) P( Z6 r* O, Z9 V9 j
    02  ^3 j9 C* c2 B
    即使如此,还是有许多优秀的 MDX 词典值得页应该被转化为 mobi 以供大家使用的。个人认为kindle上不适合使用学习型词典这类词义较少的词典。比如你在看书的时候看到了square这个单词,假如你用牛津高阶,你翻到底都翻不到“步兵方阵”这个释义,最后陷入深深的自我怀疑...然后又去提问“为什么我每个单词的意思都看得懂但是就是读不懂句子的意思...”。) q; F! ]' e! @3 H" j1 ]. G) Q
    6 I/ c6 c' \" @$ d# A+ @
    经过一段时间的试验,我发现 The World Book Dictionary 和 Microsoft Encarta Dictionary 这两本词典非常适合“高阶有余,母语不足”的英语水平者的使用,但把它们转成mobi难度略大......由于水墨屏的特性,kindle 上词典个人以为只需要1.粗体 2. 斜体 3.浅色 这几种样式即可,不要图片、音频。同时要求css内置在mdx中,不能外挂。在此也向各位请教如何将外挂的css内置进mdx中的方法,我尝试了在html中添加style标签然后将css全部复制进去,但似乎并没有效果?各位如果有较好的适合在kindle上使用的词典也可以发出来大家尝试转换。) a' T" a. B7 u) a
    # j; U( r, I8 [9 h9 c
    写的比较乱,抱歉。也欢迎大家交流讨论和指点。
    , h; \5 {5 [( L9 l
    9 c7 m4 M$ P  G2 q" i. ^7 V

      z9 p5 X% c; W7 H7 P/ M  g最后附上制作完成的COED11th.mobi; F3 S7 \5 r5 ^: X7 t: d; B$ `

    / ]% V4 n  ?) K# R5 b

    % u8 d' i- _6 f. O0 J链接: https://pan.baidu.com/s/1TyMK4P1A6ltCEDr2Bt_rNg 提取码: zp3b
    ' `7 I5 O9 F: E# s* A! O" Q; E
    ( v. T+ \6 [7 k  M5 i" g1 T
    ----------------------2019.10.12补链----------------------
    3 j1 E3 ^% S) K3 [5 g( {0 J5 E; J链接: https://pan.baidu.com/s/1bSRfcScur482utaLmsxOgg 提取码: 4b5h8 x' j4 K1 b! F0 \( x
    7 l* H  i! v6 f% N$ b* Y5 e# @
    ; i, M# _* d* A1 ~  r, n3 Q
    4 G0 J1 u) c) m* c- D% x; \4 O
    ! ]" J' E* k/ `* A# i" v4 t$ @  n* a. |- [

    ) h+ W; l" q5 ~$ ]' T$ e0 `/ x3 H/ r. E- ~) E

    % R  d0 }3 n% ]5 k( o8 n& O  I, C, V& r! K/ i
      N+ H: w' u4 r% c; z9 ^
    / V6 Q! m. I. a, X" I6 [' ^( T

    - C2 L- X& O0 y# C
    * N4 {" [# a9 X. _7 T* r* I

    本帖子中包含更多资源

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

    x

    评分

    3

    查看全部评分

    本帖被以下淘专辑推荐:

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

    [LV.7]常住居民III

    发表于 2019-9-16 18:36:15 | 显示全部楼层
    按浏览器加载css文件的逻辑(不包括css外挂,css外挂是MDict和Eudic默认允许的非通行标准做法,国际软件一般还未支持)的三种:6 |" A$ _: H. `. }7 Y" Y
    1. html tag 上的style, inline,如 <div style="font-size:14px">. G% G7 y3 i" Z- b) q/ H
    2. <style>div {font-size:14px;}</style>
    7 u$ T/ ~2 K% G  d9 o3. <link href="styles.css">: Y5 m; c0 Y1 x- F& y0 L

    5 F* H. n9 n5 G3 \; p第三种,根据mdict的设计逻辑,可以放到mdd文件中;前两种,直接在mdx文件中。
    8 r! Q* `/ W" U
  • 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
    ; R3 f* G7 w* Y9 r' T7 v, H按浏览器加载css文件的逻辑(不包括css外挂,css外挂是MDict和Eudic默认允许的非通行标准做法,国际软件一 ...
    ( l3 `2 A0 g# f( G8 P' M* |  K  W
    学习了,不过我想的是是否有什么方法能将现成的外挂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
    5 J6 d9 J5 Z0 M1 F) T: W. \# `看了下这个源码跟mac词典源码有点像
    . |/ I2 t1 m: f' @( h+ L
    可惜只是像...若是一样的那大神就很多了..
  • 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:394 r2 j; z& n* }% @
    学习了,不过我想的是是否有什么方法能将现成的外挂css中的样式还原进mdx中呢?因为mdx差不多本身就是多 ...
    + y9 A3 c' w- l& D
    1. 解包mdd,加入css再打包,同时修改mdx里面得css引用
    3 f6 w% ^" u/ R+ R$ @  W2 L% H# h2. 在mdx中按照前述方法2进行加style (但你似乎说了不行,不知道你为什么不行,可能有局部出错了)
  • TA的每日心情
    开心
    2023-9-27 20:45
  • 签到天数: 847 天

    [LV.10]以坛为家III

     楼主| 发表于 2019-9-17 08:29:36 | 显示全部楼层
    johannhuang 发表于 2019-9-16 21:464 Z- Z: f( l, Y" `1 G  k5 ]
    1. 解包mdd,加入css再打包,同时修改mdx里面得css引用
    1 ?, w0 u8 L) x" E2. 在mdx中按照前述方法2进行加style (但你似乎 ...

      p  }! ]" H; w4 V/ n; G" _我再试了下,这次删掉了一些比较高级的样式,有效果,一些颜色斜体之类的能显示,这样看来,应该是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
    9 Y# D! |+ E+ h  O3 d( ]4 F- t6 d楼主,很巧,我这两天也是在忙着转一部词根词缀的词典为mobi,按照书伴的方法做出来了,只是不支持模糊搜索 ...

    8 `9 Q) H, Y2 `好,支持,感谢
  • 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:24
    2 X' Z! h# J# S8 u5 s9 O不好意思打扰了,楼主,链接挂了... :-P
    0 w5 }) f0 ?$ |  A- I" B9 e
    分享链接已补
  • TA的每日心情

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

    [LV.2]偶尔看看I

    发表于 2019-10-12 23:05:58 | 显示全部楼层
    nullname 发表于 2019-10-12 08:487 }* ?7 i/ i3 M+ V/ B% w2 K0 P4 a, E8 c
    分享链接已补

    ! ?# q" i) F, r2 i5 q9 l好的,已收到,正尝试使用
  • TA的每日心情
    开心
    2019-3-26 21:36
  • 签到天数: 178 天

    [LV.7]常住居民III

    发表于 2019-10-13 01:24:40 | 显示全部楼层
    本帖最后由 流星冲击 于 2019-10-13 01:28 编辑
    ( H( z$ c; s- P6 l7 V
    6 @; i' S! s+ b& C- x7 w7 N转macos词典和kindle词典最好的源文本格式是stardict格式,而不是mdict(mdx)和lingvo(dsl)格式,stardict可以通过词头添加|来实现查询词条变形,例如walk|walks|walked|walking(mdict需要用@@@link来实现),用pyglossry转成macos词典源码就自动转成相应的词性变化的词条索引,查walked会自动跳转到walk。% O9 M. N5 ?! u
    epub dict文档的格式、kindle词典、macos词典、epwing词典的源码在处理词性变化索引都是一致的,源码也类似。kindle词典还停留在xhtml时代,不支持音视频,支持css元素少,不开源,可能受限于机器性能,所以一直没有kindle fire8制式(类似epub3)的开发文档。
    ! C* v! A8 V! V* I8 H) h% f+ sepub dict有开发文档了,但没有编译器和相关阅读器来支持,用epub3制式来开发一款词典,可用的css元素相当多,之前想用encarta dictionary研究如何转成epub,发现只能作阅读使用,不能用来查询单词,就放弃了。epwing的词头索引适合做日本语的词条索引,当然也适用于印欧语的词性变化词典的索引,但不支持css。macos词典自从2011年以来,苹果就没对其格式进行大的修改,可能js方面兼容性有问题,css应该没问题,用三指查询macos词典可是会上瘾的(即点生词即弹出解释界面,非常方便)。
    " Z8 a$ A) I+ b3 o* K所以我的思路是,dsl,mdx等格式,先转成stardict,由于stardict开源,工具多,转换成mobi的源码可能会自带词性变形。! b$ I: q+ Z) e7 y: N
    还有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 编辑 * H$ c1 ]0 ^( \5 d
    流星冲击 发表于 2019-10-13 01:24; Z% {" j8 w! a! T  A5 ~; G+ |& ?) ^
    转macos词典和kindle词典最好的源文本格式是stardict格式,而不是mdict(mdx)和lingvo(dsl)格式,stardict可 ...
    3 G' Q; Q1 z2 N" Q- }
    是的,书伴上的教程也是这个原理,即MDX转StarDict再转tab文件再转OPF最后转MOBI。因为tab2opf这个工具比较方便,且tab文件的格式也比较友好(每个词条由词头tab空格意向这三个部分组成),所以只要能转成tab即可,后来我也发现了pyglossary这个工具,但是该工具有个缺点就是转一些词典(尤其是一些汉语辞典)的时候,tab文件中意项部分全部都是数字形式的CSS,可能是该辞典在用MDXBuilder生成的时候添加了style资源。; m6 M! F* T0 x- `' S1 i1 r4 ^
    5 Y* P' l1 ]; g" n# d
    dsl2mobi这个工具可以直接为dsl词典生成带有词性变化的mobi,但是考虑到词典内本身存在的大量@LINK跳转,最好还是解包后进一步处理较好。
    3 q' ]0 R8 J' x
    7 l% ^& b8 i! g; q) ~关于内嵌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% x& e( P8 B3 s2 x. ]5 B; B7 d# y; {  w
    楼主,在下学习心切,也向你恳求相关Python代码,anyway,我已不胜感激。。。 ...
    , V7 l- d- G! t7 D! t# d
    代码已经发了,在这个帖子里面
    . C5 V& b9 a$ n& P$ N* {3 f2 i5 s3 R! B/ D# @
    Python辅助MDX转MOBI(以AHD5th为例)% ?6 C0 u  A0 z& \6 Y7 [& b
    https://www.pdawiki.com/forum/fo ... hread&tid=36130: i5 X) ]  b* l; E3 l
    (出处: 掌上百科 - PDAWIKI)# q$ P9 U  ?2 P! h2 F
  • TA的每日心情
    慵懒
    2024-1-31 14:20
  • 签到天数: 121 天

    [LV.7]常住居民III

    发表于 2019-10-22 19:32:25 | 显示全部楼层
    nullname 发表于 2019-10-22 19:18/ E6 d8 G1 e; \
    代码已经发了,在这个帖子里面
    . B$ O, N( ~4 t
    7 u2 B" I- s. ]0 O* h" ?$ @7 hPython辅助MDX转MOBI(以AHD5th为例)

    : w; y6 V7 {9 r# F* C# Y3 @, C正在看,谢谢亲。大神。
    您需要登录后才可以回帖 登录 | 免费注册

    本版积分规则

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

    GMT+8, 2024-4-18 20:47 , Processed in 0.065319 second(s), 10 queries , MemCache On.

    Powered by Discuz! X3.4

    Copyright © 2001-2023, Tencent Cloud.

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