确实,我试了下大文件的导出还是有问题。我只看了大小,之前导出的图片只有几十M,现在是1.2G,我以为导出完整了,没注意到图片打不开,抱歉误导你了。。
问题解决了吗 大佬
仍然有问题。
卖词典的我联系过了,没给答复。用mdict查询分界点的前一个词闪退,后方的图片是无法导出但是正常显示。不知道为什么原作者的打包会出问题。
大佬 能提取吗 可以给报酬
我没这个能力,你联系原作者就行。
原作者是谁啊 有途径吗
谢谢你
啊
读了遍mdict-analysis源码,基本搞明白了,代码个人认为没问题。其实中间部分有十五个记录数据块出错了(因此还有十五张图无法提取),跳过这些错误的记录数据块就行了。
错误在于记录数据块(Record Data Block)和记录索引块(Record Index Block)记录的文件大小不符,理应是一致的。
鬼知道这作者打包的时候怎么出错的。也有种可能是莫名奇妙地少了或者被故意删了几个字节。mdd的结构是紧密排列的,一点更改都能导致后方全局出错,所以拿mdict-analysis只能正常导出前面的少部分图片。因为mdict-analysis没有容错机制,把1186数据块开始,就没有跳过它而是作为一部分。
挖个坟,最近也研究了下这个 mdd。这个文件总共 6 万多个记录块,我扫了一遍,发现有问题的块差不多 200 个。这些块的头 16 字节有问题,没法正常读。
但最关键的是,这些块没有像 mdict v3 格式常见的那样加密。跳过那 16 个字节的错误块头,后面紧跟着就是 78 9C,也就是标准的 zlib 数据流。
所以可以直接解压。解压后发现,在数据流的末尾被提前截断了。。感觉是打包工具的 bug,写坏了块头,数据也没写完整。
好在没加密,只是截断。大部分图片的问题是,数据流在写入 PNG 最后的 IEND 数据块时被截断了,导致 IEND 块不完整。这个只要补全就行了。
剩下 7 张情况复杂点,因为截断点在 IDAT(图像数据)块内部:
009482-جلع.png: 数据流在 IDAT 块的 CRC 校验码那里被截断了,导致校验码和后面的 IEND 块都没了。根据前面的图像数据,重新计算 CRC 并补上 IEND 即可。
038488-معفى.png, 054750-مذاع.png, 043712-فاقم.png, 044393-فول.png: 这 4 个是 zlib 数据流本身在结尾的 Adler-32 校验码那里被截断了。同样根据已有的数据重算 Adler-32,再补上 PNG 需要的 CRC 和 IEND。
004720-تبقل.png, 044388-متفوق.png: 这两个是压缩数据流的本体就缺了最后 2 个字节。我写了个脚本把 65536 种可能都试了一遍。有意思的是,所有能成功解压的有效组合,还原出的像素数据都完全一致。随便选一组补上,再依次补全 zlib 的 Adler-32 校验、PNG 的 CRC 校验和 IEND 块,这张图就无损恢复了。
结论就是,所有图片数据其实都在,都能完美修复。
能这么逐个分析错误原因太厉害了,不是对压缩数据格式和mdd,png结构都很了解做不到的。
《阿拉伯汉语词典》现在可以直接把它ocr了,识别率貌似还不错(阅读顺序有点混乱),不过我自己没学过阿拉伯文,所以没有贸然从事。
这是一个阿拉伯语-汉语词典的页面。根据您的要求,我将分别提取右栏和左栏的文字内容。
页面页眉:
右:دبق (词根)
中:350 (页码)
左:دحج (词根)
右栏 (Right Column)
阅读顺序:阿拉伯语在右侧,对应的中文释义在左侧。
دَبَقَ - دَبْقاً الطّيرَ: صَادَه بالدِبْق
(用鸟胶) 粘鸟دَبِقَ - دَبَقاً به: لِصِقَ
粘住,粘着,依附دَبَّقَه : تَلَزَّجَه
粘,粘着,粘住— الطّيرَ
用(鸟胶)捕鸟— على …
取得,弄到,找到تَدَبَّقَ بالعَرَقِ
(由于出汗而) 粘住— الشيءُ
(粘在胶上) 被捕,被捉— بالشيء
迷恋,恋慕انْدَبَقَ
粘附,贴上دِبْق / دَابُوق / دَبُوقَاء : مُخَّيط لصيد العَصَافِير (م)
粘鸟胶دَبِق : لَزِج
粘的,有粘性的دَبَكَ - دَبْكاً ودَبَّكَ
跳踏歌舞دَبْكَة
硬物落地声,(拟音语) 咚咚— / رَقْصُ الـ
踏歌舞 (黎巴嫩民间舞蹈)دَبَلَ - دَبْلاً ودُبُولاً الأرضَ: سَمَّدَها
施肥دَبَّلَتْه الدُّبُولُ
灾难降临دَبْل ج دُبُول: وَرَم في غُدَّة لِمْفاوِيَّة
[医] 瘰疬,[医] 核疾طَاعُونٌ دَبْلِيّ : طَاعُون بَشَرِيّ
[医] 腹股沟淋巴结炎;鼠疫,淋巴腺鼠疫دَبْلَة ج دُبَل ودُبْل: كُتْلة
一块,一团دَبْلَة ج دِبَل (م) ودِبْلَة ج دِبَل (س): فَتْحَة / خَاتِم بِلاَ فَصّ كَأَنه حَلْقَة
指环,戒指—: سَاعَة الجَيْب (م)
(挂表的) 表环دَبْلاَن / دَبُولاَن
白印花布,衬衣料,粗制的竹布دُبَال : سَمَاد
肥料دُبَّان (س): ذُبَّان
苍蝇دِبْلُوم diploma / دِبْلُومَة ج دِبْلُومَات
执照,许可证;文凭,毕业证书
左栏 (Left Column)
此栏接续右栏内容
دِبْلُومَاسِي / دِبِيلُومَاسِي ج دَبَالِسَة / دِبْلُومَاتِيّ (diplomat)
外交官,外交家;外交的,有外交手腕的,外国使节的دِبْلُومَاسِيَّة
外交,外交手腕、策略、机巧دَبَى الواحدة دَبَاة: حُورِيَّات الجَرَاد
蝗蝻دَثَرَ - دُثُورًا الرسمُ وانْدَثَر: امَّحَى
痕迹消灭,被擦去,拭去,抹去,揩去دَثَّرَه : أَهْلَكَه
使消灭,抹去,使湮没— ه: غَطَّاه
给盖上毯子تَدَثَّر بكذا
蒙上,盖上,包上,围上دُثُور / اِنْدِثَار : اِمِّحَاء
消逝,消灭,湮没الـ والتَجَدُّد (في علم الأحياء) / الأَيْض
[生] 新陈代谢,代谢دَثْر ج دُثُور
财富,财产,资源دِثَار : غِطَاء أو مِعْطَف
毛毯;被子;外衣,外套,长袍داثِر ج دَوَاثِر: هالك
消失的,看不见的دَجَّجَه وتَدَجَّجَ بالسلاح
全副武装,全身披挂دَجّ : سُمُنّ مُغَرِّد
[动] 画眉دُجَّة : ظُلْمَة شَدِيدة
极暗,漆黑دَجَاج ودَجَاج ودِجَاج ج دُجُج الواحدة دَجَاجَة ج دَجَاجَات: طُيُور داجِنَة
鸡— فِرْعَوْن أو الوادِي أو السُّودَان (س): غِرْغِر
珠鸡— الهِنْد أو الحَبَش (س)
火鸡,吐绶鸡دَجَاجَة ج دَجَاجَات: فَرْخَة (م)
母鸡كَوْكَبَة الـ
[天] 天鹅座دَجَاجِيّ : مختصّ بالدَجَاج
似家禽的—: بائِعُ الطُيُورِ الدَاجِنَة / فَرَاْرجِي (م)
卖鸡鸭的دَيْجُوج ودَجُوجِيّ ج دَيَاجِيجُ: ليل مُظْلِم
黑夜مُدَجَّج بالسلاح
全副武装,全身披挂的




