查看: 5199|回复: 25
打印 上一主题 下一主题

[教程] 新手必看的 Mdict 制作教程和经验

[复制链接]
  • TA的每日心情
    开心
    昨天 08:07
  • 签到天数: 336 天

    [LV.8]以坛为家I

    20

    主题

    270

    回帖

    1万

    积分

    状元

    Rank: 9Rank: 9Rank: 9

    积分
    10872

    灌水大神章笑傲江湖章

    跳转到指定楼层
    1
    发表于 2019-8-26 11:52:03 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
    本帖最后由 独行者 于 2020-8-3 09:34 编辑

    储备知识
    • 必学:HTML/CSS/JavaScript 知识。
    • 最好会:正则表达式、一门编程语言。

    MDX 规范
    词条由三部分组成:
    • 词条关键字:作为词条索引。
    • 词典 HMTL:词条内容。
    • 分隔符 </>:分割每个词条。

    注意:
    • </> 后面不允许有任何空行。
    • HMTL 允许换行,也可以不换行。

    例子:
    1. Antarctica
    2. <link href="styles_cb.css" rel="stylesheet"/><script src="scripts_cb.js"></script><div>南极洲</div>
    3. </>
    复制代码


    词典 HMTL格式
    和标准的 HTML 几乎一样,不过这里去掉了 <html>、<head> 和 <body> 标签的包裹,另外增加了一些 mdict 自有的标记和格式。
    下面介绍资源的引入,关于路径问题,请阅读下面的资源部分

    引入 css 和 js 文件


    1. <link href="styles_cb.css" rel="stylesheet"/><script src="scripts_cb.js"></script><div>南极洲</div>
    复制代码

    引入音频

    1. <a href="sound://sound_file.mp3">keyword</a>
    复制代码

    引入图片
    格式一:
    1. <img src="file://abc.gif">
    复制代码

    格式二:
    file:// 可以省略
    1. <img src="/abc.gif">
    复制代码
    1. <img src="abc.gif">
    复制代码

    跳转
    两种形式:
    • 内联使用,可以多次使用:如 <a href="entry://ought to">,类似于标准 HTML 的 <a href="https://www.baidu.com">。还支持锚点,如 <a href="entry://look#verb">
    • 查询某个单词时直接从一个单词跳转到另一个单词,只允许使用一次:如 @@@LINK=ought to。

    资源
    HTML 中引入资源文件时根目录为 mdx 所在目录。

    存放
    • 当资源文件数量极多时,不建议:直接将所有资源文件存放在 mdx 目录下。
    • 建议:将资源文件打包为 mdd,注意 mdd 必须和 mdx 存放在同一目录下。
    • 有多个 mdd 文件时,文件名以 xx.mdd、xx.1.mdd,xx.n.mdd 词典软件都会读取。
    • 强烈推荐:将图片和 css、js 和字体打包为 xx.mdd,将语音打包为 xx.1.mdd,这样不想要语音文件的用户只需拷贝 xx.mdd 而不丢失样式排版。

    优先级
    • 裸露的资源文件 > mdd 中的资源文件。


    词典软件

    MDict
    作为官方词典软件,却是体验最差的。基本的功能都有,这里只谈缺点:
    • 使用的 IE 浏览器,不支持许多新的 Web 规范,导致某些人制作的词典排版错乱,甚至某些引入了 JS 文件的词典直接弹窗报错。
    • 音频只支持 SPX 格式,这是当年为了节省空间的产物,因为当年 MDict 的主要活跃在 Windows Mobile 上,那时的存储卡不便宜。但是如今已经不建议使用,因为音质太差,推荐使用 MP3 或 AAC 格式。即便是该作者开发的 iOS 版本 Mdict,同样也只支持 SPX 格式,这个很让人不解。
    • 功能太弱,交互设计很差。

    GoldenDict
    毛子开发的词典软件,起初不支持 MDict,好在在开源社区的努力下后来支持了。
    优点:
    • 因为是 Qt 编写,使用的 Webkit 浏览器,支持的 Web 标准虽然不是最新,但是大部分的词典都能正常显示。
    • 支持 MP3 音频,就这一点就值得推荐。
    • 方便地导出 HMTL。
    • 漂亮的界面,可以自定义软件界面样式,还有很棒的交互设计。
    • 支持全文检索、支持词典排序、支持自定义在线词典、支持复制取词,还有大量优点,请自行探索。

    存在的问题:
    • 性能很差,如果开启全文搜索,会很卡;载入词典过多,也会很卡,严重时直接闪退。
    • Qt4 版本的字体渲染存在问题,因此我一直用的 Qt5 版本。
    • 取词能力较有道词典弱。

    欧路词典
    集合了上述 GoldenDict 的部分优点还有以下优点:
    • 界面更加现代化,更友好。
    • 支持单词同步和收藏。
    • 支持单词复习。
    • PC 端取词功能很强。
    • iOS 上最强词典。

    缺点:
    • 只能从网页或手机版导入单词表,但网页版导入经常出现导入失败或者导入数量不一致的问题,手机上又不支持词组或带有符号的单词导入。
    • 同步功能存在 BUG,偶尔出现同步数量不一致,需要注销重新登录才正常。
    • 最严重的 BUG,同时存在于 PC 端和手机端。
      因为不同的词典可能会使用相同的标签和样式,如果直接载入,会干扰其他的词典样式。因此欧路和 GoldenDict 的做法是重写 CSS,给不同的词典的 HTML 加上一个独立 id,在每个样式名前面加上 id 编号,但问题在于有的作者的 CSS 中存在中文,为避免浏览器以 ANSI 编码读取,因此在 CSS 头部加上了 @charset "utf-8";, GoldenDict 能正确处理它,但脑残的欧路词典就不能正确处理,它会忽略第一个 CSS 样式,没有加上 id 名,如果第一个样式名是 body,则会影响到所有词典的排版,这是我们不希望看到的。

      如原始 CSS
      1. @charset "utf-8";

      2. body {
      3.     margin: 2em;
      4. }

      5. a:hover {
      6.    color: #4372b6;
      7.    text-decoration: underline
      8. }
      复制代码

      GoldenDict 会解析为
      1. @charset "utf-8";

      2. #gdfrom-2af74dded57c0b4bf1a2e7c76ade8787 .mdict body {
      3.     margin: 2em;
      4. }

      5. #gdfrom-2af74dded57c0b4bf1a2e7c76ade8787 .mdict a:hover {
      6.     color: #4372b6;
      7.     text-decoration: underline
      8. }
      复制代码

      而欧路词典解析如下,body 前面没有加上 #ID224342347child,进而影响到全局的 body 标签。
      1. @charset "utf-8";  

      2. body{
      3.     margin: 2em;
      4. }  

      5. #ID224342347child a:hover {
      6.     color: #4372b6;
      7.     text-decoration: underline
      8. }
      复制代码

    • 这就是为什么许多人用欧路词典排版混乱的原因,这个 BUG 我已经反馈了,不知道会不会改,反正我之前提过好多建议,该公司都没采纳,这个 BUG 我看也未必会修复。
      因此我的建议是删掉 @charset "utf-8";,因为欧路词典和 GoldenDict 本身就是以 UTF-8 打开的,无需再多此一举。增加了反而会导致欧路词典解析出错。

    制作工具
    • EmEditor:一般的文本编辑器打开大文件会卡死,这个不会。
    • PatchO8C:提取 MDX 和 MDD。
    • MDXBuilder 3.0 Beta2:官方的制作工具,不要用 4.0,4.0 版本生成的 mdx 还未被解析出来,暂不被第三方软件支持。
    • GoldenDict:导出 HTML 方便排版调试。

    制作步骤
    • 获取数据源:可以是自己编纂的,也可以是其他格式的词典,还可以从网站抓取。
    • 按照 mdx 的规则清洗数据:上面提到的 mdx 规范。
    • 用 MDXBuilder 3.0 Beta2 转成 mdx。

    配置
    • Source:即词典原始数据文本路径,扩展名随意。
    • Target:目标词典文件路径,扩展名必须为 mdx。
    • Sytle:留空,这个用不到。
    • Data:资源数据路径,有就填,没有就不填。注意了,资源数据一定要存放到一个单独的文件夹 xx 中,不要直接全部分散在 mdx 目录下,而且这个 xx 文件夹并不会打包到 mdd 中,它会作为 mdd 资源数据的根目录。
    • Options:

      • Original:一定要选 Mdict(Compact HTML),这种格式就是我们上面提到的规范。
      • Encoding:为避免乱码,必须选 UTF-8(Unicode)。
      • Title:词典标题,可以被欧路词典读取到。
      • Description:词典描述,支持 HTML 标签,不过支持十分有限,词典软件可以读取到。
      • 未提到的其他选项不管。


    制作技巧
    • 体积不大的图片可以使用 base64。
    • iOS 欧路词典不支持字体文件,可以通过转成 base64 解决。





    评分

    8

    查看全部评分

    本帖被以下淘专辑推荐:

  • TA的每日心情

    前天 00:54
  • 签到天数: 344 天

    [LV.8]以坛为家I

    1

    主题

    703

    回帖

    1万

    积分

    状元

    Rank: 9Rank: 9Rank: 9

    积分
    12764
    推荐
    发表于 2019-8-26 13:10:58 | 只看该作者
    本帖最后由 mtaa 于 2019-8-26 13:16 编辑

    【性能很差,如果开启全文搜索,会很卡;载入词典过多,也会很卡,严重时直接闪退。】

    说下遇到过的GD的问题。和楼主类似也是载入了很多词典,会闪退,最后发现有词典本身质量很差,一本简单的词典,里面html结构嵌套很深,像是直接从文字pdf转的html。
    解决办法是一本一本添加词典,如果闪退就说明刚添加的词典有问题,移除这本就好了。

    另外GD的全文搜索本身不慢,慢的是开始生成全文索引的时候。
    MDX词条格式
    词头 -> 对应文本(释义html)

    GD生成全文索引的大致流程:

    获取词头 -> 获取文本块记录地址,获取词头偏移量 -> 提取解压文本块 -> 使用偏移量提取词头对应的文本 -> 生成索引

    上面这个流程是循环处理的,问题就出在第三步,反复解压同一个文本块。这里的文本块包含多个词头对应的文本。

    举例说明下:
    词头          文本地址        偏移量
    a          -> 00000001   -> 0
    bug      -> 00000002   -> 0
    bugger -> 00000002   -> 64
    buggy  -> 00000002   -> 128

    MDX多个词头的文本是打包压缩在一起的,比如上面的bug,bugger和buggy三者的文本是打包在一起的,都是同一个地址00000002,在文本块内部通过偏移量区分不同词头的文本。
    GD的全文索引生成是通用的,他没有为MDX单独处理bug,bugger和buggy三者的文本在同一个文本块的情况,对于00000002这个地址上的文本块,GD会反复解压3次,提取3个词头的文本,实际上解压1次就能提取这3个词头的文本。
    真实的MDX里,这种反复解压同一个文本块的情况更多,这是GD全文索引缓慢的根本原因。






  • TA的每日心情
    郁闷
    2021-7-16 22:15
  • 签到天数: 90 天

    [LV.6]常住居民II

    14

    主题

    740

    回帖

    9824

    积分

    进士

    Rank: 8Rank: 8

    积分
    9824

    QQ 章

    3
    发表于 2019-8-26 12:04:27 | 只看该作者
    谢谢分享经验!
  • TA的每日心情
    开心
    2018-8-8 03:13
  • 签到天数: 1 天

    [LV.1]初来乍到

    254

    主题

    4264

    回帖

    7万

    积分

    状元

    Rank: 9Rank: 9Rank: 9

    积分
    79050

    小蜜蜂章笑傲江湖章灌水大神章QQ 章

    QQ
    4
    发表于 2019-8-26 12:35:13 | 只看该作者
    感謝 独行者 兄, 熱心提示   Midct 制作教程和经验
    提醒了小弟, 差點都忘了還有幾招可以實現的方法
    Thanks a lot
  • TA的每日心情
    开心
    2022-1-21 00:52
  • 签到天数: 699 天

    [LV.9]以坛为家II

    17

    主题

    1754

    回帖

    1万

    积分

    状元

    Rank: 9Rank: 9Rank: 9

    积分
    19738
    5
    发表于 2019-8-26 12:45:15 | 只看该作者
    这个是高阶的,可惜收费100米
    最近学习到的制作mdict词库时候的一些经验
    https://www.pdawiki.com/forum/thread-34178-1-1.html?x=180507
  • TA的每日心情
    无聊
    2019-8-28 09:13
  • 签到天数: 3 天

    [LV.2]偶尔看看I

    0

    主题

    6

    回帖

    75

    积分

    白身

    Rank: 1

    积分
    75
    6
    发表于 2019-8-26 13:58:14 | 只看该作者
    小白求问,数据源也就是原始词典文本数据从哪找QvQ
  • TA的每日心情
    开心
    昨天 08:07
  • 签到天数: 336 天

    [LV.8]以坛为家I

    20

    主题

    270

    回帖

    1万

    积分

    状元

    Rank: 9Rank: 9Rank: 9

    积分
    10872

    灌水大神章笑傲江湖章

    7
     楼主| 发表于 2019-8-26 14:12:22 | 只看该作者
    kid728 发表于 2019-8-26 13:58
    小白求问,数据源也就是原始词典文本数据从哪找QvQ

    从其他格式词典转,或者写爬虫从某些词典网站抓取。
  • TA的每日心情
    无聊
    2019-8-28 09:13
  • 签到天数: 3 天

    [LV.2]偶尔看看I

    0

    主题

    6

    回帖

    75

    积分

    白身

    Rank: 1

    积分
    75
    8
    发表于 2019-8-26 14:14:13 | 只看该作者
    明白啦,谢谢解答~
  • TA的每日心情
    慵懒
    2020-4-10 13:19
  • 签到天数: 269 天

    [LV.8]以坛为家I

    16

    主题

    897

    回帖

    1万

    积分

    状元

    Rank: 9Rank: 9Rank: 9

    积分
    13141

    QQ 章

    9
    发表于 2019-8-26 14:17:43 | 只看该作者
    欧路也是令人不爽,奈何竟没有比他更好的,就想百度一样,加个inspect功能就那么难吗?
  • TA的每日心情
    开心
    2019-5-18 18:07
  • 签到天数: 521 天

    [LV.9]以坛为家II

    12

    主题

    1322

    回帖

    1万

    积分

    状元

    Rank: 9Rank: 9Rank: 9

    积分
    15559

    灌水大神章

    10
    发表于 2019-8-26 14:35:46 | 只看该作者
    请教楼主,如果不会正则表达式,能在mdx解包的TXT文件中每个词条上加上<link href="styles_cb.css" 吗?有一词典没有css文件,想做一个外接css, 就这个问题难住了
  • TA的每日心情
    开心
    昨天 08:07
  • 签到天数: 336 天

    [LV.8]以坛为家I

    20

    主题

    270

    回帖

    1万

    积分

    状元

    Rank: 9Rank: 9Rank: 9

    积分
    10872

    灌水大神章笑傲江湖章

    11
     楼主| 发表于 2019-8-26 14:42:32 | 只看该作者
    江湖侠客 发表于 2019-8-26 14:35
    请教楼主,如果不会正则表达式,能在mdx解包的TXT文件中每个词条上加上

    有点困难,建议学习下,入门很快的。
  • TA的每日心情
    无聊
    2022-9-25 21:09
  • 签到天数: 1136 天

    [LV.10]以坛为家III

    17

    主题

    3142

    回帖

    2万

    积分

    状元

    Rank: 9Rank: 9Rank: 9

    积分
    25289

    灌水大神章

    12
    发表于 2019-8-26 15:35:41 | 只看该作者
    建议把资源档存放的路径和 mdxbuilder 内 data 指定的路径,两者要如何对应也写一下。之前也试了好几次才成功,久了又忘了。
  • TA的每日心情
    开心
    昨天 08:07
  • 签到天数: 336 天

    [LV.8]以坛为家I

    20

    主题

    270

    回帖

    1万

    积分

    状元

    Rank: 9Rank: 9Rank: 9

    积分
    10872

    灌水大神章笑傲江湖章

    13
     楼主| 发表于 2019-8-26 15:42:05 | 只看该作者
    oversky 发表于 2019-8-26 15:35
    建议把资源档存放的路径和 mdxbuilder 内 data 指定的路径,两者要如何对应也写一下。之前也试了好几次才成 ...

    如果不打包的话,根路径就是 mdx 所在的路径,如果打包成 mdd,最外层的文件夹是不打包到mdd的,只是起到收纳的作用。
  • TA的每日心情
    奋斗
    2022-10-31 03:46
  • 签到天数: 224 天

    [LV.7]常住居民III

    3

    主题

    311

    回帖

    1817

    积分

    解元

    Rank: 5Rank: 5

    积分
    1817
    14
    发表于 2019-8-26 16:40:00 | 只看该作者
    Nice. Thank you for your sharing
  • TA的每日心情
    慵懒
    2020-12-26 15:05
  • 签到天数: 154 天

    [LV.7]常住居民III

    7

    主题

    350

    回帖

    2万

    积分

    状元

    Rank: 9Rank: 9Rank: 9

    积分
    26168

    QQ 章

    15
    发表于 2019-8-26 18:28:23 | 只看该作者
    很不错的总结,
    想问一下:GD 方便地导出 HMTL这一条,批量的导出呢这方面,有经验吗?
  • TA的每日心情
    开心
    昨天 08:07
  • 签到天数: 336 天

    [LV.8]以坛为家I

    20

    主题

    270

    回帖

    1万

    积分

    状元

    Rank: 9Rank: 9Rank: 9

    积分
    10872

    灌水大神章笑傲江湖章

    16
     楼主| 发表于 2019-8-26 18:29:41 | 只看该作者
    chenboeli 发表于 2019-8-26 18:28
    很不错的总结,
    想问一下:GD 方便地导出 HMTL这一条,批量的导出呢这方面,有经验吗? ...

    看看这个帖子 https://www.pdawiki.com/forum/fo ... &extra=page%3D1
  • TA的每日心情
    慵懒
    2020-12-26 15:05
  • 签到天数: 154 天

    [LV.7]常住居民III

    7

    主题

    350

    回帖

    2万

    积分

    状元

    Rank: 9Rank: 9Rank: 9

    积分
    26168

    QQ 章

    17
    发表于 2019-8-26 19:57:07 | 只看该作者
    独行者 发表于 2019-8-26 18:29
    看看这个帖子 https://www.pdawiki.com/forum/forum.php?mod=viewthread&tid=35598&extra=page%3D1

    非常感谢
  • TA的每日心情
    奋斗
    昨天 08:43
  • 签到天数: 766 天

    [LV.10]以坛为家III

    19

    主题

    1163

    回帖

    1万

    积分

    状元

    Rank: 9Rank: 9Rank: 9

    积分
    10958
    18
    发表于 2019-8-27 11:36:28 | 只看该作者
    谢谢楼主,辛苦了。
    GD在用。“性能很差,如果开启全文搜索,会很卡;载入词典过多,也会很卡,严重时直接闪退。” 词典过多,常无响应,不知有无解决办法.
  • TA的每日心情

    昨天 19:51
  • 签到天数: 124 天

    [LV.7]常住居民III

    1

    主题

    287

    回帖

    2262

    积分

    解元

    Rank: 5Rank: 5

    积分
    2262
    QQ
    19
    发表于 2019-8-28 19:33:04 | 只看该作者
    谢谢分享经验!
  • TA的每日心情
    开心
    2022-1-21 00:52
  • 签到天数: 699 天

    [LV.9]以坛为家II

    17

    主题

    1754

    回帖

    1万

    积分

    状元

    Rank: 9Rank: 9Rank: 9

    积分
    19738
    20
    发表于 2019-8-30 14:34:54 | 只看该作者
    请教一下:
    是不是以格式@@@LINK=pic001引用的图片必须是JPG后缀?

    pic001图片格式即便是png或者gif,都必须改为pic001.JPG才能在GoldenDict里正确显示出来
  • TA的每日心情
    开心
    昨天 08:07
  • 签到天数: 336 天

    [LV.8]以坛为家I

    20

    主题

    270

    回帖

    1万

    积分

    状元

    Rank: 9Rank: 9Rank: 9

    积分
    10872

    灌水大神章笑傲江湖章

    21
     楼主| 发表于 2019-8-30 21:30:29 | 只看该作者
    cocowind 发表于 2019-8-30 14:34
    请教一下:
    是不是以格式@@@LINK=pic001引用的图片必须是JPG后缀?

    请重新阅读我的帖子。
  • TA的每日心情
    开心
    2019-10-1 15:42
  • 签到天数: 36 天

    [LV.5]常住居民I

    1

    主题

    199

    回帖

    1179

    积分

    解元

    Rank: 5Rank: 5

    积分
    1179
    22
    发表于 2019-8-31 22:04:33 | 只看该作者
    谢谢分享,看上去还是不容易啊
  • TA的每日心情
    无聊
    2021-12-3 11:07
  • 签到天数: 99 天

    [LV.6]常住居民II

    1

    主题

    139

    回帖

    6476

    积分

    会元

    Rank: 7Rank: 7Rank: 7

    积分
    6476

    QQ 章

    23
    发表于 2020-3-13 07:54:26 | 只看该作者
    谢谢分享,收藏
  • TA的每日心情
    无聊
    2023-2-17 11:35
  • 签到天数: 284 天

    [LV.8]以坛为家I

    20

    主题

    889

    回帖

    1万

    积分

    状元

    Rank: 9Rank: 9Rank: 9

    积分
    10318

    QQ 章

    24
    发表于 2020-3-14 07:49:28 | 只看该作者
    每次回帖、谢谢!辛苦了。
  • TA的每日心情
    擦汗
    2022-7-1 09:29
  • 签到天数: 521 天

    [LV.9]以坛为家II

    1

    主题

    533

    回帖

    4630

    积分

    贡士

    Rank: 6Rank: 6

    积分
    4630

    QQ 章

    25
    发表于 2020-3-25 09:13:13 | 只看该作者
    这个优缺点说得太明了了,尤其关于排版,一阵见血。