从mdx提取指定的词条,并打包成mdx[已失效]
本帖最后由 simonfire 于 2021-2-10 11:15 编辑用python写的一个小工具,解析和打包都是用的zzzz_sleep的 mdict-utils。
用法:把需要提取的单词制成一行一个的格式,命名为input.txt(文件编码有要求,必须是UTF-8(无BOM,也叫无签名),要提取的mdx文件命名为input.mdx,和解压的exe文件放在同一目录,双击运行exe文件就行了。正常运行的话,会生成名为output的txt和mdx文件。
目前只进行了简单的测试,有使用问题后续再修复吧
加了程序运行时打印正在提取的单词,你可以知道个大概的进度
然后现在程序是单线程运行,所以速度很慢(目测1秒才2-3个单词),最好不要弄太多词条去提取,后续可能会增加多线程,看情况吧
下载地址,度盘:
链接:https://pan.baidu.com/s/11nIBxwL5-CYZhFfiK9njyw 提取码:0jfa 复制这段内容后打开百度网盘手机App,操作更方便哦
ps:要源码的朋友,我这代码总共10多行,没有一点学习价值,想学习的去看看 mdict-utils的源码吧。
ps2:试着加多线程提升速度,但是发现并没有用,速度反而不如原来,不知道是我姿势不对还是怎么回事,所以这个速度问题应该会无限期搁置吧,哈哈。 simonfire 兄:
能想出如此的懒人包
對於幼幼班的真是一大福利
Thanks a lot
{:4_105:} 非常感谢!!! 按要求试了一下,没反应啊 可以分享一下源代码吗? 999阿彌陀佛 发表于 2019-8-11 20:48
按要求试了一下,没反应啊
你不要弄太多单词进去,然后保存为txt时编码选utf-8无BOM(也叫utf-8无签名),再试试 方法很特别! 请问:之前Mdict Editor Tool等工具提取后的排序是按照字母顺序,并非input的顺序,不知道我们这个output.txt的顺序是? VimVim 发表于 2019-8-12 09:06
请问:之前Mdict Editor Tool等工具提取后的排序是按照字母顺序,并非input的顺序,不知道我们这个output.t ...
输出的txt,是按照你的input.txt的先后,至于打包mdx后有没有再排序,因为用的是别人的写好的工具,我也没有研究 老哥,源码能发出来学习一下吗? simonfire 发表于 2019-8-12 09:36
输出的txt,是按照你的input.txt的先后,至于打包mdx后有没有再排序,因为用的是别人的写好的工具,我也 ...
打包成 mdx 后,都是重新排序的,与原有 txt 顺序无关。 本帖最后由 jonah_w 于 2019-8-12 21:15 编辑
如果要保证按input.txt里的词头先后的话,速度肯定会慢,不考虑前后或者按字母顺序的话(用哈希),速度应该会非常快(几万个词头,也就是几秒,根据以前经验猜的)。可以考虑下。 开源一下,这样我可以看看为什么速度这么慢 謝謝,單詞表保存為 編碼ANSI 就可以了。之前是utf-8,沒反應。 999阿彌陀佛 发表于 2019-8-13 07:50
謝謝,單詞表保存為 編碼ANSI 就可以了。之前是utf-8,沒反應。
你肯定用的是记事本了,弄这个你最好使用像notepad++或者emeditor这种编辑器。
不然你保存为ansi,英文没问题,中文就GG了,不过你要是不太懂,就凑合用吧 謝謝。
只是速度現在很慢,能不能改進一下?現在的詞典詞條都很多的。 本帖最后由 喬治兄 于 2019-8-14 03:12 编辑
simonfire 发表于 2019-8-12 09:36
输出的txt,是按照你的input.txt的先后,至于打包mdx后有没有再排序,因为用的是别人的写好的工具,我也 ...
哈哈, 還是@VimVim 兄問到了重點
小弟也正需输出的txt 按 input.txt 的先后
讚一個
本想學此招
[教程] 用Emeditor提取子字典
https://www.pdawiki.com/forum/forum.php?mod=viewthread&tid=34351#lastpost
可以补档一下吗,谢谢楼主。。 亘佑 发表于 2019-9-25 03:19
可以补档一下吗,谢谢楼主。。
用另外一个吧,这个速度没那个快 我目前用C#做,i5的CPU大约10秒不到可以提取陆谷孙英汉大词典中的1万单词解释。
作者没有说明提取一个子MDX有什么意义,我主要是用来定制我的通读而非查阅用的词典。比如我可以制作一个牛津高阶6级词汇的词典,里面词头不超过6级只有几千个且释义正文都是牛高中的。提取完之后稍微处理一下可以直接在浏览器中打开。所有浏览器中Chrome渲染速度最快,1000单词的朗文4词典大约1分钟就好了,之后你可以慢慢享受鼠标滚动阅读而毫无迟滞感。还有切图版的图片词典,那制作出来就和看纸版书基本一样的感觉了。
做这个提取的小工具程序,初看起来简单得象1+1=2般简单。但真的是这样吗?非也!如果真正是严肃地以做产品的精神来做,还是要考虑一些问题的:
(1)MDX中同一个词头有可能出现多次,比如有的单词每个词性就列一个词头出来,且并未加上上标来区分,看起来词头是一模一样的。
(2)词头内容可能是链接@@@LINK=,且链接可能有多级。链接最终到的那个单词如果不在原词表上出现怎么处理?是新加入这个词头还是不加入而拷贝它的内容过来?
(3)如果原MDX制作有问题,A词头链接B词头,B词头又链接A词头,将陷入死循环,如何侦测出来?我目前用的是递归调用简单地用递归最大层次来限制死循环的发生。
(4)前述1,2,3可能同时出现夹杂糅合在一起,程序怎么处理既不遗漏又不重复释义?
(5)如果原词表不按字母顺序排列,应该给用户按原来顺序和按字母顺序两个选择
这些考虑使得编程复杂了很多!我用了整整2天才弄完它们。不到200行C#搞定。
我用C#做,i5的CPU大约10秒不到可以提取陆谷孙英汉大词典中的1万单词解释。
作者没有说明提取一个子MDX有什么意义,我主要是用来定制我的通读而非查阅用的词典。比如我可以制作一个牛津高阶6级词汇的词典,里面词头不超过6级只有几千个且释义正文都是牛高中的。提取完之后稍微处理一下可以直接在浏览器中打开。所有浏览器中Chrome渲染速度最快,1000单词的朗文4词典大约1分钟就好了,之后你可以慢慢享受鼠标滚动阅读而毫无迟滞感。还有切图版的图片词典,那制作出来就和看纸版书基本一样的感觉了。
做这个提取的小工具程序,初看起来简单得象1+1=2般简单。但真的是这样吗?非也!如果真正是严肃地以做产品的精神来做,还是要考虑一些问题的:
(1)MDX中同一个词头有可能出现多次,比如有的单词每个词性就列一个词头出来,且并未加上上标来区分,看起来词头是一模一样的。
(2)词头内容可能是链接@@@LINK=,且链接可能有多级。链接最终到的那个单词如果不在原词表上出现怎么处理?是新加入这个词头还是不加入而拷贝它的内容过来?
(3)如果原MDX制作有问题,A词头链接B词头,B词头又链接A词头,将陷入死循环,如何侦测出来?我目前用的是递归调用简单地用递归最大层次来限制死循环的发生。
(4)前述1,2,3可能同时出现夹杂糅合在一起,程序怎么处理既不遗漏又不重复释义?
(5)如果原词表不按字母顺序排列,应该给用户按原来顺序和按字母顺序两个选择
这些考虑使得编程复杂了很多很多!我用了整整2天才弄完它们。不到200行C#搞定。
页:
[1]