J̥H́-交流 - 词典软件词库制作工具之writemdict打包mdx及mdd的特征整理

我们讲mdx+mdd++extras(png, js, css…)作为词典存储格式的时候,通常指的为一种文件存储标准。这个标准的原始官方描述见于 https://bitbucket.org/xwang/mdict-analysis/src/default/README.rst 以及 https://github.com/zhansliu/writemdict/blob/master/README.md

标准的实现,受个人视野限制,看得见的部分,写的方面主要为 https://github.com/zhansliu/writemdict ,而读的方面主要为 https://bitbucket.org/xwang/mdict-analysis/src/default/ 以及 https://github.com/goldendict/goldendict

当然,同时由于网友对mdx+mdd这类词典存储数据格式比较有热情,所以网上也存在着一些比较有个人风格/口味的第三方(开源或闭源)的对mdx+mdd文件存储格式的读与写的不同实现。其中,写的方面,比较有知名度的也包括 MdxBuilder 3。

因为相对于mdx+mdd开放标准,不同软件开发者有不同的实现,所以在读写兼容方面边出现了一些差异。(类似于相对于W3C的HTML5标准,不同浏览器开发者有不同的实现,所以网页在不同的浏览器中的显示与运行时出现了一些差异。)

本帖主要讨论,官方开源的writemdict配合GoldenDict相对于另一个比较有知名度的闭源的组合MdxBuilder 3 + MDict 2.0的特征差异。

个人所见,写mdx+mdd的方面,writemdict ( commit f0240b3 on 16 Mar 2016)主要有以下差异特征:

  1. writemdict不支持重复词头关键字
    • 原因为Python的dict类型不支持重复key
  2. writemdict生成的mdx+mdd的词头关键字顺序不确定
    • 原因为Python的dict类型默认为不确定key-value顺序

其中由于writemdict不支持重复词头关键字的可能带来的问题的一个示例如下。

如以下两图所示

image

image

.mdx.txt源文件中Tuch的词条有词头相同的两条
但是打包后使用GoldenDict查询出现在结果区域的却只有第一条,也就是词头被后来者覆盖。

当然,writemdict不支持重复词头关键字的问题也比较容易解决,办法就是讲多个相同词头的内容部分合并(毕竟html区块的合并简单直接不需要额外很多处理)。以上示例合并后输出的结果示例如下图所示。
image

很明显也干净简洁。

对于writemdict的关键字顺序不确定方面各位坛友有什么想法没?或者各位坛有知道更多writemdict的特征不?欢迎各位坛友交流,百家争鸣方得其要。

1 Like

python的dict的键不能重复。


有个很早的Issue,不过我还没仔细看完。

你说的是原因,不过我们还是得找找办法解决这个问题比较实在,或者就只能调整源文件了。

lgmcw在pdawiki发过一个修改版

https://www.pdawiki.com/forum/forum.php?mod=viewthread&tid=36415&highlight=

看了下他的修改方法,其实也是 把多个词头合并。动核心代码,感觉还是有些头疼的。

安装同样思路弄了下,折衷方案可行吧。
image

同样本着活跃论坛的原则,继续欢迎各路小伙伴跟贴表达观点。

pypi没有writemdict,我觉得修改核心就无所谓。还有一个pda大神弄的工具,mdict-utils,也是基于writemdict,并且发到pypi上了

其实我觉得不支持重复词头可能更好。因为更technically compatible for further extension.

都用官方打包工具的路过。

官方工具没api,对自动化打包就是灾难。

mdict-utils写的还是挺实用的,不过低声喃喃一下,真正的大神是writemdict,mdict-utils其实也是调用接口而已,不过mdict-utils作者的精神值得赞许,给大伙儿提供了顺手的工具。

另外,其实我也和他一样,觉得其实sqlite用来做词典更好。只需要,给sqlite做词典整理个大家都认可并支持的标准就完虐什么mdx,mdd,bgl之流。

规范越多,对上层应用当然是好事,但是对开发者就越麻烦

这个地方我就完全不认同hua了。我觉得你说的这个官方其实是个假官方,真正的官方是开放标准的官方,也即writemdict。因为除了MDict软件以外,其他软件都是按照writemdict的标准支持的mdx和mdd。所以,我认为,hua你在这个地方跑偏了,用了山寨版的东西。哈哈哈哈

writemdict标准哪儿来的?我也不明白自动化打包的需求是啥,我是没遇到过。

def think(mdxbuilder, writemdict):
    print(脑壳疼)
1 Like

确实,writemdict才是真官方。

统一回复:我觉得我们需要区分标准和标准的实现。标准是准则,工具是标准的实现。严格说,标准是和writemdict一起发布的文档,而python版的writemdict只是标准的一个开源实现,是可以进一步优化的。而mdxbuilder3则是个黑盒,只是个工具,我们谈的goldendict支持的标准,不说没有关系,只能说恰好兼容。

建议你换到writemdict系列吧

谢谢!已经试过了。想看看mdxbuilder排序是否一致