lgmcw 发表于 2019-10-9 03:46:36

⚜【支持超大文件】Python MDX词典打包工具 2019-11-19更新

本帖最后由 lgmcw 于 2020-11-19 22:31 编辑

这帖target的是硬核玩家,希望对有需要的人有所帮助。代码比较乱,拖了好久都懒得整理,正好朋友又找我需要,趁着一鼓作气整理出来就正好也贴在论坛里吧。我这里不跟进你那边的环境调试了,如果有运行错误自己修一下(python3可参考楼下的修改经验);不过还是鼓励回帖反馈。对我以后做新人友好版有帮助。
以后我会做一款带GUI的,针对小白玩家。

入口文件,运行genMDX_ox4.py即可开始打包,附了一个牛津4的txt源码,我已经调试好,确保在我这里能工作,下载后可以直接运行用来测试程序。我的所有字典都是用这个程序打包,暂时没什么大问题。词条数最多我试过的简明英汉400多万词头;体积最大的OED,txt源码就有2.4G;这些打包都毫无压力。不过我这边还在用老古董python2.7;python3应该也能用,如果报错,可能需要自己debug一下。
genMDX_ox4.py is the entrance file you want to use in CMD/terminal. I've also enlcosed a OALD4_azure.txt for testing purpose.

https://i.loli.net/2019/10/28/PwoEkqBSizLfm1v.png

Windows下运行举例(需安装python):
https://i.loli.net/2019/10/28/YLaCXrWBlwjJThq.png

相较于原版我主要改了两个地方:
1. 在代码里,以前一个字典的key只能对应唯一个value。而MDict完全支持多个相同词头对应多个意思。所以我改了代码,让一个字典的key可以对应多个value。
2. 修改排序算法,原版是用的默认python排序,输出的文件在MDict简直不能查。GD勉强能查。

https://i.loli.net/2019/10/28/ILPyU7GZbfsJaO6.png

Python实现的txt转MDX代码:

**** Hidden Message *****欢迎提建议
⚜ 感兴趣可以看看我的其他字典,绝大部分都公开分享。






muyuzhth0 发表于 2021-7-23 14:38:37

python3.8.9调试成功!

做了如下修改:

1.genMDX_ox4.py

(1)注释掉前三行# -*- coding: GBK -*-# coding: utf-8# encoding=utf8,解决SyntaxError: encoding problem: GBK

(2)注释掉import sysreload(sys)sys.setdefaultencoding('utf-8'),python3不需要了

(3)打开、写入的文件加上当前路径(import os;current_path = os.path.dirname(__file__);current_path+"/OALD4_azure.txt",),解决No such file or directory:

(4)大神提示OALD4_azure.txt、about_OX4.txt使用utf-8格式。我试了下,两个文件转换为gb2312,代码修改为encoding='ANSI',也可以成功。另外,goldendict可以打开这两种编码的mdx,mdictpc版只能打开ANSI编码的mdx文件。

2.writemdict.py

修改 from cgi import escape为 from html import escape,解决cannot import name 'escape' from 'cgi' ,因为python3 cgi.py里面已经没有escape了。换成html,可以用,暂未发现问题。

nihaocool1980 发表于 2019-12-6 14:19:04

我的是Python3.7的,genMDX_ox4.py文件里面的
imp.reload(sys)改为:
import importlib
importlib.reload(sys)
然后删掉:sys.setdefaultencoding("utf-8")
测试通过。

但是生成的词典,用SourceEditor打不开,PC版GoldenDict,安卓版欧路可以打开。汇报完毕。

torresgoal 发表于 2023-3-9 22:28:50

好的,感谢老铁啊

brbr54 发表于 2023-3-8 14:04:03

感谢大神分享

xxv 发表于 2023-2-14 11:51:09

感谢楼主分享

0381yangyili 发表于 2022-12-30 17:34:07

谢谢高手无私分享这么好的教程

bangbang2021 发表于 2022-12-28 10:39:48

试试看,谢谢大佬

starll 发表于 2019-12-9 09:53:05

反馈个问题,直接跑大佬的源码,在mac上会报如下错误:
Traceback (most recent call last):
File "genMDX_ox4.py", line 14, in <module>
    reload(sys)
NameError: name 'reload' is not defined

解决:
注释掉文件line14和line15,即可

han198808 发表于 2019-10-9 08:44:33

谢谢L大,等了1年了。

SweetPanda 发表于 2023-3-29 17:40:05

谢谢大佬 都是好东西来晚了 就看到要关站

zh_lwm 发表于 2019-10-9 06:37:56

先收藏再研究,谢谢分享

skydan05 发表于 2019-10-9 06:38:46

震撼!谢谢!

Michael200803 发表于 2019-10-9 07:00:20

thanks a lot

喬治兄 发表于 2019-10-9 07:09:48

感謝 lgmcw 兄:
分享 【支持超大文件】Python打包MDX词典工具
非常需要此超大文件打包, 有的文件再合併後再用 mdxbuilder 打包MDX弄不出來
謝謝仁兄分享此重量級工具
{:4_104:}

coolfish52 发表于 2019-10-9 07:54:53

謝謝分享資源

csmpaul 发表于 2019-10-9 08:05:03

好东西,学习学习,谢谢楼主分享技术

999阿彌陀佛 发表于 2019-10-9 08:19:19

謝謝分享此重量級工具,感谢 !

cocowind 发表于 2019-10-9 08:28:06

学习,谢谢楼主分享技术,争取以后逐步从小白玩家进化到硬核玩家。

laiye 发表于 2019-10-9 09:06:01

谢谢l大,准备考研结束后就折腾折腾

wrscn 发表于 2019-10-9 09:07:57

非常感谢你的分享。

codex 发表于 2019-10-9 09:21:53

好东西 谢谢分享

oversky 发表于 2019-10-9 09:30:46

請問 mdxbuilder 目前能處理的文檔大概是多大?

HMPT 发表于 2019-10-9 10:06:07

还是可以指定输入文件的命令行方式不较好
比如 python genMDX.py source.txt about.txt

markwell 发表于 2019-10-9 10:14:53

emmm论坛有个excel转mdx的工具很不好用。。。

nullname 发表于 2019-10-9 16:54:33

感谢分享,看看,学习一下

lgmcw 发表于 2019-10-10 01:02:33

HMPT 发表于 2019-10-9 10:06
还是可以指定输入文件的命令行方式不较好
比如 python genMDX.py source.txt about.txt ...

这个其实改一下入口文件就能实现,应该不难的。

lgmcw 发表于 2019-10-10 01:03:25

本帖最后由 lgmcw 于 2019-10-10 01:58 编辑

oversky 发表于 2019-10-9 09:30
請問 mdxbuilder 目前能處理的文檔大概是多大?
你可以咨询一下@喬治兄 ,他可是屡屡遇到上限。

oversky 发表于 2019-10-10 07:27:37

lgmcw 发表于 2019-10-10 01:03
你可以咨询一下@喬治兄 ,他可是屡屡遇到上限。

谢谢您的指引。

littlewj 发表于 2019-10-10 11:24:07

很有用的工具

huwei007 发表于 2019-10-10 11:45:08

非常感谢分享!

lgmcw 发表于 2019-10-12 12:38:31

喬治兄 发表于 2019-10-9 07:09
感謝 lgmcw 兄:
分享
非常需要此超大文件打包, 有的文件再合併後再用 mdxbuilder 打包MDX弄不出來


兄弟可测试通过,此工具可还好用?

喬治兄 发表于 2019-10-12 12:48:11

lgmcw 发表于 2019-10-12 12:38
兄弟可测试通过,此工具可还好用?

謝謝 lgmcw 兄關心,小弟還未試呀,小弟會盡快試試,若有困難再向仁兄請益,謝謝啦!{:4_105:}

流星冲击 发表于 2019-10-12 15:33:11

本帖最后由 流星冲击 于 2019-10-12 15:37 编辑

1. 在代码里,以前一个字典的key只能对应唯一个value。而MDict完全支持多个相同词头对应多个意思。所以我改了代码,让一个字典的key可以对应多个value。

之前我和zzzz_sleep讨论过“以前一个字典的key只能对应唯一个value”的问题,他给出的方法是让类Mdict套壳的软件/app的作者去解决,例如用@@@link和a href=词头#锚跳相混合实现查询多个value的方式(具体zzzz_sleep给出的代码的用法我也忘记了,不过印象中还是基于一个key对应一个value的用法),现在楼主这个工具直接从代码层修改一个key对应多个value,这个要给个赞!

2. 修改排序算法,原版是用的默认python排序,输出的文件在MDict简直不能查。GD勉强能查。

我没用Mdict_PC来查询生成的mdx,对于GoldenDict,我看了某些帖子的说法,GD是全部提取mdx的headwords为一个缓存文件而不依赖原生的mdx算法的排序的,相同词头(例如a和A)是以类似多本词典联合查询单词的方式在一个页面内列出所有a和A词头的内容的,如果GD不依赖原生的mdx算法排序,楼主说“GD勉强能查”是单词基本能查询,不过不按照Azure排序(dot,doT,dOt...)这样排列下来?
手机端的app,以Azure排序,单本词典查询的模式下,安卓mdcit和平典app(平典app可能有些带符号的单词查不到什么的,平典以前的国庆版本就查不到楼主你用python生成的新牛津v2.3.0 beta的单词词头)查询是完美支持这种排序的,而不是原生A再到a这样下来。深蓝dict不能单本词典模式查词,所以不能看到多个a和A,a和A的内容会挤在一个界面,由于不能单本查词,ff大的朗文5++ v1.3.5的气球在滑动单词页面时不能固定在右下角(直接在单词页面最右下角,对于长内容,需要滑动到页面最底部)。欧路app未测试。
页: [1] 2 3 4 5 6 7 8 9 10
查看完整版本: ⚜【支持超大文件】Python MDX词典打包工具 2019-11-19更新