查看: 574|回复: 19
打印 上一主题 下一主题

[求助] 讨论 - mdx+mdd文件元数据查看及修改工具的实现

[复制链接]
  • TA的每日心情
    慵懒
    2020-5-3 16:00
  • 签到天数: 207 天

    [LV.7]常住居民III

    28

    主题

    690

    回帖

    1万

    积分

    状元

    Rank: 9Rank: 9Rank: 9

    积分
    12838
    跳转到指定楼层
    1
    发表于 2019-6-15 09:39:04 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
    本帖最后由 johannhuang 于 2020-2-15 20:03 编辑

    ## 背景

    我自己下载了几个.mdx文件,但是因为网络上共享资源可以被随意更改名字,所以分辨不清楚下载的几个不同名字的但是同样大小的.mdx是否实际上为同一个(只是因为由不同人共享,且各自命了不同的名字)或者是不同人加工过的不同版本词典。

    现在能找到的方法是:1.使用MDict软件导入,然后:About。2.使用GoldenDict导入,然后在词典管理界面查看元数据。

    所谓元数据,我指的主要是下图红框中的信息(当然最好是能读取,mdx文件中词条数量等其他元数据)



    ## 需求

    第一点的需求是,通过双击.mdx文件,可以实现类似于图片浏览器一样查看被点击mdx元数据,并具备修改的功能。
    第二点的需求是,通过工具可以修改直接修改单个词条的内容,而不是导出-修改-再打包的流程。

    第二点需求起因是,自己在使用某词典是,大部分词条排版时不错的,但是有一些词条则出现混乱状态,比如下图。


    ## 引用与思路

    在论坛搜索了一番没有找到相应的工具,但同时找到了一些值得参考的资源,比如

    Oeasy大的[[索引] GitHub 等地和词典有关的 [20171013]](https://www.pdawiki.com/forum/thread-16586-1-1.html?x=305325)
    [[资料] mdict mdx mdd 格式全公开,及开源代码](https://www.pdawiki.com/forum/thread-10619-1-1.html?x=305325)

    类似而值得参考的(但好像不能解决问题的)工具
    [[工具] Dict Source Editor【2014.08.24】](https://www.pdawiki.com/forum/thread-12972-1-1.html?x=305325)
    [[工具] Mdict Editor Tool v2.0.35 -- 多功能个性化词典制作工具](https://www.pdawiki.com/forum/thread-18986-1-1.html?x=305325)

    有一条思路是从开源的GoldenDict中提取相关内容,构建子项目。

    ## 求助

    但目前个人对于MDict的理解还是过于初级,所以希望得到高手指导。

    PS:题主使用macOS系统+Windows系统,希望使用C/C++或者JavaScript进行相关跨平台开发。

    本帖被以下淘专辑推荐:

  • TA的每日心情
    慵懒
    2023-3-2 10:50
  • 签到天数: 207 天

    [LV.7]常住居民III

    42

    主题

    1038

    回帖

    13万

    积分

    版主

    Rank: 10Rank: 10Rank: 10

    积分
    137827

    灌水大神章小蜜蜂章笑傲江湖章管理组专用章

    2
    发表于 2019-6-15 11:50:13 | 只看该作者
    比较两个 mdx 是否相同,用哈希值,比如 HashTab。
    文件管理软件都自带 比较 功能,比如 Total Commander。
  • TA的每日心情
    慵懒
    2020-5-3 16:00
  • 签到天数: 207 天

    [LV.7]常住居民III

    28

    主题

    690

    回帖

    1万

    积分

    状元

    Rank: 9Rank: 9Rank: 9

    积分
    12838
    3
     楼主| 发表于 2019-6-15 12:21:56 | 只看该作者
    deeke 发表于 2019-6-15 11:50
    比较两个 mdx 是否相同,用哈希值,比如 HashTab。
    文件管理软件都自带 比较 功能,比如 Total Commander。 ...

    谢谢,按照同样思路,我也找到了两个不错的比较文件软件HashCheck和Double Commander
  • TA的每日心情

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

    [LV.8]以坛为家I

    1

    主题

    703

    回帖

    1万

    积分

    状元

    Rank: 9Rank: 9Rank: 9

    积分
    12764
    4
    发表于 2019-6-15 12:36:56 | 只看该作者
    直接从mdx解析数据 ,然后diff生成html报告。一是词头比较差异,二是相同词头,对比释义差异。
  • TA的每日心情
    开心
    2019-6-23 00:02
  • 签到天数: 18 天

    [LV.4]偶尔看看III

    43

    主题

    391

    回帖

    5万

    积分

    状元

    Rank: 9Rank: 9Rank: 9

    积分
    54723
    5
    发表于 2019-6-15 16:56:00 | 只看该作者
    用论坛里面那个“多功能mdx转换器”,它有一个功能就是直接修改title和description的。直接修改一个词条的解释比较复杂一点,好像没见过什么工具实现了的。
  • TA的每日心情
    慵懒
    2020-5-3 16:00
  • 签到天数: 207 天

    [LV.7]常住居民III

    28

    主题

    690

    回帖

    1万

    积分

    状元

    Rank: 9Rank: 9Rank: 9

    积分
    12838
    6
     楼主| 发表于 2019-6-15 19:07:27 | 只看该作者
    ogrishman 发表于 2019-6-15 16:56
    用论坛里面那个“多功能mdx转换器”,它有一个功能就是直接修改title和description的。直接修改一个词条的 ...

    你说的是PyGlossary么,我用你说的“多功能mdx转换器”、“mdx转换器”、“多功能转换器”搜索不到任何东西
  • TA的每日心情
    慵懒
    2022-3-16 01:47
  • 签到天数: 389 天

    [LV.9]以坛为家II

    8

    主题

    753

    回帖

    2099

    积分

    解元

    Rank: 5Rank: 5

    积分
    2099
    7
    发表于 2019-6-15 20:01:30 | 只看该作者
    deeke 发表于 2019-6-15 11:50
    比较两个 mdx 是否相同,用哈希值,比如 HashTab。
    文件管理软件都自带 比较 功能,比如 Total Commander。 ...

    有些只是单纯改了mdx信息重新打包,一样会修改hash。这对于辨识版本造成了极大困难
  • TA的每日心情
    慵懒
    2023-3-2 10:50
  • 签到天数: 207 天

    [LV.7]常住居民III

    42

    主题

    1038

    回帖

    13万

    积分

    版主

    Rank: 10Rank: 10Rank: 10

    积分
    137827

    灌水大神章小蜜蜂章笑傲江湖章管理组专用章

    8
    发表于 2019-6-15 21:52:17 | 只看该作者
    thresh 发表于 2019-6-15 20:01
    有些只是单纯改了mdx信息重新打包,一样会修改hash。这对于辨识版本造成了极大困难 ...

    只是单纯改了 mdx 信息?那辨识啥,直接用啊。
  • TA的每日心情
    慵懒
    2022-3-16 01:47
  • 签到天数: 389 天

    [LV.9]以坛为家II

    8

    主题

    753

    回帖

    2099

    积分

    解元

    Rank: 5Rank: 5

    积分
    2099
    9
    发表于 2019-6-16 02:01:49 | 只看该作者
    deeke 发表于 2019-6-15 21:52
    只是单纯改了 mdx 信息?那辨识啥,直接用啊。

    改了之后你不知道两者是不是有区别啊~有的以为是新版,实际没改动,有的改动了,但是没更新信息。这种不规范搞得就头大;额
  • TA的每日心情

    2020-8-15 10:40
  • 签到天数: 146 天

    [LV.7]常住居民III

    23

    主题

    363

    回帖

    3万

    积分

    状元

    Rank: 9Rank: 9Rank: 9

    积分
    39693
    10
    发表于 2019-6-16 05:02:01 | 只看该作者
    别费力气,不可实现

    主要原因:单词索引

    MDX 根据单词索引快速定位单词位置,读取单词数据。
    修改 META 或单词内容,都会影响后续单词数据位置,也就是前面单词的内容长度改变,后面单词的数据位置必然改变,从而引起索引全面改动。


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

    [LV.7]常住居民III

    28

    主题

    690

    回帖

    1万

    积分

    状元

    Rank: 9Rank: 9Rank: 9

    积分
    12838
    11
     楼主| 发表于 2019-6-16 10:26:09 | 只看该作者
    zzzz_sleep 发表于 2019-6-16 05:02
    别费力气,不可实现

    主要原因:单词索引

    词条改变会影响索引好理解,但是title和description改变应该不会影响索引吧,只是我的一点猜想,我还没来得及细致研究。您是研究过MDict的存储格式的么?
  • TA的每日心情
    开心
    2019-6-23 00:02
  • 签到天数: 18 天

    [LV.4]偶尔看看III

    43

    主题

    391

    回帖

    5万

    积分

    状元

    Rank: 9Rank: 9Rank: 9

    积分
    54723
    12
    发表于 2019-6-16 15:06:29 | 只看该作者
    johannhuang 发表于 2019-6-15 19:07
    你说的是PyGlossary么,我用你说的“多功能mdx转换器”、“mdx转换器”、“多功能转换器”搜索不到任何东 ...



    不是你说的那个,是这个,我找了一下我的计算机上刚好有,就传上来看有没有人需要。

    链接: https://pan.baidu.com/s/1yqbpCHzuNPm488uEJHyLBA
    提取码: iwb9

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

    [LV.7]常住居民III

    28

    主题

    690

    回帖

    1万

    积分

    状元

    Rank: 9Rank: 9Rank: 9

    积分
    12838
    13
     楼主| 发表于 2019-6-16 18:37:45 | 只看该作者
    ogrishman 发表于 2019-6-16 15:06
    不是你说的那个,是这个,我找了一下我的计算机上刚好有,就传上来看有没有人需要。

    链接: https://pa ...

    多谢!感觉这个工具做的还挺好的,都是小工具类

    该用户从未签到

    11

    主题

    118

    回帖

    2067

    积分

    解元

    Rank: 5Rank: 5

    积分
    2067
    14
    发表于 2019-6-17 09:23:25 | 只看该作者
    johannhuang 发表于 2019-6-16 10:26
    词条改变会影响索引好理解,但是title和description改变应该不会影响索引吧,只是我的一点猜想,我还没来 ...

    会影响的,我试过用16进制编辑工具改title,可以更换原title的字母,但不能新增或删除字符,比如title:collins,只能改成title:bollins
  • TA的每日心情
    慵懒
    2020-5-3 16:00
  • 签到天数: 207 天

    [LV.7]常住居民III

    28

    主题

    690

    回帖

    1万

    积分

    状元

    Rank: 9Rank: 9Rank: 9

    积分
    12838
    15
     楼主| 发表于 2019-6-17 09:47:51 | 只看该作者
    5dhtml 发表于 2019-6-17 09:23
    会影响的,我试过用16进制编辑工具改title,可以更换原title的字母,但不能新增或删除字符,比如title:co ...

    哦哦,看来编译过的东西要动起来确实危险...
  • TA的每日心情
    开心
    2019-6-23 00:02
  • 签到天数: 18 天

    [LV.4]偶尔看看III

    43

    主题

    391

    回帖

    5万

    积分

    状元

    Rank: 9Rank: 9Rank: 9

    积分
    54723
    16
    发表于 2019-6-17 09:56:06 | 只看该作者
    5dhtml 发表于 2019-6-17 09:23
    会影响的,我试过用16进制编辑工具改title,可以更换原title的字母,但不能新增或删除字符,比如title:co ...

    这是你的hex editor的问题吧,另外是不是文件正在使用中,不然mdx就是一个普通的文件,你随便乱改都可以,无非就是改的不能使用了,它怎么会让你“不能新增或者删除字符”呢?

    该用户从未签到

    11

    主题

    118

    回帖

    2067

    积分

    解元

    Rank: 5Rank: 5

    积分
    2067
    17
    发表于 2019-6-17 15:12:23 | 只看该作者
    ogrishman 发表于 2019-6-17 09:56
    这是你的hex editor的问题吧,另外是不是文件正在使用中,不然mdx就是一个普通的文件,你随便乱改都可以 ...

    我的意思就是更改后文件不能使用了,词典无法把它识别为合法mdx文件了
  • TA的每日心情
    开心
    2019-6-23 00:02
  • 签到天数: 18 天

    [LV.4]偶尔看看III

    43

    主题

    391

    回帖

    5万

    积分

    状元

    Rank: 9Rank: 9Rank: 9

    积分
    54723
    18
    发表于 2019-6-17 16:52:24 | 只看该作者
    5dhtml 发表于 2019-6-17 15:12
    我的意思就是更改后文件不能使用了,词典无法把它识别为合法mdx文件了

    哦哦,在字典的描述信息后面有一个针对这个描述信息的adler32计算出的hash,直接修改title和description之后,还要重新计算一下这个hash,要不然有可能有些词典软件会校验之后认为词典文件已经损坏。

    该用户从未签到

    11

    主题

    118

    回帖

    2067

    积分

    解元

    Rank: 5Rank: 5

    积分
    2067
    19
    发表于 2019-6-17 21:44:58 | 只看该作者
    ogrishman 发表于 2019-6-17 16:52
    哦哦,在字典的描述信息后面有一个针对这个描述信息的adler32计算出的hash,直接修改title和description之 ...

    你是说,mdx文件里有个hash值,修改内容以后计算一下修改后的文件hash,再修改里边那个数值?那修改里边的hash数值后,hash值岂不是又变了?
  • TA的每日心情
    开心
    2019-6-23 00:02
  • 签到天数: 18 天

    [LV.4]偶尔看看III

    43

    主题

    391

    回帖

    5万

    积分

    状元

    Rank: 9Rank: 9Rank: 9

    积分
    54723
    20
    发表于 2019-6-17 22:27:20 | 只看该作者
    5dhtml 发表于 2019-6-17 21:44
    你是说,mdx文件里有个hash值,修改内容以后计算一下修改后的文件hash,再修改里边那个数值?那修改里边的 ...

    我说的这个hash是针对描述信息的hash,不是针对整个文件的。楼主贴出来的链接里不是有mdx的结构么,就是dict info string后面的adler32 checksum
    https://bitbucket.org/xwang/mdict-analysis/src/default/MDX.svg