掌上百科 - PDAWIKI

 找回密码
 免费注册
查看: 2639|回复: 21

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

[复制链接]
  • TA的每日心情

    2021-3-31 09:15
  • 签到天数: 520 天

    [LV.9]以坛为家II

    发表于 2019-9-16 17:58:18 | 显示全部楼层 |阅读模式
    本帖最后由 nullname 于 2019-10-12 08:47 编辑
    ' j& i* s1 J5 c
    4 }( H+ ~! K0 T% i00& }8 Z. M+ f) Z' w4 U! y& h/ L# C* A
    相较于MDX词典的百花齐放、门类齐全(从学习型再到母语型再到俗语习语俚语等,不一而足。) Kindle用的MOBI词典就显得冷落多了,有意义的词典非常有限,也许是因为Kindle的使用人数很少吧.... 基本就是官方的英英、英汉和 skywind3000 大神的这本 简明英汉必应版 了。5 j5 S, g4 Y6 |  I% A
    其他的像书伴上的那些都很难用,主要问题就在于不具备 词形变化 的查询能力。比如书中出现了 looked, raised 这种单词,它们基本都不能直接查询到 look, raise。
    : h- y3 O% a, B" x1 p# {: N3 i' X9 @' A3 g" @/ ?+ n
    之前在知乎上看见孙缓之的一篇帖子(见此 Kindle OALD9 民间发布(仅限交流使用)),可以用 dsl2mobi 这个工具来将 dsl 词典转化为 mobi,且具备词形变化的查询能力。但貌似 dsl 词典不是太好找。
    . f: G4 u( S2 b7 S  {
    * h& |- N* x+ f& p因此,想试试能否将 MDX 转为 MOBI。教程不多,仅在书伴上找到了这几篇文章。(请见 《如何把 MDX 格式词典转换成 Kindle 字典》《自制 Kindle 字典简明教程(入门篇)》《自制 Kindle 字典简明教程(进阶篇)》3 B" S( t# k# R5 |1 ?
    2 O/ T# e) M+ N- y# K
    根据  《如何把 MDX 格式词典转换成 Kindle 字典》 这篇教程,转化出来的词典不具备查询 词形变化 的单词的能力。主要原因在于没有添加变化后的单词,如图红色矩形区域(更详细的请见 《自制 Kindle 字典简明教程(进阶篇)》)。
    , w% a4 S8 \/ Q$ D5 H
    ) w$ L& i2 l0 b% v
    以 COED11 举例,这是转换后的 HTML 中的词头部分:
    6 z0 o2 m; ~+ L& X4 y# T. t6 V
    ' `  B- k8 t2 m4 G) K若要具备 词形变化 能力,需要的区块(红色矩形部分):6 V0 C5 a" o/ O" z. Q; |0 c+ a* L# B

    3 q- U: S' y/ L& ~1 T% J" O
    6 A% @. w; u3 o% w7 _# C9 }* X: @( H: K  @. r* D
    我抓破脑袋都想不出怎么样才能自动添加这些进去,后来想起 dsl2mobi 有这个功能,就下载下来研究了一下。该工具是 ruby 写的,基本看不大懂,不过我在其目录下发现了包含十几万英文单词词形变化的 TXT:$ p0 D! q2 m: y/ k" b. \0 X
    9 w( ?* d8 C6 \% Z( _: B) [
    # d5 t2 S( B' j6 M9 ]* q
    ( [" Y/ @* R$ o
    排列比较有规律,格式为  单词原型:变化1,变化2,变化3......  因此用 python 写了正则批量查询添加:- g$ z- C: M" s/ r- {

    , E2 \* K/ j0 u: Q+ a( V5 [# W1 u) g+ C2 E# t

    . `. a, t8 E, s. u2 L跑完之后:
    : Z/ Z4 o7 L: ?/ z; F' Y' _
    - p$ ~7 b/ [* i" W; z

    5 V) v. Q7 l9 O5 w0 ]2 b. E
    9 I* ^2 q& a. {  c基本原理大概就是从词典中取出主词条单词后再在 forms-EN.txt 中查询匹配,若成功则返回所有的变化形式并添加区块代码。然后重新生成 mobi 。
    ( \; e* Q6 r: |3 F. W# T$ ?; `  d+ i) r" V( N- h8 m
    兴冲冲的试了试,8 ~, N5 }: N8 H4 R" b+ e" M
    : R7 ?& l+ j3 Z* C4 \
                              两个看起来都没什么问题,和我们想想中一样。
    & Q2 d3 ?8 |; q2 N
    ) q( g% ]- O3 j5 C再试试,7 M: w& `1 @$ w$ q% k2 G2 d
    9 H9 [8 I6 Q/ \. j) o. `9 {# j
         查询dealt的时候,按设想,应该是查询deal才对,结果并不是。8 A( K6 u5 e0 X

    8 b9 F! [3 A" ?& ^用官方的词典试试* D2 D. F; R' @; r
    3 l' W$ c0 b6 n' v; O7 [7 C$ h/ E
    同样如此。
    - U# P0 f, Q, I# N6 |, [
    , U0 x* q3 V  F

    ( a3 e7 ^. p" p7 S$ c2 ^  G
    5 T4 m0 H0 G; h: C! ~018 h% ^% c! R/ t- q! P9 W* l6 h2 |9 {' q
    0 G! H9 R  r. Q4 a" K9 h+ ]3 I
    后来经过反复试验,发现了 Kindle 的查词逻辑:选中单词后,查询主词条是否匹配成功,成功则返回对应的条目,同时不再继续查询变形词条。没有主词条的话则查询词形变化区块是否有匹配,若有则返回变化词条的原型主词条。
    + e: f4 K3 E- T- K& y# u- s0 N& i9 K: D* p- n- M: d
    deal 的词条部分已经添加了 dealt 作为变形词条,然而我手中的这版 COED11.mdx 和官方的Oxford Dictionary of English 都有了 dealt 这个主词条,词条内容如上图。因此不会返回 deal 词条的内容。
    7 W5 l, D2 O* S( W
    5 R& R# I1 x- }知道问题所在后,如何解决呢?想了想,很难,因为英语词义太丰富(Rich)了。比如flame,它的词形变化理应有flaming对吧。但是flaming本身可能自成一义(火爆的,讨厌的,该死的),如果查询flaming的时候跳转到了flame,从flame很难猜到flaming的一些专有词义。除非亚马逊更新固件,修改上述的查词逻辑,即不论查不查的到主词条,变形词条所在的原型主词条一并显示。不过目前看来希望渺茫。9 C1 M8 _# U+ D- t8 b( {% m$ O
    ' ]; P) _2 a" a8 M: X$ ^8 T

    / Y" }" C  e% Z  C6 r) A' {02) G" ]  v3 E6 u5 {
    即使如此,还是有许多优秀的 MDX 词典值得页应该被转化为 mobi 以供大家使用的。个人认为kindle上不适合使用学习型词典这类词义较少的词典。比如你在看书的时候看到了square这个单词,假如你用牛津高阶,你翻到底都翻不到“步兵方阵”这个释义,最后陷入深深的自我怀疑...然后又去提问“为什么我每个单词的意思都看得懂但是就是读不懂句子的意思...”。3 Y4 K9 c8 ^) i% x
    ) G6 b; \( o9 M2 L
    经过一段时间的试验,我发现 The World Book Dictionary 和 Microsoft Encarta Dictionary 这两本词典非常适合“高阶有余,母语不足”的英语水平者的使用,但把它们转成mobi难度略大......由于水墨屏的特性,kindle 上词典个人以为只需要1.粗体 2. 斜体 3.浅色 这几种样式即可,不要图片、音频。同时要求css内置在mdx中,不能外挂。在此也向各位请教如何将外挂的css内置进mdx中的方法,我尝试了在html中添加style标签然后将css全部复制进去,但似乎并没有效果?各位如果有较好的适合在kindle上使用的词典也可以发出来大家尝试转换。2 }7 Q3 @4 c5 p3 N' }3 ]) n2 h

    1 S& f( L- D0 k7 V( S写的比较乱,抱歉。也欢迎大家交流讨论和指点。
    5 p  W  Y9 ~( H  Z; J( i7 S2 V# S! x

    ; x; l. w0 j5 Z2 C* n6 _
    $ Z! h4 o; p4 b+ f
    最后附上制作完成的COED11th.mobi
    6 d% V" b0 B) ?! I. S/ w' V! |* U& ^: O# d4 H" B8 ~! L3 @
    ) g8 Q: P( X" B& R+ N/ h
    链接: https://pan.baidu.com/s/1TyMK4P1A6ltCEDr2Bt_rNg 提取码: zp3b " h4 @, n% j, V- n
    + R) p' M* k3 C8 l  h& q# s
    ----------------------2019.10.12补链----------------------+ C% j" l# w9 X9 x. }. m
    链接: https://pan.baidu.com/s/1bSRfcScur482utaLmsxOgg 提取码: 4b5h. k; O5 z+ ~- w0 ?9 l
    $ q9 {* j8 p  W& F" |4 J2 l( a* Z' H
    6 Q6 T) O9 t" J9 w+ k1 `/ y& D9 w
    2 f1 ]$ S8 c* m5 ?; T$ L$ F" R; a
    ) m6 x. y  r0 B6 Y1 s

    # t- h# U/ A' A) K  G% `
    ' l+ |# ?, `* z* R9 H
    ( r, ?) B, K8 U0 f

    5 E( u" P% P) o4 o4 s8 G
    8 X! x; N8 h) i1 B+ V% c, m0 g
    ' U/ d* k/ e! P

    , a" S, \9 L* g& B- l2 _# m0 K# ]3 T1 }- R3 |+ r

    本帖子中包含更多资源

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

    x

    评分

    2

    查看全部评分

    本帖被以下淘专辑推荐:

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

    [LV.7]常住居民III

    发表于 2019-9-16 18:36:15 | 显示全部楼层
    按浏览器加载css文件的逻辑(不包括css外挂,css外挂是MDict和Eudic默认允许的非通行标准做法,国际软件一般还未支持)的三种:
    6 k& r' M& t5 N9 p: h. ~% h- k! b1. html tag 上的style, inline,如 <div style="font-size:14px">
    ) Y6 a0 F" p, o4 U2. <style>div {font-size:14px;}</style>' _3 U5 X2 A! k, f& R2 ?' y
    3. <link href="styles.css">
    : k, K+ d: \( I) s7 G" \4 j) E
    % a1 b8 ~6 E* K8 ~. v" j第三种,根据mdict的设计逻辑,可以放到mdd文件中;前两种,直接在mdx文件中。* M) K4 a( V( }2 p  k# N
  • 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的每日心情

    2021-3-31 09:15
  • 签到天数: 520 天

    [LV.9]以坛为家II

     楼主| 发表于 2019-9-16 19:39:05 | 显示全部楼层
    johannhuang 发表于 2019-9-16 18:36
    5 T/ l) `; T8 n8 }* n! Y按浏览器加载css文件的逻辑(不包括css外挂,css外挂是MDict和Eudic默认允许的非通行标准做法,国际软件一 ...

      J. H9 j* H- [7 l3 }2 @1 p学习了,不过我想的是是否有什么方法能将现成的外挂css中的样式还原进mdx中呢?因为mdx差不多本身就是多个html
  • TA的每日心情

    2021-3-31 09:15
  • 签到天数: 520 天

    [LV.9]以坛为家II

     楼主| 发表于 2019-9-16 19:39:57 | 显示全部楼层
    jonah_w 发表于 2019-9-16 19:25
    % T4 P* v. j  F, L7 s; Z看了下这个源码跟mac词典源码有点像
    ! ^1 f* B4 M) V! ]
    可惜只是像...若是一样的那大神就很多了..
  • TA的每日心情
    擦汗
    2 小时前
  • 签到天数: 640 天

    [LV.9]以坛为家II

    发表于 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
    ! U, [: L' H$ Y- P( @学习了,不过我想的是是否有什么方法能将现成的外挂css中的样式还原进mdx中呢?因为mdx差不多本身就是多 ...

    0 ?# V0 K1 O* [* _5 j, d6 A# o% F1. 解包mdd,加入css再打包,同时修改mdx里面得css引用
    " d: Z5 _1 Z; v3 n! b2. 在mdx中按照前述方法2进行加style (但你似乎说了不行,不知道你为什么不行,可能有局部出错了)
  • TA的每日心情

    2021-3-31 09:15
  • 签到天数: 520 天

    [LV.9]以坛为家II

     楼主| 发表于 2019-9-17 08:29:36 | 显示全部楼层
    johannhuang 发表于 2019-9-16 21:46
    " ~- s6 _6 v# `9 Q, z: _1. 解包mdd,加入css再打包,同时修改mdx里面得css引用- J1 ~, Y! A$ G# |
    2. 在mdx中按照前述方法2进行加style (但你似乎 ...

    - h8 d2 z9 k1 L5 [! w我再试了下,这次删掉了一些比较高级的样式,有效果,一些颜色斜体之类的能显示,这样看来,应该是kindle的mobi不支持太多高级CSS,只支持简单的
  • TA的每日心情

    2021-3-31 09:15
  • 签到天数: 520 天

    [LV.9]以坛为家II

     楼主| 发表于 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( T/ }9 K2 I4 m6 v/ D
    楼主,很巧,我这两天也是在忙着转一部词根词缀的词典为mobi,按照书伴的方法做出来了,只是不支持模糊搜索 ...

    ) u) e3 t5 f* p3 i- K. E/ g好,支持,感谢
  • TA的每日心情
    郁闷
    2019-12-9 22:20
  • 签到天数: 3 天

    [LV.2]偶尔看看I

    发表于 2019-10-11 20:24:57 | 显示全部楼层
    不好意思打扰了,楼主,链接挂了... :-P
  • TA的每日心情

    2021-3-31 09:15
  • 签到天数: 520 天

    [LV.9]以坛为家II

     楼主| 发表于 2019-10-12 08:48:08 | 显示全部楼层
    vicizero 发表于 2019-10-11 20:24
    , x3 v! Q7 O4 l) ?9 c/ G" d不好意思打扰了,楼主,链接挂了... :-P
    1 V  H2 j* [% Q9 x4 ^1 @0 e; {
    分享链接已补
  • TA的每日心情
    郁闷
    2019-12-9 22:20
  • 签到天数: 3 天

    [LV.2]偶尔看看I

    发表于 2019-10-12 23:05:58 | 显示全部楼层
    nullname 发表于 2019-10-12 08:485 |3 \6 `( C/ m# m
    分享链接已补

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

    [LV.7]常住居民III

    发表于 2019-10-13 01:24:40 | 显示全部楼层
    本帖最后由 流星冲击 于 2019-10-13 01:28 编辑
    # v# P+ E; A7 h2 F% z! [! A* z
    6 |$ i6 l' R* N0 k# y: @转macos词典和kindle词典最好的源文本格式是stardict格式,而不是mdict(mdx)和lingvo(dsl)格式,stardict可以通过词头添加|来实现查询词条变形,例如walk|walks|walked|walking(mdict需要用@@@link来实现),用pyglossry转成macos词典源码就自动转成相应的词性变化的词条索引,查walked会自动跳转到walk。' |; `% Z$ g6 I* l$ i
    epub dict文档的格式、kindle词典、macos词典、epwing词典的源码在处理词性变化索引都是一致的,源码也类似。kindle词典还停留在xhtml时代,不支持音视频,支持css元素少,不开源,可能受限于机器性能,所以一直没有kindle fire8制式(类似epub3)的开发文档。4 K6 y& a  e* ^- a* S) {8 C
    epub dict有开发文档了,但没有编译器和相关阅读器来支持,用epub3制式来开发一款词典,可用的css元素相当多,之前想用encarta dictionary研究如何转成epub,发现只能作阅读使用,不能用来查询单词,就放弃了。epwing的词头索引适合做日本语的词条索引,当然也适用于印欧语的词性变化词典的索引,但不支持css。macos词典自从2011年以来,苹果就没对其格式进行大的修改,可能js方面兼容性有问题,css应该没问题,用三指查询macos词典可是会上瘾的(即点生词即弹出解释界面,非常方便)。( @: R- z+ C9 g8 I! p
    所以我的思路是,dsl,mdx等格式,先转成stardict,由于stardict开源,工具多,转换成mobi的源码可能会自带词性变形。
    ' S& ]5 L: O# N, o0 A还有mdx内嵌style标签,需要每个词头content都要包含,你是想让mobi每个词条都实现某些css效果吧,mobi7不是可以内嵌css吗?为什么还要内嵌style标签?当然,我没有转过mobi词典,只是提出疑问,没有打击楼主制作mobi词典的热情。
  • TA的每日心情

    2021-3-31 09:15
  • 签到天数: 520 天

    [LV.9]以坛为家II

     楼主| 发表于 2019-10-13 09:11:32 | 显示全部楼层
    本帖最后由 nullname 于 2019-10-13 09:12 编辑 6 e5 o7 M) L, g. r% ^8 c4 g; w
    流星冲击 发表于 2019-10-13 01:24
    : w) Z0 r/ ?& M  v1 A4 @+ R; p; E; U转macos词典和kindle词典最好的源文本格式是stardict格式,而不是mdict(mdx)和lingvo(dsl)格式,stardict可 ...
    ! _0 |0 h  K; o) g0 G6 g
    是的,书伴上的教程也是这个原理,即MDX转StarDict再转tab文件再转OPF最后转MOBI。因为tab2opf这个工具比较方便,且tab文件的格式也比较友好(每个词条由词头tab空格意向这三个部分组成),所以只要能转成tab即可,后来我也发现了pyglossary这个工具,但是该工具有个缺点就是转一些词典(尤其是一些汉语辞典)的时候,tab文件中意项部分全部都是数字形式的CSS,可能是该辞典在用MDXBuilder生成的时候添加了style资源。* F+ m  m1 f" S+ B
    8 {% G" ~+ j4 V( G, i/ r% M; K
    dsl2mobi这个工具可以直接为dsl词典生成带有词性变化的mobi,但是考虑到词典内本身存在的大量@LINK跳转,最好还是解包后进一步处理较好。
    4 @# r5 Y! t6 N7 j# B$ k) Y% t* u, L1 G7 Y. y2 D! J  h
    关于内嵌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

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

    2021-3-31 09:15
  • 签到天数: 520 天

    [LV.9]以坛为家II

     楼主| 发表于 2019-10-22 19:18:37 | 显示全部楼层
    vpda2016 发表于 2019-10-22 18:28# D/ b6 J" V7 b' c/ N
    楼主,在下学习心切,也向你恳求相关Python代码,anyway,我已不胜感激。。。 ...
    + d0 B: z+ N" T( V# k9 ?: ?' K9 L
    代码已经发了,在这个帖子里面
    - m2 P! J% E  L1 n
    4 _: s  D" O4 Y$ uPython辅助MDX转MOBI(以AHD5th为例)
    , Y4 T# {$ B* M% ghttps://www.pdawiki.com/forum/fo ... hread&tid=36130
    * K- E  s9 V( P! K" K7 V; L(出处: 掌上百科 - PDAWIKI)
    0 K, I+ _( {. r6 d6 c4 P. M3 v4 d4 o' y
  • TA的每日心情
    慵懒
    2019-11-1 20:48
  • 签到天数: 120 天

    [LV.7]常住居民III

    发表于 2019-10-22 19:32:25 | 显示全部楼层
    nullname 发表于 2019-10-22 19:18
    . r/ n0 b) K8 g3 s2 D7 f代码已经发了,在这个帖子里面- F1 z& W/ W0 X, o. j

    # u; t1 G+ c0 _! r5 m7 R! |1 k8 sPython辅助MDX转MOBI(以AHD5th为例)

    " q6 G& y3 ~" g. v3 G正在看,谢谢亲。大神。
    您需要登录后才可以回帖 登录 | 免费注册

    本版积分规则

    顶部qrcode底部
    关注掌上百科官方微信公众号送积分
    关注掌上百科官方微信公众号
    关注微信公众号 pdawiki,获取邀请码,看文抢积分,抽奖得浮云! Follow our Wechat official account "pdawiki", get invitation codes, and play the lottery to earn points (积分)!

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

    GMT+8, 2021-5-11 11:20 , Processed in 0.602336 second(s), 11 queries , MemCache On.

    Powered by Discuz! X3.4

    Copyright © 2001-2020, Tencent Cloud.

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