查看: 11812|回复: 26
[教程]
新手必看的 Mdict 制作教程和经验
[复制链接]
独行者
独行者
当前离线
积分10908
TA的每日心情开心2023-4-4 20:46签到天数: 337 天
[LV.8]以坛为家I
电梯直达
1楼
发表于 2019-8-26 11:52:03
|
只看该作者
|倒序浏览
|阅读模式
本帖最后由 独行者 于 2020-8-3 09:34 编辑
. K" o7 X+ t, p) a+ M1 ]& e
4 a) @8 i$ p, v. g8 J9 r储备知识必学:HTML/CSS/JavaScript 知识。最好会:正则表达式、一门编程语言。
( n: Z9 n8 R) y/ X& B6 Y& S3 qMDX 规范词条由三部分组成:词条关键字:作为词条索引。词典 HMTL:词条内容。分隔符 >:分割每个词条。( \+ e6 d5 u* Z5 H
注意:> 后面不允许有任何空行。HMTL 允许换行,也可以不换行。
1 F' @3 z3 e6 b) u; Y例子:Antarctica
" U. V4 K8 K7 C/ E, t. d
: G* X0 M' u. [3 t B>复制代码
# [2 }" c/ T7 Y3 Z# Y/ R
; v# V b; x. g词典 HMTL格式
0 f' m! ~1 \# N. L) L和标准的 HTML 几乎一样,不过这里去掉了 、
和 标签的包裹,另外增加了一些 mdict 自有的标记和格式。下面介绍资源的引入,关于路径问题,请阅读下面的资源部分。) [0 G: b+ [$ `$ t C+ v2 ?引入 css 和 js 文件( i- O: y. U% k0 Z$ q& E
- N; b, u: J, s- T/ R3 `; F( @
引入音频6 O$ b8 c. [$ H+ s+ z+ A4 X
2 p. D% J# m" A9 l$ t$ ~* _keyword复制代码
: h3 p6 ?' g3 e; _引入图片
& R, e" d8 U0 m$ ^7 U格式一:复制代码 t2 _- v% d5 Q
格式二:file:// 可以省略复制代码
复制代码5 W9 b3 z$ J5 F( S x
跳转
/ A$ w ?) `6 ]两种形式:内联使用,可以多次使用:如 ,类似于标准 HTML 的 。还支持锚点,如 查询某个单词时直接从一个单词跳转到另一个单词,只允许使用一次:如 @@@LINK=ought to。
0 K1 m) ?8 A1 [9 J% ?+ p& c资源
6 |7 t! ?6 h9 r/ i: m2 l# THTML 中引入资源文件时根目录为 mdx 所在目录。
; L' r6 d7 h* ^$ f5 E, Y R存放当资源文件数量极多时,不建议:直接将所有资源文件存放在 mdx 目录下。建议:将资源文件打包为 mdd,注意 mdd 必须和 mdx 存放在同一目录下。有多个 mdd 文件时,文件名以 xx.mdd、xx.1.mdd,xx.n.mdd 词典软件都会读取。强烈推荐:将图片和 css、js 和字体打包为 xx.mdd,将语音打包为 xx.1.mdd,这样不想要语音文件的用户只需拷贝 xx.mdd 而不丢失样式排版。; q U7 L5 E$ T& l! H% f" B' J* a
6 q. j5 `& ]3 S. W4 N2 O- \
优先级裸露的资源文件 > mdd 中的资源文件。
* t3 M3 X% ?8 ?# s* N, R# U: m" [" `: r- N
词典软件) m# g' m# @+ B1 t8 \
6 D% N" s! ]+ G7 oMDict作为官方词典软件,却是体验最差的。基本的功能都有,这里只谈缺点:使用的 IE 浏览器,不支持许多新的 Web 规范,导致某些人制作的词典排版错乱,甚至某些引入了 JS 文件的词典直接弹窗报错。音频只支持 SPX 格式,这是当年为了节省空间的产物,因为当年 MDict 的主要活跃在 Windows Mobile 上,那时的存储卡不便宜。但是如今已经不建议使用,因为音质太差,推荐使用 MP3 或 AAC 格式。即便是该作者开发的 iOS 版本 Mdict,同样也只支持 SPX 格式,这个很让人不解。功能太弱,交互设计很差。
5 K, H7 S6 J; m# t* _( KGoldenDict毛子开发的词典软件,起初不支持 MDict,好在在开源社区的努力下后来支持了。优点:因为是 Qt 编写,使用的 Webkit 浏览器,支持的 Web 标准虽然不是最新,但是大部分的词典都能正常显示。支持 MP3 音频,就这一点就值得推荐。方便地导出 HMTL。漂亮的界面,可以自定义软件界面样式,还有很棒的交互设计。支持全文检索、支持词典排序、支持自定义在线词典、支持复制取词,还有大量优点,请自行探索。
. E! e8 Y5 |: d2 R% ^9 l* O存在的问题:性能很差,如果开启全文搜索,会很卡;载入词典过多,也会很卡,严重时直接闪退。Qt4 版本的字体渲染存在问题,因此我一直用的 Qt5 版本。取词能力较有道词典弱。: {. g* A" f7 @6 G$ h8 C3 \7 g
欧路词典集合了上述 GoldenDict 的部分优点还有以下优点:界面更加现代化,更友好。支持单词同步和收藏。支持单词复习。PC 端取词功能很强。iOS 上最强词典。2 m! h, k2 k) ^, `2 @6 C
缺点:只能从网页或手机版导入单词表,但网页版导入经常出现导入失败或者导入数量不一致的问题,手机上又不支持词组或带有符号的单词导入。同步功能存在 BUG,偶尔出现同步数量不一致,需要注销重新登录才正常。最严重的 BUG,同时存在于 PC 端和手机端。因为不同的词典可能会使用相同的标签和样式,如果直接载入,会干扰其他的词典样式。因此欧路和 GoldenDict 的做法是重写 CSS,给不同的词典的 HTML 加上一个独立 id,在每个样式名前面加上 id 编号,但问题在于有的作者的 CSS 中存在中文,为避免浏览器以 ANSI 编码读取,因此在 CSS 头部加上了 @charset "utf-8";, GoldenDict 能正确处理它,但脑残的欧路词典就不能正确处理,它会忽略第一个 CSS 样式,没有加上 id 名,如果第一个样式名是 body,则会影响到所有词典的排版,这是我们不希望看到的。8 @# `$ ^) P* H
. b( A& V& l A5 |) g; [2 i% J
如原始 CSS@charset "utf-8";
. V' p7 M! }5 z# P: t8 {; \2 G' C' o& d& D
body {
- \- @3 Q; [% ]5 D margin: 2em;1 y, s3 y) ^* G
}
. Y& b' p# \2 W% f. U/ S% R! F$ ^: g
" u( d* U' m0 ^" u% P/ Y8 Ca:hover {
$ f, l% M1 Y! }# I" f/ T% D color: #4372b6;
0 l# d- G5 E1 Z text-decoration: underline
" ^& q8 h9 p Y P9 J}复制代码
+ O8 e- d/ R! Y& r$ k4 u! nGoldenDict 会解析为@charset "utf-8"; / u6 D; R3 P1 z( Z, Q
0 N" J, q+ y. L+ [
#gdfrom-2af74dded57c0b4bf1a2e7c76ade8787 .mdict body {
( q/ G/ W# b7 o3 O. S" W margin: 2em;
9 \! n4 k/ |( J: Y}
; P+ e* |# d8 v0 t7 x: c
; j) ^9 x# d+ i6 @3 r& P, u#gdfrom-2af74dded57c0b4bf1a2e7c76ade8787 .mdict a:hover {
6 _% ^, H( o7 G" l- Q) Q1 z color: #4372b6;% B8 I- [ r1 V' `( S
text-decoration: underline
( E6 \' ?6 s& H}复制代码' f& `+ ^( t8 _$ B! G9 n
而欧路词典解析如下,body 前面没有加上 #ID224342347child,进而影响到全局的 body 标签。@charset "utf-8"; 0 A' k. C! x6 S/ x
; A0 [- h( N/ y8 J& w% D
body{3 B) [0 _0 @( K9 N, e2 Z2 G/ h4 C8 ]
margin: 2em;
' b \# `4 m4 D+ ^! l, E7 |3 A7 I} & ?% C) g5 W& g8 D
: `. ?. e2 R3 ]8 `' A8 W#ID224342347child a:hover {! t* d& o( {/ {9 M3 x) a7 W
color: #4372b6;5 b$ _$ [# W# L! C* U5 a0 ~
text-decoration: underline
( k8 ]" _* U% @0 o}复制代码6 s& j& s% v4 j, a$ E% ^" |
这就是为什么许多人用欧路词典排版混乱的原因,这个 BUG 我已经反馈了,不知道会不会改,反正我之前提过好多建议,该公司都没采纳,这个 BUG 我看也未必会修复。因此我的建议是删掉 @charset "utf-8";,因为欧路词典和 GoldenDict 本身就是以 UTF-8 打开的,无需再多此一举。增加了反而会导致欧路词典解析出错。8 ]2 [- e+ D7 n/ O
制作工具EmEditor:一般的文本编辑器打开大文件会卡死,这个不会。PatchO8C:提取 MDX 和 MDD。MDXBuilder 3.0 Beta2:官方的制作工具,不要用 4.0,4.0 版本生成的 mdx 还未被解析出来,暂不被第三方软件支持。GoldenDict:导出 HTML 方便排版调试。9 h* h6 r* x- b) D8 d
制作步骤获取数据源:可以是自己编纂的,也可以是其他格式的词典,还可以从网站抓取。按照 mdx 的规则清洗数据:上面提到的 mdx 规范。用 MDXBuilder 3.0 Beta2 转成 mdx。
^) r/ G" O( j$ ^) d+ y' F! ~配置Source:即词典原始数据文本路径,扩展名随意。Target:目标词典文件路径,扩展名必须为 mdx。Sytle:留空,这个用不到。Data:资源数据路径,有就填,没有就不填。注意了,资源数据一定要存放到一个单独的文件夹 xx 中,不要直接全部分散在 mdx 目录下,而且这个 xx 文件夹并不会打包到 mdd 中,它会作为 mdd 资源数据的根目录。Options: R4 [- J d" |. g \
Original:一定要选 Mdict(Compact HTML),这种格式就是我们上面提到的规范。Encoding:为避免乱码,必须选 UTF-8(Unicode)。Title:词典标题,可以被欧路词典读取到。Description:词典描述,支持 HTML 标签,不过支持十分有限,词典软件可以读取到。未提到的其他选项不管。& V: [3 V" S7 E2 D. g" [" G
5 _; g2 p( ~! z制作技巧体积不大的图片可以使用 base64。iOS 欧路词典不支持字体文件,可以通过转成 base64 解决。! e1 r0 a7 d% q7 F1 ` m6 U) N3 r# [
7 @; v" d. O4 j- h# T! X5 g# |
& P, {; ?' i; v2 s) r7 g X1 D }$ n6 s( o9 J, d
& i4 Q: S& l+ a/ E B
评分
8
查看全部评分
GL_n
Sakyamuni
y8888
lmjiao
cocowind
本帖被以下淘专辑推荐:
· 词典制作|主题: 111, 订阅: 24
· MDX制作|主题: 46, 订阅: 17
· 其他资料|主题: 24, 订阅: 1
· 1|主题: 40, 订阅: 0
分享到:
QQ好友和群
QQ空间
收藏64
分享2
淘帖4
回复
举报
mtaa
mtaa
当前离线
积分6071
TA的每日心情衰2023-3-29 00:54签到天数: 344 天
[LV.8]以坛为家I
推荐
发表于 2019-8-26 13:10:58
|
只看该作者
本帖最后由 mtaa 于 2019-8-26 13:16 编辑 1 `9 S" S/ R1 A0 q0 D9 U$ q- K- h9 `
. E$ o# P& ], g& y8 }【性能很差,如果开启全文搜索,会很卡;载入词典过多,也会很卡,严重时直接闪退。】# ?7 Y- w; r. c$ d4 D# k
" s8 u6 f# d, f" E1 X) E* ]& G说下遇到过的GD的问题。和楼主类似也是载入了很多词典,会闪退,最后发现有词典本身质量很差,一本简单的词典,里面html结构嵌套很深,像是直接从文字pdf转的html。* O2 x; r6 T, D$ ^0 B. O) G) o( j
解决办法是一本一本添加词典,如果闪退就说明刚添加的词典有问题,移除这本就好了。
4 V7 o+ p' b+ X+ q1 \5 A7 A
( |/ o" x/ I3 K) y' s q另外GD的全文搜索本身不慢,慢的是开始生成全文索引的时候。
3 F. Y/ l3 A: ^1 FMDX词条格式3 N2 X$ i1 c) C+ j1 Z, m- e1 |7 f
词头 -> 对应文本(释义html)
1 y" d( S4 n0 n( V( L$ _' A7 B, r" r# c
GD生成全文索引的大致流程:2 G" B7 q* U( D4 F! k* P0 S, ^
s7 D* ^1 C6 S) x% L/ r/ M获取词头 -> 获取文本块记录地址,获取词头偏移量 -> 提取解压文本块 -> 使用偏移量提取词头对应的文本 -> 生成索引2 C a8 f: {0 M! w
) I! L4 d& b. w5 p
上面这个流程是循环处理的,问题就出在第三步,反复解压同一个文本块。这里的文本块包含多个词头对应的文本。& n+ V3 f6 D+ T
$ R+ U( ^/ n# t/ N8 @1 r$ v
举例说明下:
2 j6 L3 w% Q9 ?词头 文本地址 偏移量
3 A0 m2 k$ R& |+ k& Ga -> 00000001 -> 0+ d: e9 J0 V; {5 ?
bug -> 00000002 -> 0) ~; M+ p0 U! l1 @$ |8 B' ?* D/ N4 z
bugger -> 00000002 -> 649 \5 d8 K8 t/ k, z
buggy -> 00000002 -> 128
& G6 i: \) _ A ]$ R. g3 @# {2 r$ K$ C0 K! N3 s% a
MDX多个词头的文本是打包压缩在一起的,比如上面的bug,bugger和buggy三者的文本是打包在一起的,都是同一个地址00000002,在文本块内部通过偏移量区分不同词头的文本。
" W' \% M! v3 O8 ~GD的全文索引生成是通用的,他没有为MDX单独处理bug,bugger和buggy三者的文本在同一个文本块的情况,对于00000002这个地址上的文本块,GD会反复解压3次,提取3个词头的文本,实际上解压1次就能提取这3个词头的文本。$ ]* [0 v9 x# L% v8 |* |
真实的MDX里,这种反复解压同一个文本块的情况更多,这是GD全文索引缓慢的根本原因。
# g* {0 u5 ^% V1 Z) _
! ]) r, G% A, D. X- N, p
4 d& \4 k; [; y5 H6 h6 x0 K/ L; W" N4 y* b0 _0 Q
7 f' `6 c4 R( @& }
4 @! y$ g% J ^1 m" S$ ?' V, W, P' h0 w* V% @' Z; H
回复
支持 3
反对 0
举报
独行者
独行者
当前离线
积分10908
TA的每日心情开心2023-4-4 20:46签到天数: 337 天
[LV.8]以坛为家I
推荐
楼主|
发表于 2019-8-26 15:42:05
|
只看该作者
oversky 发表于 2019-8-26 15:35
7 M" I# e2 o7 Z" E" O建议把资源档存放的路径和 mdxbuilder 内 data 指定的路径,两者要如何对应也写一下。之前也试了好几次才成 ...8 V, }0 w1 m' N! _
如果不打包的话,根路径就是 mdx 所在的路径,如果打包成 mdd,最外层的文件夹是不打包到mdd的,只是起到收纳的作用。
回复
支持
反对
举报
498018591
498018591
当前离线
积分20289
TA的每日心情郁闷2021-7-16 22:15签到天数: 90 天
[LV.6]常住居民II
4楼
发表于 2019-8-26 12:04:27
|
只看该作者
谢谢分享经验!
回复
支持
反对
举报
喬治兄
喬治兄
当前离线
积分84266
TA的每日心情开心2018-8-8 03:13签到天数: 1 天
[LV.1]初来乍到
5楼
发表于 2019-8-26 12:35:13
|
只看该作者
感謝 独行者 兄, 熱心提示 Midct 制作教程和经验 : y, }8 x9 C+ ]- C3 V- r
提醒了小弟, 差點都忘了還有幾招可以實現的方法; | t2 l( v3 X J/ O9 \
Thanks a lot
; k" n4 R6 z. x5 m; [- Y
回复
支持
反对
举报
cocowind
cocowind
当前离线
积分146890
TA的每日心情开心2022-1-21 00:52签到天数: 699 天
[LV.9]以坛为家II
6楼
发表于 2019-8-26 12:45:15
|
只看该作者
这个是高阶的,可惜收费100米
* n; a- R/ {4 p7 d" q& R最近学习到的制作mdict词库时候的一些经验
: I+ w; L; L( H$ a3 `https://www.pdawiki.com/forum/thread-34178-1-1.html?x=180507
回复
支持
反对
举报
kid728
kid728
当前离线
积分75
TA的每日心情无聊2019-8-28 09:13签到天数: 3 天
[LV.2]偶尔看看I
7楼
发表于 2019-8-26 13:58:14
|
只看该作者
小白求问,数据源也就是原始词典文本数据从哪找QvQ
回复
支持
反对
举报
独行者
独行者
当前离线
积分10908
TA的每日心情开心2023-4-4 20:46签到天数: 337 天
[LV.8]以坛为家I
8楼
楼主|
发表于 2019-8-26 14:12:22
|
只看该作者
kid728 发表于 2019-8-26 13:580 d, s9 s+ J) A6 B6 E' G
小白求问,数据源也就是原始词典文本数据从哪找QvQ/ D& D7 h! \" o8 s+ X
从其他格式词典转,或者写爬虫从某些词典网站抓取。
回复
支持
反对
举报
kid728
kid728
当前离线
积分75
TA的每日心情无聊2019-8-28 09:13签到天数: 3 天
[LV.2]偶尔看看I
9楼
发表于 2019-8-26 14:14:13
|
只看该作者
明白啦,谢谢解答~
回复
支持
反对
举报
我爱深蓝
我爱深蓝
当前离线
积分13462
TA的每日心情慵懒2020-4-10 13:19签到天数: 269 天
[LV.8]以坛为家I
10楼
发表于 2019-8-26 14:17:43
|
只看该作者
欧路也是令人不爽,奈何竟没有比他更好的,就想百度一样,加个inspect功能就那么难吗?
回复
支持
反对
举报
江湖侠客
江湖侠客
当前离线
积分15606
TA的每日心情开心2019-5-18 18:07签到天数: 521 天
[LV.9]以坛为家II
11楼
发表于 2019-8-26 14:35:46
|
只看该作者
请教楼主,如果不会正则表达式,能在mdx解包的TXT文件中每个词条上加上
回复
支持
反对
举报
独行者
独行者
当前离线
积分10908
TA的每日心情开心2023-4-4 20:46签到天数: 337 天
[LV.8]以坛为家I
12楼
楼主|
发表于 2019-8-26 14:42:32
|
只看该作者
江湖侠客 发表于 2019-8-26 14:35
/ x) i, c# e1 U1 d E8 }8 K请教楼主,如果不会正则表达式,能在mdx解包的TXT文件中每个词条上加上
' ~, ~0 N% G' i有点困难,建议学习下,入门很快的。
回复
支持
反对
举报
oversky
oversky
当前离线
积分28024
TA的每日心情无聊2022-9-25 21:09签到天数: 1136 天
[LV.10]以坛为家III
13楼
发表于 2019-8-26 15:35:41
|
只看该作者
建议把资源档存放的路径和 mdxbuilder 内 data 指定的路径,两者要如何对应也写一下。之前也试了好几次才成功,久了又忘了。
回复
支持
反对
举报
realHank
realHank
当前离线
积分1825
TA的每日心情奋斗2022-10-31 03:46签到天数: 224 天
[LV.7]常住居民III
14楼
发表于 2019-8-26 16:40:00
|
只看该作者
Nice. Thank you for your sharing
回复
支持
反对
举报
chenboeli
chenboeli
当前离线
积分26186
TA的每日心情慵懒2020-12-26 15:05签到天数: 154 天
[LV.7]常住居民III
15楼
发表于 2019-8-26 18:28:23
|
只看该作者
很不错的总结,9 H- l8 Y4 C1 f) w
想问一下:GD 方便地导出 HMTL这一条,批量的导出呢这方面,有经验吗?
回复
支持
反对
举报
独行者
独行者
当前离线
积分10908
TA的每日心情开心2023-4-4 20:46签到天数: 337 天
[LV.8]以坛为家I
16楼
楼主|
发表于 2019-8-26 18:29:41
|
只看该作者
chenboeli 发表于 2019-8-26 18:28
. R+ R9 e5 P2 M4 `很不错的总结,
3 B) c% m! j& H1 F" E想问一下:GD 方便地导出 HMTL这一条,批量的导出呢这方面,有经验吗? ...0 @2 z; I4 k( G! h: {, K
看看这个帖子 https://www.pdawiki.com/forum/fo ... &extra=page%3D1
回复
支持
反对
举报
chenboeli
chenboeli
当前离线
积分26186
TA的每日心情慵懒2020-12-26 15:05签到天数: 154 天
[LV.7]常住居民III
17楼
发表于 2019-8-26 19:57:07
|
只看该作者
独行者 发表于 2019-8-26 18:29$ f' e4 }7 o# R7 H
看看这个帖子 https://www.pdawiki.com/forum/forum.php?mod=viewthread&tid=35598&extra=page%3D17 }- v" Z6 f- Z8 X" ]3 @7 j
非常感谢
回复
支持
反对
举报
lewpad
lewpad
当前离线
积分11564
TA的每日心情擦汗2024-9-20 12:01签到天数: 784 天
[LV.10]以坛为家III
18楼
发表于 2019-8-27 11:36:28
|
只看该作者
谢谢楼主,辛苦了。 4 ]1 C$ b* ~, R. r, m- ?
GD在用。“性能很差,如果开启全文搜索,会很卡;载入词典过多,也会很卡,严重时直接闪退。” 词典过多,常无响应,不知有无解决办法.
回复
支持
反对
举报
quslrux
quslrux
当前离线
积分2337
TA的每日心情郁闷2023-5-19 21:52签到天数: 127 天
[LV.7]常住居民III
19楼
发表于 2019-8-28 19:33:04
|
只看该作者
谢谢分享经验!
回复
支持
反对
举报
cocowind
cocowind
当前离线
积分146890
TA的每日心情开心2022-1-21 00:52签到天数: 699 天
[LV.9]以坛为家II
20楼
发表于 2019-8-30 14:34:54
|
只看该作者
请教一下:
8 w, k3 @, ^5 D8 Q* E8 [. M是不是以格式@@@LINK=pic001引用的图片必须是JPG后缀?
" Q ]. e- Q3 ]+ D' a" |# s# Z4 \2 Y& M2 V! S l6 Z
pic001图片格式即便是png或者gif,都必须改为pic001.JPG才能在GoldenDict里正确显示出来
回复
支持
反对
举报
独行者
独行者
当前离线
积分10908
TA的每日心情开心2023-4-4 20:46签到天数: 337 天
[LV.8]以坛为家I
21楼
楼主|
发表于 2019-8-30 21:30:29
|
只看该作者
cocowind 发表于 2019-8-30 14:341 j! `) L( w j9 e9 [* ?* U3 ]
请教一下:
* ]$ I" L0 V7 W$ ?' [是不是以格式@@@LINK=pic001引用的图片必须是JPG后缀?
$ | P! U( ^3 i& u请重新阅读我的帖子。
回复
支持
反对
举报
liubingxy
liubingxy
当前离线
积分1179
TA的每日心情开心2019-10-1 15:42签到天数: 36 天
[LV.5]常住居民I
22楼
发表于 2019-8-31 22:04:33
|
只看该作者
谢谢分享,看上去还是不容易啊
回复
支持
反对
举报
我是小肥柴
我是小肥柴
当前离线
积分6486
TA的每日心情擦汗2024-8-20 15:02签到天数: 100 天
[LV.6]常住居民II
23楼
发表于 2020-3-13 07:54:26
|
只看该作者
谢谢分享,收藏
回复
支持
反对
举报
lwx228
lwx228
当前离线
积分10414
TA的每日心情无聊2023-2-17 11:35签到天数: 284 天
[LV.8]以坛为家I
24楼
发表于 2020-3-14 07:49:28
|
只看该作者
每次回帖、谢谢!辛苦了。
回复
支持
反对
举报
yyksyh
yyksyh
当前离线
积分4630
TA的每日心情擦汗2022-7-1 09:29签到天数: 521 天
[LV.9]以坛为家II
25楼
发表于 2020-3-25 09:13:13
|
只看该作者
这个优缺点说得太明了了,尤其关于排版,一阵见血。
回复
支持
反对
举报