掌上百科 - PDAWIKI

 找回密码
 免费注册

QQ登录

只需一步,快速开始

查看: 6737|回复: 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 编辑 & B% ^$ D3 ]- m- G

    % u3 q0 k8 e  S( X. t' h# {6 X003 a$ }$ z2 Z* o
    相较于MDX词典的百花齐放、门类齐全(从学习型再到母语型再到俗语习语俚语等,不一而足。) Kindle用的MOBI词典就显得冷落多了,有意义的词典非常有限,也许是因为Kindle的使用人数很少吧.... 基本就是官方的英英、英汉和 skywind3000 大神的这本 简明英汉必应版 了。0 d/ k/ w% j1 }9 U/ I0 h
    其他的像书伴上的那些都很难用,主要问题就在于不具备 词形变化 的查询能力。比如书中出现了 looked, raised 这种单词,它们基本都不能直接查询到 look, raise。; m, w/ O, A! [3 h9 M5 ]4 T) l

    ( f/ q  m* {5 n" _6 J6 }; j% q* J; p之前在知乎上看见孙缓之的一篇帖子(见此 Kindle OALD9 民间发布(仅限交流使用)),可以用 dsl2mobi 这个工具来将 dsl 词典转化为 mobi,且具备词形变化的查询能力。但貌似 dsl 词典不是太好找。. U1 s4 H4 X0 t5 Z' l; s$ |

    3 V5 c/ ]" q6 G5 `; g5 k# h1 G因此,想试试能否将 MDX 转为 MOBI。教程不多,仅在书伴上找到了这几篇文章。(请见 《如何把 MDX 格式词典转换成 Kindle 字典》《自制 Kindle 字典简明教程(入门篇)》《自制 Kindle 字典简明教程(进阶篇)》, d4 V* z- X8 n4 N! t3 w
    - A) P8 I0 }- s) b' ~
    根据  《如何把 MDX 格式词典转换成 Kindle 字典》 这篇教程,转化出来的词典不具备查询 词形变化 的单词的能力。主要原因在于没有添加变化后的单词,如图红色矩形区域(更详细的请见 《自制 Kindle 字典简明教程(进阶篇)》)。% ]1 d" g7 q1 ~+ n1 {1 l

      y, N* I) ?: B  h5 q3 b, {1 G' b4 q( k以 COED11 举例,这是转换后的 HTML 中的词头部分:
    6 K, \. c8 D% J" w' V
    2 T( `  |5 ^9 h9 ?7 }. E" T若要具备 词形变化 能力,需要的区块(红色矩形部分):( C& G9 [" m  W; G  H9 p& s$ v. h

    $ P* d5 d* @  ?- V
    # U5 p6 A! S0 J5 d* R. W3 F6 E; T, k. i+ b1 O: m  y$ e
    我抓破脑袋都想不出怎么样才能自动添加这些进去,后来想起 dsl2mobi 有这个功能,就下载下来研究了一下。该工具是 ruby 写的,基本看不大懂,不过我在其目录下发现了包含十几万英文单词词形变化的 TXT:: x) M& O( l) j

    1 o9 a) @% O3 F) t9 J
    ( b8 U1 I' M8 a$ H! M8 C" C/ I4 e0 ]  c1 h+ i% q1 W! ~) T$ p
    排列比较有规律,格式为  单词原型:变化1,变化2,变化3......  因此用 python 写了正则批量查询添加:# [0 o5 {* g2 [& \6 ~* A! @: p
    " J; X, X% m( B( m+ E0 u1 F

    2 h9 ~+ j/ S7 @+ A4 V
    0 D( g9 R% M" M5 u# ]! A# Z跑完之后:
    # |5 m! O. S# A6 u
    # @  q- n7 F! a, y, a) z7 q# ?! ~

    # j& P- T8 x" m2 q) Z6 r) _% V7 B9 m* S
    基本原理大概就是从词典中取出主词条单词后再在 forms-EN.txt 中查询匹配,若成功则返回所有的变化形式并添加区块代码。然后重新生成 mobi 。, v$ j6 l/ n. f1 X7 J+ N

    ! F% j5 ?6 {8 K8 C0 p8 \兴冲冲的试了试,5 A* x! L( o8 _4 x2 A

    * H8 j+ d' d6 E: w                          两个看起来都没什么问题,和我们想想中一样。( |, v2 m; r6 g+ Y; `9 ]' S6 G

    : Z' x9 W, u  l6 `/ ~再试试,7 M- M  M  p9 m5 W7 d' p- ~: H5 C
    1 T! H4 p2 R; w8 A
         查询dealt的时候,按设想,应该是查询deal才对,结果并不是。* y& f' v4 k1 w# v. r
    / s: V+ e( D, ~7 }
    用官方的词典试试
    6 X; O5 \5 L5 ]7 G- |  O4 Q- P; }2 \, V8 ?" F/ L/ u) T0 g
    同样如此。- C& C5 _# }$ P  s: s  z

    3 [  u( G3 m8 x$ X1 j' \- D. w" w" L- X2 l1 B3 f3 F

    ; R6 v) @4 P5 y! u: r01
    " H! Y/ {. J% c" N5 i; ]! N) c" {, ]. b- q
    后来经过反复试验,发现了 Kindle 的查词逻辑:选中单词后,查询主词条是否匹配成功,成功则返回对应的条目,同时不再继续查询变形词条。没有主词条的话则查询词形变化区块是否有匹配,若有则返回变化词条的原型主词条。2 ?6 I$ s3 {7 [( l$ \; x" u
    ( L9 y& i4 ]1 n7 O
    deal 的词条部分已经添加了 dealt 作为变形词条,然而我手中的这版 COED11.mdx 和官方的Oxford Dictionary of English 都有了 dealt 这个主词条,词条内容如上图。因此不会返回 deal 词条的内容。- q  M, w. y: u3 ~+ E

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

    - E9 u) {, c! k
    % Q7 i1 H5 _' u3 v6 c
    02" y  w% V) e$ V. M3 o* n
    即使如此,还是有许多优秀的 MDX 词典值得页应该被转化为 mobi 以供大家使用的。个人认为kindle上不适合使用学习型词典这类词义较少的词典。比如你在看书的时候看到了square这个单词,假如你用牛津高阶,你翻到底都翻不到“步兵方阵”这个释义,最后陷入深深的自我怀疑...然后又去提问“为什么我每个单词的意思都看得懂但是就是读不懂句子的意思...”。& X- _/ G1 G! V$ M# Y5 H

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

    6 |1 d: }  J/ k: N8 u; |+ B写的比较乱,抱歉。也欢迎大家交流讨论和指点。
    3 E* U2 j( a0 [

    1 \4 r, N8 _# y! v* ?+ o' k
    * ?2 v7 D1 F$ d
    最后附上制作完成的COED11th.mobi
    6 i: S4 }6 Q# j& O3 u8 T: F1 @% U" c; u) L
    ; m/ Y' [) B: V$ z
    链接: https://pan.baidu.com/s/1TyMK4P1A6ltCEDr2Bt_rNg 提取码: zp3b 8 Q: \7 _. Y4 x3 Z# R8 T% ~1 Z
    ; E& u$ Q9 S2 J' L* U, |% h
    ----------------------2019.10.12补链----------------------- O& J& h$ {% D5 z6 ~
    链接: https://pan.baidu.com/s/1bSRfcScur482utaLmsxOgg 提取码: 4b5h
    4 G7 c- a, w; ~# z6 o6 l7 z

    5 v3 s. U" j% Z# Y5 b6 V
    ; ?' l) l" Y' K* z

    - {8 D( m% [4 M! e  w& R
    0 U9 Z9 k5 f# x) `+ t

    ) [- Q5 q1 h6 n/ U; E- J  w
    4 @6 S& N  \' n* m2 c6 A

    ( K2 l2 f) m( Z) L/ L
    " V9 s4 I4 Y: v( f+ D9 X# Y" q' c

    ) m2 c) B& l: l& |
    " Q7 {" A6 _) S/ l1 h: y; @
    2 T2 H- ~: y9 o0 F
      b3 z  f! q) ]- j$ K6 ~

    本帖子中包含更多资源

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

    x

    评分

    3

    查看全部评分

    本帖被以下淘专辑推荐:

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

    [LV.7]常住居民III

    发表于 2019-9-16 18:36:15 | 显示全部楼层
    按浏览器加载css文件的逻辑(不包括css外挂,css外挂是MDict和Eudic默认允许的非通行标准做法,国际软件一般还未支持)的三种:' h& p7 ]/ `' U
    1. html tag 上的style, inline,如 <div style="font-size:14px">
    ; }# W- A* K; u. g0 _2. <style>div {font-size:14px;}</style>
    $ e8 X* F% F' V, |1 d4 d& f, _; `7 l3. <link href="styles.css">; }( c& g2 z$ O6 [

    ' [& J9 p+ U3 D1 \2 R* W第三种,根据mdict的设计逻辑,可以放到mdd文件中;前两种,直接在mdx文件中。
    8 b; _# K" Q  C
  • 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$ A4 G/ R0 q9 J5 b
    按浏览器加载css文件的逻辑(不包括css外挂,css外挂是MDict和Eudic默认允许的非通行标准做法,国际软件一 ...

    $ E4 r* ~. @1 q2 ?5 [学习了,不过我想的是是否有什么方法能将现成的外挂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
    ( L$ g8 c; _$ d, e9 `看了下这个源码跟mac词典源码有点像

    9 P- W; o4 R4 H可惜只是像...若是一样的那大神就很多了..
  • 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
    + a4 R& E" |* x+ B学习了,不过我想的是是否有什么方法能将现成的外挂css中的样式还原进mdx中呢?因为mdx差不多本身就是多 ...
    % ?2 W/ ~+ X, h! _# G
    1. 解包mdd,加入css再打包,同时修改mdx里面得css引用* {* I8 D- d- h& B: \4 s0 e
    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:463 ], B( j8 p$ s. D, L5 F
    1. 解包mdd,加入css再打包,同时修改mdx里面得css引用
    ! y% A. [  Y3 q4 c( @3 y  H0 N7 n2. 在mdx中按照前述方法2进行加style (但你似乎 ...
    * I1 T* M; z4 E! L/ P
    我再试了下,这次删掉了一些比较高级的样式,有效果,一些颜色斜体之类的能显示,这样看来,应该是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
    8 M/ ^1 z6 X3 t5 n* c' |3 h楼主,很巧,我这两天也是在忙着转一部词根词缀的词典为mobi,按照书伴的方法做出来了,只是不支持模糊搜索 ...
    5 ]+ L: p# `$ u& Z: P8 T
    好,支持,感谢
  • 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:248 x8 j1 N- z! _8 c* y" w- W
    不好意思打扰了,楼主,链接挂了... :-P

    7 ?( r8 }1 t' x. i. F: m  q分享链接已补
  • TA的每日心情

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

    [LV.2]偶尔看看I

    发表于 2019-10-12 23:05:58 | 显示全部楼层
    nullname 发表于 2019-10-12 08:481 z" y: u; J. g, _4 I
    分享链接已补
    % p# C# h7 r  B3 k, J
    好的,已收到,正尝试使用
  • TA的每日心情
    开心
    2019-3-26 21:36
  • 签到天数: 178 天

    [LV.7]常住居民III

    发表于 2019-10-13 01:24:40 | 显示全部楼层
    本帖最后由 流星冲击 于 2019-10-13 01:28 编辑
    " s* }3 K) L+ j  A. x* i; f8 j. \
    转macos词典和kindle词典最好的源文本格式是stardict格式,而不是mdict(mdx)和lingvo(dsl)格式,stardict可以通过词头添加|来实现查询词条变形,例如walk|walks|walked|walking(mdict需要用@@@link来实现),用pyglossry转成macos词典源码就自动转成相应的词性变化的词条索引,查walked会自动跳转到walk。
    0 Z4 x" U3 F. s7 w% Fepub dict文档的格式、kindle词典、macos词典、epwing词典的源码在处理词性变化索引都是一致的,源码也类似。kindle词典还停留在xhtml时代,不支持音视频,支持css元素少,不开源,可能受限于机器性能,所以一直没有kindle fire8制式(类似epub3)的开发文档。
    / x2 F: n5 a8 z  y* Q5 P" Xepub dict有开发文档了,但没有编译器和相关阅读器来支持,用epub3制式来开发一款词典,可用的css元素相当多,之前想用encarta dictionary研究如何转成epub,发现只能作阅读使用,不能用来查询单词,就放弃了。epwing的词头索引适合做日本语的词条索引,当然也适用于印欧语的词性变化词典的索引,但不支持css。macos词典自从2011年以来,苹果就没对其格式进行大的修改,可能js方面兼容性有问题,css应该没问题,用三指查询macos词典可是会上瘾的(即点生词即弹出解释界面,非常方便)。1 V  N4 p9 ?6 b0 v9 [
    所以我的思路是,dsl,mdx等格式,先转成stardict,由于stardict开源,工具多,转换成mobi的源码可能会自带词性变形。! }  D, G) {" T$ M" E5 ~
    还有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 编辑 0 f8 m) y' L+ k. r, ^; r
    流星冲击 发表于 2019-10-13 01:247 |' h) U5 p# W7 ^/ [. B8 |0 |
    转macos词典和kindle词典最好的源文本格式是stardict格式,而不是mdict(mdx)和lingvo(dsl)格式,stardict可 ...
    , ]( S; @  r! ~+ h- y( @+ \0 N- `: _
    是的,书伴上的教程也是这个原理,即MDX转StarDict再转tab文件再转OPF最后转MOBI。因为tab2opf这个工具比较方便,且tab文件的格式也比较友好(每个词条由词头tab空格意向这三个部分组成),所以只要能转成tab即可,后来我也发现了pyglossary这个工具,但是该工具有个缺点就是转一些词典(尤其是一些汉语辞典)的时候,tab文件中意项部分全部都是数字形式的CSS,可能是该辞典在用MDXBuilder生成的时候添加了style资源。& v* V" Z1 R! P. G  w
    6 S& a/ z; h% D6 ~5 _+ @9 @' a1 _% U! b
    dsl2mobi这个工具可以直接为dsl词典生成带有词性变化的mobi,但是考虑到词典内本身存在的大量@LINK跳转,最好还是解包后进一步处理较好。" w' W0 F5 u9 F5 X7 j" E

    $ n7 V/ x4 [6 D; @. p5 {1 v关于内嵌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# D4 |6 n0 Z; G& d7 P( c8 a$ N& Q
    楼主,在下学习心切,也向你恳求相关Python代码,anyway,我已不胜感激。。。 ...

    4 t3 y6 k7 X! u$ F代码已经发了,在这个帖子里面7 J# V9 G, P' {: c
    , U  @0 o, `* L6 X3 d. F
    Python辅助MDX转MOBI(以AHD5th为例)
    & g. }" t' v% J. [+ J1 `1 yhttps://www.pdawiki.com/forum/fo ... hread&tid=36130
    " f: `0 p$ j# \" K(出处: 掌上百科 - PDAWIKI)3 F7 p( i) M, J( K: {1 P5 g& C+ J
  • TA的每日心情
    慵懒
    2024-1-31 14:20
  • 签到天数: 121 天

    [LV.7]常住居民III

    发表于 2019-10-22 19:32:25 | 显示全部楼层
    nullname 发表于 2019-10-22 19:18$ k: S; W3 v  @) m" B
    代码已经发了,在这个帖子里面- d& g) \3 r! A( n, j0 K$ m

    / L9 f4 X( [2 Z8 K; yPython辅助MDX转MOBI(以AHD5th为例)
    5 y$ K# @- ^/ g+ i- P% S
    正在看,谢谢亲。大神。
    您需要登录后才可以回帖 登录 | 免费注册

    本版积分规则

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

    GMT+8, 2024-3-29 16:14 , Processed in 0.050793 second(s), 10 queries , MemCache On.

    Powered by Discuz! X3.4

    Copyright © 2001-2023, Tencent Cloud.

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