掌上百科 - PDAWIKI

 找回密码
 免费注册

QQ登录

只需一步,快速开始

查看: 3120|回复: 22

[工具] 从mdx提取指定的词条,并打包成mdx[已失效]

[复制链接]
  • TA的每日心情
    奋斗
    2022-6-1 19:02
  • 签到天数: 377 天

    [LV.9]以坛为家II

    发表于 2019-8-11 19:40:53 | 显示全部楼层 |阅读模式
    本帖最后由 simonfire 于 2021-2-10 11:15 编辑
    $ p& r8 U! G0 z7 P/ ]4 v+ a0 e
    + m4 e! K& b- |用python写的一个小工具,解析和打包都是用的zzzz_sleep的 mdict-utils。
    " y; ~0 @- @% k' c- q  J4 Z* u: [) z用法:把需要提取的单词制成一行一个的格式,命名为input.txt(文件编码有要求,必须是UTF-8(无BOM,也叫无签名),要提取的mdx文件命名为input.mdx,和解压的exe文件放在同一目录,双击运行exe文件就行了。正常运行的话,会生成名为output的txt和mdx文件。
    ; `1 f) W+ U) l1 z8 `目前只进行了简单的测试,有使用问题后续再修复吧) N- {& d5 {. K& I7 E
    加了程序运行时打印正在提取的单词,你可以知道个大概的进度
    0 N1 h0 w4 @' n8 m) @. ]3 r, F" e然后现在程序是单线程运行,所以速度很慢(目测1秒才2-3个单词),最好不要弄太多词条去提取,后续可能会增加多线程,看情况吧+ v' C: d* S' p# V4 `
    下载地址,度盘:
    6 t6 v, J7 I+ n6 Y+ B链接:https://pan.baidu.com/s/11nIBxwL5-CYZhFfiK9njyw 提取码:0jfa 复制这段内容后打开百度网盘手机App,操作更方便哦
    6 m8 A" U1 T. H# \7 Q: T/ q8 X2 q* |' E% d6 f9 o
    ps:要源码的朋友,我这代码总共10多行,没有一点学习价值,想学习的去看看 mdict-utils的源码吧。7 L: n0 `* {. M; K
    ps2:试着加多线程提升速度,但是发现并没有用,速度反而不如原来,不知道是我姿势不对还是怎么回事,所以这个速度问题应该会无限期搁置吧,哈哈。

    评分

    5

    查看全部评分

    本帖被以下淘专辑推荐:

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

    [LV.1]初来乍到

    发表于 2019-8-11 20:18:51 | 显示全部楼层
    simonfire 兄:
    ) s1 V% P4 F$ M4 D* E2 Q8 N  L$ b能想出如此的懒人包+ P, z# I+ E0 ^" B# _' [
    對於幼幼班的真是一大福利
    ) b5 t. |: w8 ]9 |Thanks a lot/ w8 W  ?  A$ B  c' z. q+ Z4 C( F
  • TA的每日心情
    开心
    2020-1-5 08:04
  • 签到天数: 50 天

    [LV.5]常住居民I

    发表于 2019-8-11 20:48:37 | 显示全部楼层
    按要求试了一下,没反应啊

    点评

    在软件的目录下,会生成一个output.txt,这个就是提取出来的结果  发表于 2020-6-26 18:34
  • TA的每日心情

    2019-2-16 21:57
  • 签到天数: 9 天

    [LV.3]偶尔看看II

    发表于 2019-8-11 21:11:52 | 显示全部楼层
    可以分享一下源代码吗?
  • TA的每日心情
    奋斗
    2022-6-1 19:02
  • 签到天数: 377 天

    [LV.9]以坛为家II

     楼主| 发表于 2019-8-11 23:31:26 | 显示全部楼层
    999阿彌陀佛 发表于 2019-8-11 20:481 D9 `/ f' u' }% w" [
    按要求试了一下,没反应啊

    8 @. [0 I3 p8 s你不要弄太多单词进去,然后保存为txt时编码选utf-8无BOM(也叫utf-8无签名),再试试
  • TA的每日心情
    奋斗
    2021-3-15 08:06
  • 签到天数: 585 天

    [LV.9]以坛为家II

    发表于 2019-8-12 08:16:56 | 显示全部楼层
    方法很特别!
  • TA的每日心情
    奋斗
    2019-10-13 07:34
  • 签到天数: 209 天

    [LV.7]常住居民III

    发表于 2019-8-12 09:06:31 | 显示全部楼层
    请问:之前Mdict Editor Tool等工具提取后的排序是按照字母顺序,并非input的顺序,不知道我们这个output.txt的顺序是?
  • TA的每日心情
    奋斗
    2022-6-1 19:02
  • 签到天数: 377 天

    [LV.9]以坛为家II

     楼主| 发表于 2019-8-12 09:36:24 来自手机 | 显示全部楼层
    VimVim 发表于 2019-8-12 09:06
    % G) @3 ]) @9 K: s0 E请问:之前Mdict Editor Tool等工具提取后的排序是按照字母顺序,并非input的顺序,不知道我们这个output.t ...

    8 ^: y- j$ F3 p6 }5 p  M- c输出的txt,是按照你的input.txt的先后,至于打包mdx后有没有再排序,因为用的是别人的写好的工具,我也没有研究

    点评

    太好了,正是需要这种排序!txt已能满足需求。  发表于 2019-8-12 14:56
  • TA的每日心情
    慵懒
    2020-4-10 13:19
  • 签到天数: 269 天

    [LV.8]以坛为家I

    发表于 2019-8-12 11:08:20 | 显示全部楼层
    老哥,源码能发出来学习一下吗?
  • TA的每日心情

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

    [LV.7]常住居民III

    发表于 2019-8-12 15:49:51 | 显示全部楼层
    simonfire 发表于 2019-8-12 09:36
    6 j$ O0 B; b& l; o  [0 w输出的txt,是按照你的input.txt的先后,至于打包mdx后有没有再排序,因为用的是别人的写好的工具,我也 ...
    2 I* X5 \3 {& b& M4 C& d+ H
    打包成 mdx 后,都是重新排序的,与原有 txt 顺序无关。
  • TA的每日心情
    奋斗
    2019-4-14 02:12
  • 签到天数: 93 天

    [LV.6]常住居民II

    发表于 2019-8-12 21:14:14 | 显示全部楼层
    本帖最后由 jonah_w 于 2019-8-12 21:15 编辑 ; E- q2 X  c8 b4 z
    ( M% W( ~3 D& Q3 h
    如果要保证按input.txt里的词头先后的话,速度肯定会慢,不考虑前后或者按字母顺序的话(用哈希),速度应该会非常快(几万个词头,也就是几秒,根据以前经验猜的)。可以考虑下。
  • TA的每日心情
    奋斗
    2019-10-11 13:52
  • 签到天数: 142 天

    [LV.7]常住居民III

    发表于 2019-8-12 22:39:30 | 显示全部楼层
    开源一下,这样我可以看看为什么速度这么慢
  • TA的每日心情
    开心
    2020-1-5 08:04
  • 签到天数: 50 天

    [LV.5]常住居民I

    发表于 2019-8-13 07:50:36 | 显示全部楼层
    謝謝,單詞表保存為 編碼ANSI 就可以了。之前是utf-8,沒反應。
  • TA的每日心情
    奋斗
    2022-6-1 19:02
  • 签到天数: 377 天

    [LV.9]以坛为家II

     楼主| 发表于 2019-8-13 10:39:34 来自手机 | 显示全部楼层
    999阿彌陀佛 发表于 2019-8-13 07:50
    7 H' |& k+ L$ ^謝謝,單詞表保存為 編碼ANSI 就可以了。之前是utf-8,沒反應。

    ! H, |: S1 P- R6 u你肯定用的是记事本了,弄这个你最好使用像notepad++或者emeditor这种编辑器。
    ) n9 [# i& \8 A- |  R不然你保存为ansi,英文没问题,中文就GG了,不过你要是不太懂,就凑合用吧
  • TA的每日心情
    开心
    2020-1-5 08:04
  • 签到天数: 50 天

    [LV.5]常住居民I

    发表于 2019-8-13 18:30:30 | 显示全部楼层
    謝謝。& g# H1 k* G& w, m- \1 o
    只是速度現在很慢,能不能改進一下?現在的詞典詞條都很多的。
  • TA的每日心情
    开心
    2018-8-8 03:13
  • 签到天数: 1 天

    [LV.1]初来乍到

    发表于 2019-8-14 03:07:32 | 显示全部楼层
    本帖最后由 喬治兄 于 2019-8-14 03:12 编辑 ( o! C2 T5 U7 j1 c
    simonfire 发表于 2019-8-12 09:36
    8 \/ X0 T9 l; k) u- L! x3 J/ o& N输出的txt,是按照你的input.txt的先后,至于打包mdx后有没有再排序,因为用的是别人的写好的工具,我也 ...
    + _2 S" k+ B# F% L5 N& [

    " p. m# g0 p$ \! H' g4 q* q哈哈, 還是@VimVim 兄問到了重點9 L) L7 Z8 m& g2 V8 I  e2 `. J+ K( ~
    小弟也正需输出的txt 按 input.txt 的先后6 g# W5 j3 |6 F9 u* ^7 L
    讚一個
    # a4 O1 I8 T) F# {# Z3 E本想學此招
    . J& {; T' o9 z9 u: V[教程] 用Emeditor提取子字典4 V0 E$ T4 [% X( [! p, X1 e
    https://www.pdawiki.com/forum/forum.php?mod=viewthread&tid=34351#lastpost
    + W/ G0 b- B: [- x6 {8 L/ I( i
  • TA的每日心情
    奋斗
    2019-11-15 20:13
  • 签到天数: 49 天

    [LV.5]常住居民I

    发表于 2019-9-25 03:19:24 | 显示全部楼层
    可以补档一下吗,谢谢楼主。。
  • TA的每日心情
    奋斗
    2022-6-1 19:02
  • 签到天数: 377 天

    [LV.9]以坛为家II

     楼主| 发表于 2019-9-25 11:32:31 来自手机 | 显示全部楼层
    亘佑 发表于 2019-9-25 03:19
    1 |6 g" g) U+ n' e0 l可以补档一下吗,谢谢楼主。。

    , Q) B' ~" u* }8 d用另外一个吧,这个速度没那个快
  • TA的每日心情
    擦汗
    2020-7-3 13:51
  • 签到天数: 19 天

    [LV.4]偶尔看看III

    发表于 2021-2-9 19:12:23 | 显示全部楼层
    我目前用C#做,i5的CPU大约10秒不到可以提取陆谷孙英汉大词典中的1万单词解释。7 t5 y8 J) E. q7 r0 h
    作者没有说明提取一个子MDX有什么意义,我主要是用来定制我的通读而非查阅用的词典。比如我可以制作一个牛津高阶6级词汇的词典,里面词头不超过6级只有几千个且释义正文都是牛高中的。提取完之后稍微处理一下可以直接在浏览器中打开。所有浏览器中Chrome渲染速度最快,1000单词的朗文4词典大约1分钟就好了,之后你可以慢慢享受鼠标滚动阅读而毫无迟滞感。还有切图版的图片词典,那制作出来就和看纸版书基本一样的感觉了。
    # Q2 n/ K% Z( W+ {& L% K. Y( a3 x- o) [做这个提取的小工具程序,初看起来简单得象1+1=2般简单。但真的是这样吗?非也!如果真正是严肃地以做产品的精神来做,还是要考虑一些问题的:% Y: \% |7 K: @2 ]0 K1 Z4 ^
    (1)MDX中同一个词头有可能出现多次,比如有的单词每个词性就列一个词头出来,且并未加上上标来区分,看起来词头是一模一样的。- v  ^  o% b" @+ `' q/ O. Z, d* k
    (2)词头内容可能是链接@@@LINK=,且链接可能有多级。链接最终到的那个单词如果不在原词表上出现怎么处理?是新加入这个词头还是不加入而拷贝它的内容过来?
    + T+ G. ~8 t( @( a: z& C+ `8 K(3)如果原MDX制作有问题,A词头链接B词头,B词头又链接A词头,将陷入死循环,如何侦测出来?我目前用的是递归调用简单地用递归最大层次来限制死循环的发生。; Q8 z( S% _1 ~' z- y
    (4)前述1,2,3可能同时出现夹杂糅合在一起,程序怎么处理既不遗漏又不重复释义?
    ' l' h) g4 J3 ]! B0 c& M- u; s1 c(5)如果原词表不按字母顺序排列,应该给用户按原来顺序和按字母顺序两个选择
    + s3 p7 e! O% @5 R9 X- y, X" G6 K' L6 `" O7 N) S* s. e  Q1 ]3 Z
    " p3 b5 h* [6 T( c2 T3 B
    这些考虑使得编程复杂了很多!我用了整整2天才弄完它们。不到200行C#搞定。1 [4 s: m6 ]* l) h# m; G! x
  • TA的每日心情
    擦汗
    2020-7-3 13:51
  • 签到天数: 19 天

    [LV.4]偶尔看看III

    发表于 2021-2-9 19:15:47 | 显示全部楼层
    ; U% u. ?4 l4 j9 {& {/ i
    我用C#做,i5的CPU大约10秒不到可以提取陆谷孙英汉大词典中的1万单词解释。0 V% P* n3 Q3 o" Q% f
    作者没有说明提取一个子MDX有什么意义,我主要是用来定制我的通读而非查阅用的词典。比如我可以制作一个牛津高阶6级词汇的词典,里面词头不超过6级只有几千个且释义正文都是牛高中的。提取完之后稍微处理一下可以直接在浏览器中打开。所有浏览器中Chrome渲染速度最快,1000单词的朗文4词典大约1分钟就好了,之后你可以慢慢享受鼠标滚动阅读而毫无迟滞感。还有切图版的图片词典,那制作出来就和看纸版书基本一样的感觉了。
    $ e9 U  D0 i: q% Q3 e做这个提取的小工具程序,初看起来简单得象1+1=2般简单。但真的是这样吗?非也!如果真正是严肃地以做产品的精神来做,还是要考虑一些问题的:+ d4 c5 b& }/ w$ l# `5 }) }. s
    (1)MDX中同一个词头有可能出现多次,比如有的单词每个词性就列一个词头出来,且并未加上上标来区分,看起来词头是一模一样的。
    9 w: r$ ?  P2 H: x3 w2 K0 n4 _7 f! l2 o(2)词头内容可能是链接@@@LINK=,且链接可能有多级。链接最终到的那个单词如果不在原词表上出现怎么处理?是新加入这个词头还是不加入而拷贝它的内容过来?+ r  u* X5 X/ y
    (3)如果原MDX制作有问题,A词头链接B词头,B词头又链接A词头,将陷入死循环,如何侦测出来?我目前用的是递归调用简单地用递归最大层次来限制死循环的发生。
    9 ~: v/ W. h- |7 E7 ~(4)前述1,2,3可能同时出现夹杂糅合在一起,程序怎么处理既不遗漏又不重复释义?
    / q+ C6 Q6 f" E2 }* S! m(5)如果原词表不按字母顺序排列,应该给用户按原来顺序和按字母顺序两个选择
    1 L( m1 l  o9 Y# B1 D7 f/ i8 R# j+ h( q+ G
    这些考虑使得编程复杂了很多很多!我用了整整2天才弄完它们。不到200行C#搞定。
    您需要登录后才可以回帖 登录 | 免费注册

    本版积分规则

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

    GMT+8, 2024-4-19 13:26 , Processed in 0.075463 second(s), 10 queries , MemCache On.

    Powered by Discuz! X3.4

    Copyright © 2001-2023, Tencent Cloud.

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