掌上百科 - PDAWIKI

 找回密码
 免费注册

QQ登录

只需一步,快速开始

查看: 6945|回复: 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 编辑 + P' N, z0 I; F! I$ J' f

    * c0 R! m( v. K8 f: u- W4 D00
    1 u6 F4 H4 v+ K( }& V相较于MDX词典的百花齐放、门类齐全(从学习型再到母语型再到俗语习语俚语等,不一而足。) Kindle用的MOBI词典就显得冷落多了,有意义的词典非常有限,也许是因为Kindle的使用人数很少吧.... 基本就是官方的英英、英汉和 skywind3000 大神的这本 简明英汉必应版 了。
    ' \( l- t! x: [* D其他的像书伴上的那些都很难用,主要问题就在于不具备 词形变化 的查询能力。比如书中出现了 looked, raised 这种单词,它们基本都不能直接查询到 look, raise。
    : F. k* y" K' M$ I6 Q8 y. C9 x
    9 [) N. K; V7 k. U3 ^/ D: m之前在知乎上看见孙缓之的一篇帖子(见此 Kindle OALD9 民间发布(仅限交流使用)),可以用 dsl2mobi 这个工具来将 dsl 词典转化为 mobi,且具备词形变化的查询能力。但貌似 dsl 词典不是太好找。2 ^  f" }7 L9 s7 W# t- _; |/ N
    0 Y3 f$ i7 @7 |& ?
    因此,想试试能否将 MDX 转为 MOBI。教程不多,仅在书伴上找到了这几篇文章。(请见 《如何把 MDX 格式词典转换成 Kindle 字典》《自制 Kindle 字典简明教程(入门篇)》《自制 Kindle 字典简明教程(进阶篇)》6 O, M$ H# M6 ?6 v- C
    - l- \3 l$ @/ m8 Z( y
    根据  《如何把 MDX 格式词典转换成 Kindle 字典》 这篇教程,转化出来的词典不具备查询 词形变化 的单词的能力。主要原因在于没有添加变化后的单词,如图红色矩形区域(更详细的请见 《自制 Kindle 字典简明教程(进阶篇)》)。& |8 w, A8 H. A! W
    " o2 i0 R7 b& a* |, D
    以 COED11 举例,这是转换后的 HTML 中的词头部分:" P4 K+ Z  p  k
    " b+ W" q9 g: c( C2 I
    若要具备 词形变化 能力,需要的区块(红色矩形部分):6 d7 Q* q9 i! n: L% d( |

    # u9 ?* e. I2 Y% c  ^: c- g& _: q
    % N, }/ i* T. |; K  B9 W4 h1 m' @6 H1 s( ~9 w7 I
    我抓破脑袋都想不出怎么样才能自动添加这些进去,后来想起 dsl2mobi 有这个功能,就下载下来研究了一下。该工具是 ruby 写的,基本看不大懂,不过我在其目录下发现了包含十几万英文单词词形变化的 TXT:: w4 H6 U! C& ?6 ]  n

    : C) ^0 n2 l7 s7 ?# m
    4 ^% f' y: B, ~, i# Z
    4 v/ d& M7 j% l" c0 s排列比较有规律,格式为  单词原型:变化1,变化2,变化3......  因此用 python 写了正则批量查询添加:; p% B0 N: N& a$ g6 ^& Q5 _
    & _9 ?# f/ w& {

    ( ]( E; Z2 v: d6 S9 x( h" U
    9 c, F( Y' B) B2 d/ R8 |. \跑完之后:# ?6 w0 [$ ~' \+ J. B

    8 l2 R! Z/ ?8 s# v" @) b. E! P; K3 x

    ! R7 N& R( O5 O基本原理大概就是从词典中取出主词条单词后再在 forms-EN.txt 中查询匹配,若成功则返回所有的变化形式并添加区块代码。然后重新生成 mobi 。( [9 `8 S3 H# g0 G" c& n+ W

    4 r9 t0 z( u) V- h8 o兴冲冲的试了试,' Y9 h1 Y/ a; E+ U0 r

    7 r9 [/ R7 T  }$ M* J6 y/ @; r9 V6 S1 e                          两个看起来都没什么问题,和我们想想中一样。
    8 K' d9 ?+ \7 t1 `7 `+ R6 x# r  d/ K( X; u, i  }7 o0 x% P
    再试试,
    2 @4 A( c6 `& P0 \2 G

    7 L8 r; n" ?& N     查询dealt的时候,按设想,应该是查询deal才对,结果并不是。' ?+ k: n* M/ _/ [) l: O' A

    & C& W% Z& H! b' T" u用官方的词典试试- o/ X6 x8 `9 v6 t" U

    ( h: |; Y% d: J同样如此。1 s  b8 Y2 g+ {% V( T0 E

    : z; O) m# o( S* n3 I
    0 |- c. S+ g, j: _; E
    0 C# B6 V2 o! S: H/ \. h" }01. m3 v, B( N& n$ |+ x

    ! I  o- p8 s& t: ^后来经过反复试验,发现了 Kindle 的查词逻辑:选中单词后,查询主词条是否匹配成功,成功则返回对应的条目,同时不再继续查询变形词条。没有主词条的话则查询词形变化区块是否有匹配,若有则返回变化词条的原型主词条。
    % I3 L7 N. M& p# _% a6 r) q0 W3 M/ U+ l
    . u. v6 A2 s  l# E* Pdeal 的词条部分已经添加了 dealt 作为变形词条,然而我手中的这版 COED11.mdx 和官方的Oxford Dictionary of English 都有了 dealt 这个主词条,词条内容如上图。因此不会返回 deal 词条的内容。
    3 t7 q7 G9 K8 i
    8 h* ?* h/ |, k* Q9 ^# i知道问题所在后,如何解决呢?想了想,很难,因为英语词义太丰富(Rich)了。比如flame,它的词形变化理应有flaming对吧。但是flaming本身可能自成一义(火爆的,讨厌的,该死的),如果查询flaming的时候跳转到了flame,从flame很难猜到flaming的一些专有词义。除非亚马逊更新固件,修改上述的查词逻辑,即不论查不查的到主词条,变形词条所在的原型主词条一并显示。不过目前看来希望渺茫。2 t2 o2 L0 z3 q6 u6 r' P
    / d3 \+ B4 _& |

    . S- O' x3 L  [+ f6 i. c6 g028 r2 ?0 n# |8 w& Q8 V$ f
    即使如此,还是有许多优秀的 MDX 词典值得页应该被转化为 mobi 以供大家使用的。个人认为kindle上不适合使用学习型词典这类词义较少的词典。比如你在看书的时候看到了square这个单词,假如你用牛津高阶,你翻到底都翻不到“步兵方阵”这个释义,最后陷入深深的自我怀疑...然后又去提问“为什么我每个单词的意思都看得懂但是就是读不懂句子的意思...”。
    ' R) G( O1 s' H3 h. d& _8 ^, R, z( ^$ `
    经过一段时间的试验,我发现 The World Book Dictionary 和 Microsoft Encarta Dictionary 这两本词典非常适合“高阶有余,母语不足”的英语水平者的使用,但把它们转成mobi难度略大......由于水墨屏的特性,kindle 上词典个人以为只需要1.粗体 2. 斜体 3.浅色 这几种样式即可,不要图片、音频。同时要求css内置在mdx中,不能外挂。在此也向各位请教如何将外挂的css内置进mdx中的方法,我尝试了在html中添加style标签然后将css全部复制进去,但似乎并没有效果?各位如果有较好的适合在kindle上使用的词典也可以发出来大家尝试转换。7 Q! q6 x$ s1 Y( ?/ P! y
    # @( R& o. s) J. `. u  R5 l9 ^
    写的比较乱,抱歉。也欢迎大家交流讨论和指点。
    4 f; C9 X. k" g% u+ e4 t
      r  A% {* }9 T. o+ M. |

    " X( I7 _2 _( u7 M* _9 S  O. m最后附上制作完成的COED11th.mobi
    . R* I& G+ ~- F! y! ^% _- Y2 o# T+ f2 c

    / C' F: t0 w4 N链接: https://pan.baidu.com/s/1TyMK4P1A6ltCEDr2Bt_rNg 提取码: zp3b ( F. h9 f6 ~1 D6 ~9 \8 R1 x1 R& _
    ; V: y' L6 D4 z# o9 R  \6 Z* Q+ ^
    ----------------------2019.10.12补链----------------------  F, L2 T& H% }& h
    链接: https://pan.baidu.com/s/1bSRfcScur482utaLmsxOgg 提取码: 4b5h6 b9 e/ N- k: [- {
    ' b5 d8 @  ~7 z! {( l& R6 p( @
    8 ~8 X1 J, w. a
    / a  V+ f$ j( B. T0 Q

    & i& h) y0 V+ \; l2 w9 X  d4 v
    / p8 U0 _& P# W, t" H

    ! u3 d6 Q2 Y; u. ]+ E4 B

    $ x/ c  A) U, E* |' B
    1 Y$ E* Z, t, D4 R& ]
    # ?& K! s& O1 H6 x+ `) w

    - D! V7 `# J9 M- ?) Q7 `/ V+ d
    4 A; G) a3 B. o, K9 b7 y1 X, o0 C2 F( a* X& u

    本帖子中包含更多资源

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

    x

    评分

    3

    查看全部评分

    本帖被以下淘专辑推荐:

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

    [LV.7]常住居民III

    发表于 2019-9-16 18:36:15 | 显示全部楼层
    按浏览器加载css文件的逻辑(不包括css外挂,css外挂是MDict和Eudic默认允许的非通行标准做法,国际软件一般还未支持)的三种:
    6 v* Q( K- N2 c3 O6 b1 L. h+ k) F1. html tag 上的style, inline,如 <div style="font-size:14px">
    + a6 c. K7 x) m" ^7 m+ g+ ?1 v2. <style>div {font-size:14px;}</style>; p1 l- w$ l' u3 H0 k6 _) e: z1 D* J
    3. <link href="styles.css">
    , X; R" E' I1 l* h  ]* o9 [6 G5 X9 A. J; c" {6 N* n
    第三种,根据mdict的设计逻辑,可以放到mdd文件中;前两种,直接在mdx文件中。$ X5 V8 Y- H, ^
  • 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
    $ g- T& L6 Y# x' ]按浏览器加载css文件的逻辑(不包括css外挂,css外挂是MDict和Eudic默认允许的非通行标准做法,国际软件一 ...

    ! }/ z& @/ z* j; @2 u2 ^学习了,不过我想的是是否有什么方法能将现成的外挂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* C3 p% W$ R% y6 ~
    看了下这个源码跟mac词典源码有点像

    8 f* _4 D4 f+ o2 p. a  I9 w3 j+ d可惜只是像...若是一样的那大神就很多了..
  • 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:39
    . n% K3 i" O6 ^7 [4 _  U3 F学习了,不过我想的是是否有什么方法能将现成的外挂css中的样式还原进mdx中呢?因为mdx差不多本身就是多 ...
    / F7 ?% I- f' y5 K7 N* R
    1. 解包mdd,加入css再打包,同时修改mdx里面得css引用  O. O8 @- b, `& h9 Z3 s% p( r
    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:466 l" L; H; l/ S) L4 S
    1. 解包mdd,加入css再打包,同时修改mdx里面得css引用
    9 l" @0 F$ d2 X; W4 L2. 在mdx中按照前述方法2进行加style (但你似乎 ...
    2 L7 ^4 s+ x+ x7 z8 ]/ Q
    我再试了下,这次删掉了一些比较高级的样式,有效果,一些颜色斜体之类的能显示,这样看来,应该是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:280 @% R) l. }4 T  p
    楼主,很巧,我这两天也是在忙着转一部词根词缀的词典为mobi,按照书伴的方法做出来了,只是不支持模糊搜索 ...

    ! l& h6 \4 p7 R) M8 b4 t1 ^好,支持,感谢
  • 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" Z* k/ V2 V; o0 P  w
    不好意思打扰了,楼主,链接挂了... :-P

    ; @9 h8 O8 B/ E- w; H分享链接已补
  • TA的每日心情

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

    [LV.2]偶尔看看I

    发表于 2019-10-12 23:05:58 | 显示全部楼层
    nullname 发表于 2019-10-12 08:48
    7 Z) A, g: l2 C5 G+ x4 G6 n& P分享链接已补

    , ]- L+ W# A% e( M' A好的,已收到,正尝试使用
  • TA的每日心情
    开心
    2019-3-26 21:36
  • 签到天数: 178 天

    [LV.7]常住居民III

    发表于 2019-10-13 01:24:40 | 显示全部楼层
    本帖最后由 流星冲击 于 2019-10-13 01:28 编辑 . I4 c) z! F7 R4 G9 C

    " r$ `- W7 R6 B. i+ q/ \. ]1 L转macos词典和kindle词典最好的源文本格式是stardict格式,而不是mdict(mdx)和lingvo(dsl)格式,stardict可以通过词头添加|来实现查询词条变形,例如walk|walks|walked|walking(mdict需要用@@@link来实现),用pyglossry转成macos词典源码就自动转成相应的词性变化的词条索引,查walked会自动跳转到walk。* v$ s3 W& l+ H" x5 n& F
    epub dict文档的格式、kindle词典、macos词典、epwing词典的源码在处理词性变化索引都是一致的,源码也类似。kindle词典还停留在xhtml时代,不支持音视频,支持css元素少,不开源,可能受限于机器性能,所以一直没有kindle fire8制式(类似epub3)的开发文档。
    ( y: Z+ b* Z5 f5 Q( [epub dict有开发文档了,但没有编译器和相关阅读器来支持,用epub3制式来开发一款词典,可用的css元素相当多,之前想用encarta dictionary研究如何转成epub,发现只能作阅读使用,不能用来查询单词,就放弃了。epwing的词头索引适合做日本语的词条索引,当然也适用于印欧语的词性变化词典的索引,但不支持css。macos词典自从2011年以来,苹果就没对其格式进行大的修改,可能js方面兼容性有问题,css应该没问题,用三指查询macos词典可是会上瘾的(即点生词即弹出解释界面,非常方便)。  P/ ~4 R, O5 N& R6 N
    所以我的思路是,dsl,mdx等格式,先转成stardict,由于stardict开源,工具多,转换成mobi的源码可能会自带词性变形。+ L( \' c& Y7 `; W
    还有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 编辑 / T; q( J/ j/ f) n  N. `. v
    流星冲击 发表于 2019-10-13 01:24
    4 y: O4 c, w3 Y0 h) s9 f1 T转macos词典和kindle词典最好的源文本格式是stardict格式,而不是mdict(mdx)和lingvo(dsl)格式,stardict可 ...

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

    ! A; T/ E" ~; d% Edsl2mobi这个工具可以直接为dsl词典生成带有词性变化的mobi,但是考虑到词典内本身存在的大量@LINK跳转,最好还是解包后进一步处理较好。: `+ y) h2 B, ~+ Q' l7 w7 t2 g1 D
    5 S" W# H' S) K7 O3 _  r* h: x
    关于内嵌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' B; @/ n( U0 k; X! o
    楼主,在下学习心切,也向你恳求相关Python代码,anyway,我已不胜感激。。。 ...
    ) J' X6 J6 P' Y1 N
    代码已经发了,在这个帖子里面3 E, M) T+ c$ I+ U" t) E: A

    & r  ]% x% |8 c3 A: E/ O# m% h" wPython辅助MDX转MOBI(以AHD5th为例)  h; Y3 _. W" z, A- [  z
    https://www.pdawiki.com/forum/fo ... hread&tid=361307 ^* \+ Y, _9 n# `" z, f
    (出处: 掌上百科 - PDAWIKI)- d2 s  H4 I; Q: C0 j: N0 n
  • TA的每日心情
    慵懒
    2024-1-31 14:20
  • 签到天数: 121 天

    [LV.7]常住居民III

    发表于 2019-10-22 19:32:25 | 显示全部楼层
    nullname 发表于 2019-10-22 19:181 |+ X; ~  \9 W7 J6 q/ R
    代码已经发了,在这个帖子里面
    ; t6 j0 f& `" `: z" e; C& y- Z! |- `5 A9 k+ _8 d! y6 e8 h
    Python辅助MDX转MOBI(以AHD5th为例)
    : P5 R1 ~6 K7 [  z9 m6 ~+ z: G
    正在看,谢谢亲。大神。
    您需要登录后才可以回帖 登录 | 免费注册

    本版积分规则

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

    GMT+8, 2024-4-26 15:43 , Processed in 0.078221 second(s), 10 queries , MemCache On.

    Powered by Discuz! X3.4

    Copyright © 2001-2023, Tencent Cloud.

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