掌上百科 - PDAWIKI

 找回密码
 免费注册

QQ登录

只需一步,快速开始

查看: 6738|回复: 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 编辑
    # q: U  ~/ q9 }! ^% j: x9 Z
    3 e/ q* e1 g4 c009 g* @# i5 I* _; u5 u) R
    相较于MDX词典的百花齐放、门类齐全(从学习型再到母语型再到俗语习语俚语等,不一而足。) Kindle用的MOBI词典就显得冷落多了,有意义的词典非常有限,也许是因为Kindle的使用人数很少吧.... 基本就是官方的英英、英汉和 skywind3000 大神的这本 简明英汉必应版 了。' \4 P$ Z* Y+ U0 n- J6 p& P- ~
    其他的像书伴上的那些都很难用,主要问题就在于不具备 词形变化 的查询能力。比如书中出现了 looked, raised 这种单词,它们基本都不能直接查询到 look, raise。
      j, {4 A& z0 Y2 U( d' m8 }3 H2 |. h4 }# D& z) d# I9 G
    之前在知乎上看见孙缓之的一篇帖子(见此 Kindle OALD9 民间发布(仅限交流使用)),可以用 dsl2mobi 这个工具来将 dsl 词典转化为 mobi,且具备词形变化的查询能力。但貌似 dsl 词典不是太好找。% i' p4 m# S' b! r
    % c  r0 `% q$ O- O6 @8 K5 A0 x
    因此,想试试能否将 MDX 转为 MOBI。教程不多,仅在书伴上找到了这几篇文章。(请见 《如何把 MDX 格式词典转换成 Kindle 字典》《自制 Kindle 字典简明教程(入门篇)》《自制 Kindle 字典简明教程(进阶篇)》
    $ v% O! |& h! l2 K; s) R% O' P0 P' T3 J* N" X) T6 ]
    根据  《如何把 MDX 格式词典转换成 Kindle 字典》 这篇教程,转化出来的词典不具备查询 词形变化 的单词的能力。主要原因在于没有添加变化后的单词,如图红色矩形区域(更详细的请见 《自制 Kindle 字典简明教程(进阶篇)》)。
    ' t5 [1 u5 E% l& |
    / _9 J& M9 D% B5 e% }2 L  q4 S
    以 COED11 举例,这是转换后的 HTML 中的词头部分:
    & _! N+ r& Q8 Z3 ^, J2 g6 g2 X1 Y. z9 O2 f0 }
    若要具备 词形变化 能力,需要的区块(红色矩形部分):5 _8 Q& b9 A. N  O5 b
    5 t- a; J0 y, C* b
    6 N: [- y$ I8 V6 p$ ]; Y

    ) g; d; l3 I% v( @- J0 @* T# K# m我抓破脑袋都想不出怎么样才能自动添加这些进去,后来想起 dsl2mobi 有这个功能,就下载下来研究了一下。该工具是 ruby 写的,基本看不大懂,不过我在其目录下发现了包含十几万英文单词词形变化的 TXT:! [0 _  m4 O" s! C, z- o
    * m3 s/ e7 |  N: H" [
    $ T" ^5 j) ~( F( j- w0 a
    2 _3 G0 L" z# a/ Z& A( ?0 W# }7 W
    排列比较有规律,格式为  单词原型:变化1,变化2,变化3......  因此用 python 写了正则批量查询添加:: s  ~. l2 J% }! R0 j6 W0 f
    8 A# Z' ]3 w. i, e) U
    ! k8 e- G' `5 G; Q0 L
    1 P+ C* b& l1 H  ^$ s* r. k6 Y5 d
    跑完之后:, E2 D$ i; @6 h: \, i: A
    6 L: a7 C$ U6 o/ n7 M8 C! p- v
    + T: k) s7 U+ f$ ^! E0 k

      Z6 D3 [, c+ u  O基本原理大概就是从词典中取出主词条单词后再在 forms-EN.txt 中查询匹配,若成功则返回所有的变化形式并添加区块代码。然后重新生成 mobi 。$ Y0 E8 s7 M' a. l  j8 D. y
    8 f! w1 u7 G& C" U
    兴冲冲的试了试,/ G- }7 m2 e" V8 M5 j) t* {! C
    1 }: t2 U2 ]2 e- ^! A
                              两个看起来都没什么问题,和我们想想中一样。- s: F' h' w3 ?

    3 Y% U$ p1 w! B' s. t% m; c再试试,, v4 j) L2 `8 }6 z3 X# c7 d' T
    0 b' V6 a4 K. z
         查询dealt的时候,按设想,应该是查询deal才对,结果并不是。
    ( l: c( {; R( Y1 r) ^) w( _7 T
    ) O% a9 s! f9 D* X用官方的词典试试
    7 P7 ~% f; A: k8 G' L* F4 b- G' {0 S( i
    同样如此。
    3 d( _# N8 `# w
    % l/ S9 {( N! H; X% H
    ( g- h/ M! h% v8 W) q( K/ B5 ^5 f
    ; F) V" x, Q  X' a6 p, V
    01" L7 S) L) [4 X  a  L: f( S

    4 X8 P; K: a" S( Z后来经过反复试验,发现了 Kindle 的查词逻辑:选中单词后,查询主词条是否匹配成功,成功则返回对应的条目,同时不再继续查询变形词条。没有主词条的话则查询词形变化区块是否有匹配,若有则返回变化词条的原型主词条。3 J2 t- w: j3 W* i& O* L( a
    ( Z! G1 q3 g8 m: @( |" ^! L) c5 ^
    deal 的词条部分已经添加了 dealt 作为变形词条,然而我手中的这版 COED11.mdx 和官方的Oxford Dictionary of English 都有了 dealt 这个主词条,词条内容如上图。因此不会返回 deal 词条的内容。
    : B0 I0 P+ B1 W" b) U9 e/ h& h  J# O9 m7 V
    知道问题所在后,如何解决呢?想了想,很难,因为英语词义太丰富(Rich)了。比如flame,它的词形变化理应有flaming对吧。但是flaming本身可能自成一义(火爆的,讨厌的,该死的),如果查询flaming的时候跳转到了flame,从flame很难猜到flaming的一些专有词义。除非亚马逊更新固件,修改上述的查词逻辑,即不论查不查的到主词条,变形词条所在的原型主词条一并显示。不过目前看来希望渺茫。
    % e9 _9 m2 y2 Z0 M

    9 {( _3 Z+ ?. n  h
    . d. I% Y, O+ f6 q4 M& K% d
    02
    " r( {1 m2 ~4 H8 S即使如此,还是有许多优秀的 MDX 词典值得页应该被转化为 mobi 以供大家使用的。个人认为kindle上不适合使用学习型词典这类词义较少的词典。比如你在看书的时候看到了square这个单词,假如你用牛津高阶,你翻到底都翻不到“步兵方阵”这个释义,最后陷入深深的自我怀疑...然后又去提问“为什么我每个单词的意思都看得懂但是就是读不懂句子的意思...”。
    2 ~$ ~7 h2 L- U( P
    9 F6 f9 ?  f0 ?% p0 a经过一段时间的试验,我发现 The World Book Dictionary 和 Microsoft Encarta Dictionary 这两本词典非常适合“高阶有余,母语不足”的英语水平者的使用,但把它们转成mobi难度略大......由于水墨屏的特性,kindle 上词典个人以为只需要1.粗体 2. 斜体 3.浅色 这几种样式即可,不要图片、音频。同时要求css内置在mdx中,不能外挂。在此也向各位请教如何将外挂的css内置进mdx中的方法,我尝试了在html中添加style标签然后将css全部复制进去,但似乎并没有效果?各位如果有较好的适合在kindle上使用的词典也可以发出来大家尝试转换。+ I+ B0 w" n, J$ w
    8 C) g( c9 o( I3 l
    写的比较乱,抱歉。也欢迎大家交流讨论和指点。# r7 q% [4 x/ S4 [. X4 A

    5 o9 p. F# m& D' z' E$ ]0 E8 R
    8 a3 l+ z' d  h6 I: b
    最后附上制作完成的COED11th.mobi
    - `$ O: Q& O3 a6 `* ]7 h  V+ r" I  ], J: u- g
    2 R! q( T" u, t' ]2 X
    链接: https://pan.baidu.com/s/1TyMK4P1A6ltCEDr2Bt_rNg 提取码: zp3b 5 c# `' A2 X* ?' a; H2 _, A- X

    + k5 w- t4 @( N9 p----------------------2019.10.12补链----------------------
    & ~9 R( y! H! P  }$ g链接: https://pan.baidu.com/s/1bSRfcScur482utaLmsxOgg 提取码: 4b5h
    9 q' d" g$ s' M

    5 c' Z0 v: k& l  H% ]: [

    8 \7 R1 `- B% o) q# C8 ~7 a+ q3 W+ m# }) y$ n5 a, y

    % e& |  a' a+ Z# K* n
    7 S7 ?# w+ Y; k7 F" w

    ' K; ^5 f. _! o; D2 c! a

    3 f1 G( n$ d0 L; W- \3 J! D7 R3 R1 m/ h+ q; u" o; |) l& q' O# ]: f

    7 H! ~3 A- O- l* Z$ l) [, a9 W- [' R8 R/ P  k
    . u* ]  g# h, A& j* X! ^4 S: w" |

    2 F- L% y6 W" w1 F, W: s! V" I  I

    本帖子中包含更多资源

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

    x

    评分

    3

    查看全部评分

    本帖被以下淘专辑推荐:

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

    [LV.7]常住居民III

    发表于 2019-9-16 18:36:15 | 显示全部楼层
    按浏览器加载css文件的逻辑(不包括css外挂,css外挂是MDict和Eudic默认允许的非通行标准做法,国际软件一般还未支持)的三种:
    + f9 d( j  i) _4 P1. html tag 上的style, inline,如 <div style="font-size:14px">% {9 B" p! W) f2 w0 d% A; J/ Q% T6 v
    2. <style>div {font-size:14px;}</style>! u, y4 n. C2 g
    3. <link href="styles.css">! p5 v3 _/ V5 a$ r' ~- W+ Y
    1 E5 O4 L9 V% M7 W1 e* l
    第三种,根据mdict的设计逻辑,可以放到mdd文件中;前两种,直接在mdx文件中。& q' S* n. J" p' v, g/ W" z& y( I
  • 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) i: N) M8 T. m/ t4 Q7 c
    按浏览器加载css文件的逻辑(不包括css外挂,css外挂是MDict和Eudic默认允许的非通行标准做法,国际软件一 ...
    ( p6 q( Y  ?+ J2 _8 D
    学习了,不过我想的是是否有什么方法能将现成的外挂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:259 X! S3 k0 z" [+ V; U% S! C
    看了下这个源码跟mac词典源码有点像

    1 F0 J) x) w8 k1 ]可惜只是像...若是一样的那大神就很多了..
  • 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
    * v- O: ?1 _; J1 ~: s4 E! e9 W学习了,不过我想的是是否有什么方法能将现成的外挂css中的样式还原进mdx中呢?因为mdx差不多本身就是多 ...

    / U. \9 b' ?: f: |6 |: n4 [1. 解包mdd,加入css再打包,同时修改mdx里面得css引用# C( U" o8 e* C" j4 {. @( ]) s
    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:46
    - y: l& o2 P2 N1. 解包mdd,加入css再打包,同时修改mdx里面得css引用
    5 N- @# w5 h* G* b  W% W' c1 W2. 在mdx中按照前述方法2进行加style (但你似乎 ...

    - e. |/ A) n4 b* x- j% o; R! B5 B我再试了下,这次删掉了一些比较高级的样式,有效果,一些颜色斜体之类的能显示,这样看来,应该是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# n+ n& P% N& ?* h: ~
    楼主,很巧,我这两天也是在忙着转一部词根词缀的词典为mobi,按照书伴的方法做出来了,只是不支持模糊搜索 ...
    / c; _- S+ f: y. u6 F
    好,支持,感谢
  • 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: A  M" ?- J: r
    不好意思打扰了,楼主,链接挂了... :-P
    " Y' ]& R4 Z) q8 S$ ]
    分享链接已补
  • TA的每日心情

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

    [LV.2]偶尔看看I

    发表于 2019-10-12 23:05:58 | 显示全部楼层
    nullname 发表于 2019-10-12 08:48
    2 A- u* ~( [1 T+ @分享链接已补
    ) G" p( S: L9 h' \& _$ i
    好的,已收到,正尝试使用
  • TA的每日心情
    开心
    2019-3-26 21:36
  • 签到天数: 178 天

    [LV.7]常住居民III

    发表于 2019-10-13 01:24:40 | 显示全部楼层
    本帖最后由 流星冲击 于 2019-10-13 01:28 编辑 + H' x0 X% @6 v8 t

    ( [% Q6 N, F/ Y0 N# t8 W转macos词典和kindle词典最好的源文本格式是stardict格式,而不是mdict(mdx)和lingvo(dsl)格式,stardict可以通过词头添加|来实现查询词条变形,例如walk|walks|walked|walking(mdict需要用@@@link来实现),用pyglossry转成macos词典源码就自动转成相应的词性变化的词条索引,查walked会自动跳转到walk。
    8 M0 Z) g+ o/ p4 ?# D/ |: ?5 ?. C# yepub dict文档的格式、kindle词典、macos词典、epwing词典的源码在处理词性变化索引都是一致的,源码也类似。kindle词典还停留在xhtml时代,不支持音视频,支持css元素少,不开源,可能受限于机器性能,所以一直没有kindle fire8制式(类似epub3)的开发文档。
    4 O; j  k* l. Vepub dict有开发文档了,但没有编译器和相关阅读器来支持,用epub3制式来开发一款词典,可用的css元素相当多,之前想用encarta dictionary研究如何转成epub,发现只能作阅读使用,不能用来查询单词,就放弃了。epwing的词头索引适合做日本语的词条索引,当然也适用于印欧语的词性变化词典的索引,但不支持css。macos词典自从2011年以来,苹果就没对其格式进行大的修改,可能js方面兼容性有问题,css应该没问题,用三指查询macos词典可是会上瘾的(即点生词即弹出解释界面,非常方便)。
    0 A  H( k, \5 L. f' x3 k所以我的思路是,dsl,mdx等格式,先转成stardict,由于stardict开源,工具多,转换成mobi的源码可能会自带词性变形。+ i! R* O, M9 [2 |8 e3 q2 G7 V
    还有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 编辑 + V8 b$ v8 J) T. \" n) z
    流星冲击 发表于 2019-10-13 01:24
    4 F$ E4 I' h, W1 D转macos词典和kindle词典最好的源文本格式是stardict格式,而不是mdict(mdx)和lingvo(dsl)格式,stardict可 ...
      U6 h2 f+ K& O8 E
    是的,书伴上的教程也是这个原理,即MDX转StarDict再转tab文件再转OPF最后转MOBI。因为tab2opf这个工具比较方便,且tab文件的格式也比较友好(每个词条由词头tab空格意向这三个部分组成),所以只要能转成tab即可,后来我也发现了pyglossary这个工具,但是该工具有个缺点就是转一些词典(尤其是一些汉语辞典)的时候,tab文件中意项部分全部都是数字形式的CSS,可能是该辞典在用MDXBuilder生成的时候添加了style资源。- ]; e7 J- x! ^  D0 E9 G8 h- w
    % r. \* l5 j4 R, H2 U* S- M
    dsl2mobi这个工具可以直接为dsl词典生成带有词性变化的mobi,但是考虑到词典内本身存在的大量@LINK跳转,最好还是解包后进一步处理较好。
      P8 K7 `9 G$ G6 Z$ k; G/ y( h0 P$ F$ N4 v2 T
    关于内嵌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! T1 m. B7 D9 y7 e7 H0 m# Z5 a! D/ x
    楼主,在下学习心切,也向你恳求相关Python代码,anyway,我已不胜感激。。。 ...
    ! N7 s. c5 g' w! J3 M5 [
    代码已经发了,在这个帖子里面8 Z3 S3 w7 P  n6 Q
    0 u" S. G) M4 p9 |$ h' c
    Python辅助MDX转MOBI(以AHD5th为例)! w7 m& v! c7 z- g6 P1 E; j
    https://www.pdawiki.com/forum/fo ... hread&tid=36130
    / V1 {5 D& C! l! S8 S(出处: 掌上百科 - PDAWIKI)- V/ L% o0 ?5 o
  • TA的每日心情
    慵懒
    2024-1-31 14:20
  • 签到天数: 121 天

    [LV.7]常住居民III

    发表于 2019-10-22 19:32:25 | 显示全部楼层
    nullname 发表于 2019-10-22 19:18
    0 H) v. Y  Q" |/ u; t代码已经发了,在这个帖子里面
    # t5 G' z( ]  n! |# Y) `: D7 }  |$ i0 u/ V) b" Q6 i
    Python辅助MDX转MOBI(以AHD5th为例)
    + K  C' C- t7 [8 {
    正在看,谢谢亲。大神。
    您需要登录后才可以回帖 登录 | 免费注册

    本版积分规则

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

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

    Powered by Discuz! X3.4

    Copyright © 2001-2023, Tencent Cloud.

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