掌上百科 - PDAWIKI

 找回密码
 免费注册

QQ登录

只需一步,快速开始

查看: 7666|回复: 252

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

  [复制链接]
  • TA的每日心情
    奋斗
    2020-11-15 11:37
  • 签到天数: 249 天

    [LV.8]以坛为家I

    发表于 2019-10-9 03:46:36 | 显示全部楼层 |阅读模式
    本帖最后由 lgmcw 于 2020-11-19 22:31 编辑
    , F2 Y$ w' h* Y) @# K- V% b  }4 a& K" f0 y
    这帖target的是硬核玩家,希望对有需要的人有所帮助。代码比较乱,拖了好久都懒得整理,正好朋友又找我需要,趁着一鼓作气整理出来就正好也贴在论坛里吧。我这里不跟进你那边的环境调试了,如果有运行错误自己修一下(python3可参考楼下的修改经验);不过还是鼓励回帖反馈。对我以后做新人友好版有帮助。* m& c4 m6 R/ u* u
    以后我会做一款带GUI的,针对小白玩家。7 ]+ u$ W( {7 }2 {# r$ n

    ' D' e( c$ T; D% }  x! N) `2 v入口文件,运行genMDX_ox4.py即可开始打包,附了一个牛津4的txt源码,我已经调试好,确保在我这里能工作,下载后可以直接运行用来测试程序。我的所有字典都是用这个程序打包,暂时没什么大问题。词条数最多我试过的简明英汉400多万词头;体积最大的OED,txt源码就有2.4G;这些打包都毫无压力。不过我这边还在用老古董python2.7;python3应该也能用,如果报错,可能需要自己debug一下。5 j. J( z5 e1 F. p; y
    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. 7 P+ n- N" n8 e  j

    : I7 f/ v8 X9 U/ e% p9 f1 r/ S% d( F. N  p* A8 H
    2 V) n& h0 F, q8 [
    Windows下运行举例(需安装python):. ]8 e( U& Y2 x# ?1 R$ C
    ; P4 ~2 k+ ^+ ?, ^
    6 l+ J3 C% E/ L' V. m7 |/ G
    相较于原版我主要改了两个地方:
    - Y; F! ]* O5 n) ^' `1. 在代码里,以前一个字典的key只能对应唯一个value。而MDict完全支持多个相同词头对应多个意思。所以我改了代码,让一个字典的key可以对应多个value% |; Q4 g' U/ l, U* i9 t
    2. 修改排序算法,原版是用的默认python排序,输出的文件在MDict简直不能查。GD勉强能查。
    4 q  c2 W  @, ~5 x  x6 R% h. [0 `9 |: v  C# f& a4 @

    & {* v6 \" i  F" u; r  X
    # I: J3 Y: G7 j7 W" v3 T$ c; B1 x8 uPython实现的txt转MDX代码:. v9 ?" u' z- F1 C+ h& P
    0 {# s2 ^: K) |, j( d
    游客,如果您要查看本帖隐藏内容请回复
    欢迎提建议
    - Z0 ~  E' E) ^; m  y5 i⚜ 感兴趣可以看看我的其他字典,绝大部分都公开分享。) z* T; v& O, v) |2 E8 w

    / S( w$ |0 z* d4 \0 Y# q/ @; {9 k9 U% R" |# j
    " T/ B: o5 m2 G, x& o

    7 H! z  _$ K  O$ V( L, {/ J* a) |6 P
    ) V8 Y! T# g$ u' a% {# X, _+ N! z$ S5 x1 D+ M

    评分

    5

    查看全部评分

    本帖被以下淘专辑推荐:

  • TA的每日心情
    慵懒
    2021-2-18 15:02
  • 签到天数: 512 天

    [LV.9]以坛为家II

    发表于 2019-10-9 08:44:33 | 显示全部楼层
    谢谢L大,等了1年了。
  • TA的每日心情
    郁闷
    昨天 19:13
  • 签到天数: 420 天

    [LV.9]以坛为家II

    发表于 2019-12-6 14:19:04 | 显示全部楼层
    我的是Python3.7的,genMDX_ox4.py文件里面的
    2 F- U+ B2 `6 }6 C2 p( w* V* ~" aimp.reload(sys)改为:
    - c, }* y" {9 h. Y* V6 z/ |3 Yimport importlib
    ! g" @' X/ |  ^+ R8 k( |* fimportlib.reload(sys)
    , K% y# q6 f, o3 @# Y" V. V6 k然后删掉:sys.setdefaultencoding("utf-8")3 ^5 R# E; O6 G2 t, W  y( j9 y; ^
    测试通过。
    : ^  Y0 f6 M0 ^+ O; x# g; P! G' n, P  |
    但是生成的词典,用SourceEditor打不开,PC版GoldenDict,安卓版欧路可以打开。汇报完毕。

    评分

    1

    查看全部评分

  • TA的每日心情
    开心
    2018-8-8 03:13
  • 签到天数: 1 天

    [LV.1]初来乍到

    发表于 2019-10-9 07:09:48 | 显示全部楼层
    感謝 lgmcw 兄:/ M6 G* G5 W- g# l' D  M4 z1 V. h
    分享
    【支持超大文件】Python打包MDX词典工具

    1 \9 c0 Q( G/ A非常需要此超大文件打包, 有的文件再合併後再用 mdxbuilder 打包MDX弄不出來
    7 P  c% Q/ Y$ q謝謝仁兄分享此重量級工具
    - R* N8 i# m* c" ^5 Y4 T3 p) R2 B
  • TA的每日心情
    擦汗
    昨天 12:44
  • 签到天数: 66 天

    [LV.6]常住居民II

    发表于 2020-9-21 16:42:15 | 显示全部楼层
    超大文件打包, 有的文件再合併後再用 mdxbuilder 打包MDX弄不出來% O1 y# V3 S' o
    謝謝仁兄分享此重量級工具
  • TA的每日心情
    无聊
    昨天 11:22
  • 签到天数: 108 天

    [LV.6]常住居民II

    发表于 2020-9-19 16:44:14 | 显示全部楼层
    非常有用的资源 现在才发现 老方法的限制好多 感谢分享
  • TA的每日心情
    擦汗
    2020-6-14 13:39
  • 签到天数: 159 天

    [LV.7]常住居民III

    发表于 2019-12-9 09:53:05 | 显示全部楼层
    反馈个问题,直接跑大佬的源码,在mac上会报如下错误:
    6 e2 D1 ]0 p: b/ LTraceback (most recent call last):# }/ M7 H0 N( |# R) [9 U
      File "genMDX_ox4.py", line 14, in <module>( H1 ^& P4 g0 w% j
        reload(sys)
    8 q$ l& q' w% U2 }$ k+ g5 h5 b0 i7 HNameError: name 'reload' is not defined& f0 a; T2 t# I; Y& B; E$ ?1 D* u
    2 {/ s3 _. ?6 Q" C$ @- {& D, k
    解决:' c2 s$ {, h% M, D
    注释掉文件line14和line15,即可

    点评

    应该是python3和python2.7的区别  发表于 2019-12-9 10:15

    评分

    1

    查看全部评分

  • TA的每日心情
    开心
    2019-3-26 21:36
  • 签到天数: 178 天

    [LV.7]常住居民III

    发表于 2019-10-12 15:33:11 | 显示全部楼层
    本帖最后由 流星冲击 于 2019-10-12 15:37 编辑
    & r! T1 f$ s$ C
    - C- s( U, m3 K# S) |# k: ~1. 在代码里,以前一个字典的key只能对应唯一个value。而MDict完全支持多个相同词头对应多个意思。所以我改了代码,让一个字典的key可以对应多个value。
    4 B" w6 G% t, f! e& c' s  ?5 a8 [- [! H. {) i. y9 x
    之前我和zzzz_sleep讨论过“以前一个字典的key只能对应唯一个value”的问题,他给出的方法是让类Mdict套壳的软件/app的作者去解决,例如用@@@link和a href=词头#锚跳相混合实现查询多个value的方式(具体zzzz_sleep给出的代码的用法我也忘记了,不过印象中还是基于一个key对应一个value的用法),现在楼主这个工具直接从代码层修改一个key对应多个value,这个要给个赞!% f' P2 g1 u4 I' [. B/ e3 U

    3 ^6 u! T4 i$ U* e/ W9 Y6 Z2. 修改排序算法,原版是用的默认python排序,输出的文件在MDict简直不能查。GD勉强能查。
    : B* r& {2 ^8 X! s* Q3 |0 F& ^7 ]) f8 ]) M1 J$ X# p2 t
    我没用Mdict_PC来查询生成的mdx,对于GoldenDict,我看了某些帖子的说法,GD是全部提取mdx的headwords为一个缓存文件而不依赖原生的mdx算法的排序的,相同词头(例如a和A)是以类似多本词典联合查询单词的方式在一个页面内列出所有a和A词头的内容的,如果GD不依赖原生的mdx算法排序,楼主说“GD勉强能查”是单词基本能查询,不过不按照Azure排序(dot,doT,dOt...)这样排列下来?
    6 v' K/ r$ V5 B( M) l手机端的app,以Azure排序,单本词典查询的模式下,安卓mdcit和平典app(平典app可能有些带符号的单词查不到什么的,平典以前的国庆版本就查不到楼主你用python生成的新牛津v2.3.0 beta的单词词头)查询是完美支持这种排序的,而不是原生A再到a这样下来。深蓝dict不能单本词典模式查词,所以不能看到多个a和A,a和A的内容会挤在一个界面,由于不能单本查词,ff大的朗文5++ v1.3.5的气球在滑动单词页面时不能固定在右下角(直接在单词页面最右下角,对于长内容,需要滑动到页面最底部)。欧路app未测试。
  • TA的每日心情
    无聊
    2020-12-19 21:10
  • 签到天数: 21 天

    [LV.4]偶尔看看III

    发表于 2019-10-9 09:06:01 | 显示全部楼层
    谢谢l大,准备考研结束后就折腾折腾
  • TA的每日心情
    开心
    2020-1-5 08:04
  • 签到天数: 50 天

    [LV.5]常住居民I

    发表于 2019-10-9 08:19:19 | 显示全部楼层
    謝謝分享此重量級工具,感谢 !

    点评

    如果是古籍文献,有可能需要用UTF-16。要自己摸索一下修改入口文件。  发表于 2019-10-10 01:04
  • TA的每日心情
    开心
    2021-1-28 08:43
  • 签到天数: 221 天

    [LV.7]常住居民III

    发表于 2019-10-9 06:37:56 | 显示全部楼层
    先收藏再研究,谢谢分享
  • TA的每日心情

    2020-2-6 07:26
  • 签到天数: 129 天

    [LV.7]常住居民III

    发表于 2019-10-9 07:00:20 | 显示全部楼层
    thanks a lot
  • TA的每日心情
    无聊
    2021-1-27 08:38
  • 签到天数: 210 天

    [LV.7]常住居民III

    发表于 2019-10-9 07:54:53 | 显示全部楼层
    謝謝分享資源
  • TA的每日心情
    开心
    昨天 07:59
  • 签到天数: 1228 天

    [LV.10]以坛为家III

    发表于 2019-10-9 08:05:03 | 显示全部楼层
    好东西,学习学习,谢谢楼主分享技术
  • TA的每日心情
    开心
    2020-12-16 22:43
  • 签到天数: 569 天

    [LV.9]以坛为家II

    发表于 2019-10-9 08:28:06 | 显示全部楼层
    学习,谢谢楼主分享技术,争取以后逐步从小白玩家进化到硬核玩家。
  • TA的每日心情
    奋斗
    昨天 10:19
  • 签到天数: 580 天

    [LV.9]以坛为家II

    发表于 2019-10-9 09:07:57 | 显示全部楼层
    非常感谢你的分享。
  • TA的每日心情
    奋斗
    前天 11:39
  • 签到天数: 291 天

    [LV.8]以坛为家I

    发表于 2019-10-9 09:21:53 | 显示全部楼层
    好东西 谢谢分享
  • TA的每日心情
    无聊
    昨天 13:11
  • 签到天数: 786 天

    [LV.10]以坛为家III

    发表于 2019-10-9 09:30:46 | 显示全部楼层
    請問 mdxbuilder 目前能處理的文檔大概是多大?
  • TA的每日心情

    2019-9-20 08:37
  • 签到天数: 214 天

    [LV.7]常住居民III

    发表于 2019-10-9 10:06:07 | 显示全部楼层
    还是可以指定输入文件的命令行方式不较好
    % O( o* {- `" K9 B比如 python genMDX.py source.txt about.txt
  • TA的每日心情

    6 天前
  • 签到天数: 270 天

    [LV.8]以坛为家I

    发表于 2019-10-9 10:14:53 | 显示全部楼层
    emmm论坛有个excel转mdx的工具很不好用。。。
  • TA的每日心情

    2020-7-9 11:09
  • 签到天数: 517 天

    [LV.9]以坛为家II

    发表于 2019-10-9 16:54:33 | 显示全部楼层
    感谢分享,看看,学习一下
  • TA的每日心情
    奋斗
    2020-11-15 11:37
  • 签到天数: 249 天

    [LV.8]以坛为家I

     楼主| 发表于 2019-10-10 01:02:33 | 显示全部楼层
    HMPT 发表于 2019-10-9 10:06
    ; k' Q/ A, j) _. p0 l还是可以指定输入文件的命令行方式不较好5 L7 @: {: q! d' y* a2 V5 }. R+ y
    比如 python genMDX.py source.txt about.txt ...
    - Y4 C5 J2 a2 r  L/ N6 n
    这个其实改一下入口文件就能实现,应该不难的。
  • TA的每日心情
    奋斗
    2020-11-15 11:37
  • 签到天数: 249 天

    [LV.8]以坛为家I

     楼主| 发表于 2019-10-10 01:03:25 | 显示全部楼层
    本帖最后由 lgmcw 于 2019-10-10 01:58 编辑
    $ g" _. M3 L0 j& Q
    oversky 发表于 2019-10-9 09:30
    . j; O7 }/ l6 @- {" Y請問 mdxbuilder 目前能處理的文檔大概是多大?

    " a. o. \$ F  l4 Y2 x- R6 `- K5 d) ]你可以咨询一下@喬治兄 ,他可是屡屡遇到上限。
  • TA的每日心情
    无聊
    昨天 13:11
  • 签到天数: 786 天

    [LV.10]以坛为家III

    发表于 2019-10-10 07:27:37 | 显示全部楼层
    lgmcw 发表于 2019-10-10 01:03& c. p/ O2 S% m% U- L  N4 ?
    你可以咨询一下@喬治兄 ,他可是屡屡遇到上限。

    9 U0 A  E% m4 J9 c! ?0 q谢谢您的指引。

    该用户从未签到

    发表于 2019-10-10 11:24:07 | 显示全部楼层
    很有用的工具
  • TA的每日心情
    开心
    2021-2-25 08:23
  • 签到天数: 116 天

    [LV.6]常住居民II

    发表于 2019-10-10 11:45:08 | 显示全部楼层
    非常感谢分享!
  • TA的每日心情
    奋斗
    2020-11-15 11:37
  • 签到天数: 249 天

    [LV.8]以坛为家I

     楼主| 发表于 2019-10-12 12:38:31 | 显示全部楼层
    喬治兄 发表于 2019-10-9 07:09
    4 r% }% K/ M% O( E' ?$ u感謝 lgmcw 兄:
    : K. z2 t: P7 u分享  0 ?5 d) y6 c, V+ _9 S% m; e
    非常需要此超大文件打包, 有的文件再合併後再用 mdxbuilder 打包MDX弄不出來
    + N& _4 B, g. P9 R2 a2 N
    兄弟可测试通过,此工具可还好用?
  • TA的每日心情
    开心
    2018-8-8 03:13
  • 签到天数: 1 天

    [LV.1]初来乍到

    发表于 2019-10-12 12:48:11 | 显示全部楼层
    lgmcw 发表于 2019-10-12 12:38
    4 L5 z' ?4 p: D, d$ c9 K; q兄弟可测试通过,此工具可还好用?

    - A0 W. b1 g" K! t! K謝謝 lgmcw 兄關心,小弟還未試呀,小弟會盡快試試,若有困難再向仁兄請益,謝謝啦!
    您需要登录后才可以回帖 登录 | 免费注册

    本版积分规则

    顶部qrcode底部
    关注掌上百科官方微信公众号送积分
    关注掌上百科官方微信公众号
    关注微信公众号 pdawiki,获取邀请码,看文抢积分,抽奖得浮云! Follow our Wechat official account "pdawiki", get invitation codes, and play the lottery to earn points (积分)!

    小黑屋|手机版|Archiver|PDAWIKI |网站地图

    GMT+8, 2021-3-7 00:47 , Processed in 0.040280 second(s), 11 queries , MemCache On.

    Powered by Discuz! X3.4

    Copyright © 2001-2020, Tencent Cloud.

    快速回复 返回顶部 返回列表