如何根据词头列表,来过滤mdx的文本?
本帖最后由 kandict 于 2019-5-5 18:28 编辑目的:想把手里的某些词典过滤出个子集来使用。
方法:已生成了词头列表文件,根据它来提取mdx文本的相关词条。
步骤:本来想的很简单,用emeditor的宏来实现:
editor.ExecuteCommandByID(4548); // 切换到词头列表文件
nLegalHead = document.selection.Find( sSearchData ,eeFindNext,0); // 查找是否需要这个词
editor.ExecuteCommandByID(4547); // 切换回mdx文本
if( nLegalHead != 0 ).......
但尝试了多次,发现emeditor总是在执行了一段时间后卡死 (假如注释掉切换文件的语句则不会卡死)。
置顶的现成编辑工具中有两个有这个功能,其中一个总是执行出错,作者也不来论坛了。另一个Dict Source Editor还没有尝试。
想请各位说说自己的经验,在windows下,这类文字处理都用什么工具;或者说说我emeditor使用方法哪里有错误。谢谢
追加:emeditor其实没卡死,只是这种方式的速度慢的严重超出我想像,即使三千词的例子也让我误以为其卡死。
ogrishman 发表于 2019-5-6 06:56
用Access怎么操作呀,是用SQL查询么?
貌似用emeditor更简单,我写了个帖子
https://www.pdawiki.com/forum/thread-34351-1-1.html 不需要使用宏,可以直接使用筛选功能
mdx 文本文件里的词条格式示例:
abandon
<link ... ><div ... > ... </div>
</>
better
<link ... ><div ... > ... </div>
</>
zero
<link ... ><div ... > ... </div>
</>
一、使用正则将词头文本文件替换为以下 TSV 格式(分隔符为制表符),用于导入高级筛选
on ^abandon$ -1 RO 0 -1
on ^better$ -1 RO 0 -1
on ^zero$ -1 RO 0 -1
二、使用高级筛选
1. 打开 mdx 文本文件
2. 打开筛选工具栏,并在“匹配行以下的额外的可见行数”中选择 2
3. 点击“高级筛选”按钮,打开“高级筛选”工具栏。点击“导入...”并导入制作好的 TSV 文件,然后点击“筛选”,会列出所有词头及其词头以下的 2 行的内容
4. 点击“提取全部”按钮,会提取全部筛选出的内容到一个新建的文本文件
kandict 发表于 2019-5-5 20:52
如果通用工具能用,暂时就不试dict source editor了,看它说明里是有这个功能。
那个py脚本帖子里说 "约...
dict source editor目前提取词条最快(5000个词,印象当中用不了20s),并且缺了哪个词,提取完毕之后会有一个文档提示,不明白为什么不尝试用这款软件。而且只需要一个txt词表就可以提取了,傻瓜化点击几下鼠标就可以操作了,也无需修改mdx的源数据。 leescott 发表于 2019-5-5 20:09
EMEDITOR 和 cnbook 都有文本批量替换的功能。
词条一个一行。比如“爱好”等等,批量替换为“TTT爱好YYY” ...
emeditor宏执行有问题,几年前用过老版应该没问题,不试了。因为上面“Word”网友给出的筛选方案可用。 本帖最后由 流星冲击 于 2019-5-5 19:55 编辑
Dict Source Editor根据wordlist就可以用来提取内容,用过没问题,只是用的是类似正则表达式'|'的提取的方式,不完全按wordlist的词条顺序提取并分别列出来的那种,就是你指定提取1、3、2,被提取的内容顺序是1、2、3,提取完成,提取的内容还是1、2、3。
按词表顺序列出来的,论坛有这样的python脚本,customiseMdxFromList【指定单词列表提取词库】:https://www.pdawiki.com/forum/forum.php?mod=viewthread&tid=25231,不过效率很慢,这种是需要一条条全文检索然后打印内容列出来的,所以比较耗时。
Try this
https://www.pdawiki.com/forum/forum.php?mod=viewthread&tid=18986&extra=page%3D1
{:4_105:} python+xpath jonah_w 发表于 2019-5-5 15:59
python+xpath
那感觉有点儿小题大做了。不知道有没有现成的类似emeditor这类的处理方案。 喬治兄 发表于 2019-5-5 16:45
Try this
https://www.pdawiki.com/forum/forum.php?mod=viewthread&tid=18986&extra=page%3D1
昨天试过,执行出错。 Word 发表于 2019-5-5 18:03
不需要使用宏,可以直接使用筛选功能
mdx 文本文件里的词条格式示例:
看上去应该可行。
筛选导入上十万词头时很慢,看来要先把词头晒好,半夜让它自己干。
测试开工... kandict 发表于 2019-5-5 18:46
看上去应该可行。
筛选导入上十万词头时很慢,看来要先把词头晒好,半夜让它自己干。
测试开工... ...
嗯,文件越大,词头越多,耗时越长,如果会导致软件崩溃什么的,也可以尝试将所有词头拆分为多个列表,然后逐一筛选和提取,最后合并即可 EMEDITOR 和 cnbook 都有文本批量替换的功能。
词条一个一行。比如“爱好”等等,批量替换为“TTT爱好YYY”。
再来筛选或者反向筛选,就简单了。
流星冲击 发表于 2019-5-5 19:51
Dict Source Editor根据wordlist就可以用来提取内容,用过没问题,只是用的是类似正则表达式'|'的提取的方 ...
如果通用工具能用,暂时就不试dict source editor了,看它说明里是有这个功能。
那个py脚本帖子里说 "约 2.5 秒/词,5000 词合共约 3.5 小时" ,那我就不试了,算下来要一个星期... 用Access简单方便。 流星冲击 发表于 2019-5-5 21:21
dict source editor目前提取词条最快(5000个词,印象当中用不了20s),并且缺了哪个词,提取完毕之后会 ...
速度确实不慢,放后台一会儿就生成了。最关键的是大文件能用,其它包括emeditor对大文件都失效了。
最终就是用它弄成功的。 Word 发表于 2019-5-5 18:57
嗯,文件越大,词头越多,耗时越长,如果会导致软件崩溃什么的,也可以尝试将所有词头拆分为多个列表,然 ...
词头拆成两份,还是不行。症状是按下“筛选”按钮后它啥都不干。
较小的文件能正常筛选。 gsxlm 发表于 2019-5-5 21:28
用Access简单方便。
总是装了它,却没用过。这对它应该是小菜。 gsxlm 发表于 2019-5-5 21:28
用Access简单方便。
用Access怎么操作呀,是用SQL查询么? 本帖最后由 ogrishman 于 2019-5-6 08:42 编辑
这种结构化的数据最好用perl或者AWK来处理。比如用AWK,处理mdx这种结构这么清晰的数据很容易,可以设置record separator为</>,field separator为换行符,然后只把匹配上的record输出就行了。楼主这个例子,用下面的命令就可以:gawk 'NR==FNR{arr[$0];next} $1 in arr' RS='\r?\n' 词头列表.txt RS='</>\r?\n' FS='\r?\n' ORS='</>\n' 文本.txt
另外我看楼主刚发了个迷你版the little dict,我解压后处理了一下,提取了所有的word list,然后用上面的命令针对这个word list在原始的the little dict里面提取词条。用手机粗略计时,11秒就完成了,也就是11秒钟在2.56G的文本文件里提取了326632个词条,提取结果大小是313MB。
ogrishman 发表于 2019-5-6 07:21
这种结构化的数据最好用perl或者AWK来处理。比如用AWK,处理mdx这种结构这么清晰的数据很容易,可以设置rec ...
使用机会很少,所以没打算为此学脚本。
你这速度快的惊人,不知它如何实现的。我用emeditor载入tld文本也要五六秒了。 leescott 发表于 2019-5-5 20:09
EMEDITOR 和 cnbook 都有文本批量替换的功能。
词条一个一行。比如“爱好”等等,批量替换为“TTT爱好YYY” ...
不需要宏,在替换那里有批量替换,输入一个,导出规则,再修改规则。最后,批量替换。
那个批处理不适合这事
页:
[1]