查看: 10071|回复: 185
打印 上一主题 下一主题

[资料] MDX词组提取 - 从正则进阶到头发护理

    [复制链接]
  • TA的每日心情
    慵懒
    2018-8-25 12:29
  • 签到天数: 91 天

    [LV.6]常住居民II

    33

    主题

    282

    回帖

    4万

    积分

    版主

    新的一天 , 新的难过

    Rank: 10Rank: 10Rank: 10

    积分
    40705

    灌水大神章笑傲江湖章QQ 章翰林院专用章管理组专用章小蜜蜂章

    QQ
    跳转到指定楼层
    1
    发表于 2018-5-3 00:01:37 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
    本帖最后由 garypang 于 2018-5-8 18:56 编辑

    阅读本帖前建议对正则表达式有一定的了解,本帖不做基础知识普及,只讲解关键点和思路

    在我出了两个词组提取资源帖后,不少小伙伴都留言表示希望我出教程帖,也有希望我提取某某词典的词组,秉着授之于鱼不如授之以渔,造福论坛和广大网友的想法,分享下我提取朗文5++词组的全过程,只要跟着我一步一步来,哪怕不懂代码的小白,也能提取出朗文5++,但是要扩展到自己提取其他词典,则需要看懂各个步骤,并举一反三啦.

    所用工具:
    文本编辑器 notepad++  https://notepad-plus-plus.org/download/ (其他编辑器无法保证本帖提供的正则正常运行)

    tidy-html5  https://github.com/htacg/tidy-html5
    已编译好版本,直接下载

    本帖隐藏的内容

    tidy2.zip (164.21 KB, 下载次数: 144)



    mdx解压软件MdxExport   mdx打包软件 MdxBuilder   论坛有提供下载,

    具体步骤

    第一步 使用MdxExport 将mdx文件解压成txt文本文件

    第二步
    用notepad++打开解压后的txt文件,ctrl+H打开替换窗口

    替换目标:
    1. .*?(<a name="\w+?"></a><span class="(newline ){0,1}Sense( LDOCEVERSION_new){0,1}" id="\w+?">(<span class="LDOCE5pp_sensefold){0,1}.{0,400}?<span class="REFHWD merge_sense.*?)<!-- End of DIV dictionary-->.*?
    复制代码


    替换为:
    1. \1\r\n
    复制代码
    查找模式:正则表达式   勾选匹配新行  保存替换后的文件为hb.txt

    讲解:

    观察朗文5++词组部分的数据结构



    词组部分起始位置标签是类似<span class="newline Sense " id="go__phr__1">,用正则很容易就匹配到,但是末尾闭合标签全是</span> 无法匹配,暂且先匹配至词组所处单词的释义的最末尾 即<!-- End of DIV dictionary-->,做为第一步的筛选,可以去掉很大一部分无用的内容

    替换后结果是这样的


    第三步
    打开 hb.txt
    替换目标:
    1. <span( class="(newline ){0,1}Sense( LDOCEVERSION_new){0,1}" id="\w+?">(<span class="LDOCE5pp_sensefold){0,1}.{0,400}?<)span( class="REFHWD merge_sense)
    复制代码

    替换为:
    1. <jia\1hwd\5
    复制代码
      查找模式:正则表达式  

    讲解:
    这一步的目的是将词组的起始标签比如<span class="newline Sense " id="go__phr__1">改为自定义标签<jia class="newline Sense " id="go__phr__1">,将词组名的起始标签 <span class="REFHWD merge_sense>改为<hwd class="REFHWD merge_sense> 为下一步格式化html做准备

    第四步

    本帖隐藏的内容

    win+R或command+R 键入cmd, 打开命令行窗口,命令行切换到下载的tidy.exe所在位置,并将前面处理好的hb.txt也放入此目录 键入 tidy -config config.txt hb.txt > output.txt 回车
    等待十到二十分钟不等,可以喝杯咖啡,看看片啥的,完成后会在当前目录生成output.txt文件


    等待过程中的窗口


    讲解
    tidy是个大杀器,能将html格式化的同时自动修复html里的错误,比如我们前面改的自定义标签<jia>和<hwd>,tidy会自动配对这两个标签的闭合标签,发现是</span>而非</jia></hwd>,则会自动将闭合标签改为独一无二的</jia>和</hwd>
    这样我们就能轻松通过正则匹配到每个词组的结尾标签位置以及词组名结尾标签位置

    第五步
    打开 output.txt
    替换目标:
    1. .*?(<a name="\w+?"></a>\r\n\s+?<jia class="(newline ){0,1}Sense( LDOCEVERSION_new){0,1}" id="(\w+?)">.+?<hwd class="REFHWD merge_sense[\w\s]*?">(.{1,280}?)</hwd>.*?</jia>).*?
    复制代码

    替换为:
    1. \5\r\n<link href="LM5style_vanilla.css" rel="stylesheet" type="text/css" /><link href="LM5style.css" rel="stylesheet" type="text/css" /><link href="LM5style_switch.css" rel="stylesheet" type="text/css" /><link href="LM5style_show.css" rel="stylesheet" type="text/css" /><script src="jquery-3.2.1.min.js" charset="utf-8" type="text/javascript"></script><script src="LM5Switch.js" charset="utf-8" type="text/javascript"></script><span class="lm5ppbody"><div class="entry_content"><div class="dictionary"><span class="dictentry"><a name="\4__a"></a><span class="ldoceEntry Entry" id="\4"><span class="frequent Head"><span class="HWD">\5</span></span>\1</span></span></div></div></span>\r\n</>\r\n
    复制代码
    查找模式:正则表达式   勾选匹配新行

    讲解
    既然我们能确定所有词组的起始和结束位置,以及词组名的起始和结束位置,那就可以彻底干掉所有没用的内容,只留下有用的词组相关的内容,并将其格式化为mdx要求的格式

    替换后效果


    到这一步,一部词典的词组提取已经完成了

    接下来步骤是针对朗文5++词组的调整和优化,不同词典可能不同.

    第一步:
    上一步完成后,提取出来的词组名有些是这样的


    需要改为abide by something   

    1. (^</>\r\n.+)\r\n\s*?<span class="OBJECT">(.+?)</span>
    复制代码
    1. \1 \2
    复制代码
    查找模式:正则表达式   需要替换两次,因为有些是两个<span class="OBJECT">(.+?)</span>  比如 take somebody up on something

    第二步
    去掉词组名里的双空格 三空格
    替换目标:
    1. ^(.+?)(  |   )(.+?)\r\n<link
    复制代码

    替换为
    1. \1 \3\r\n<link
    复制代码
    查找模式:正则表达式    需要替换两次 因为有些词组名中多空格不止出现一次

    第三步
    愿词典词组中 比如somebody's 使用的是 ’ 而非标准的单引号 ' 作为上标 需要改过来,否则会造成一些词组查不到
    替换目标:
    复制代码

    替换为:
    1. '
    复制代码
    查找模式:普通

    第四步
    去除词组前面的数字序号
    替换目标
    1. \r\n\s*?<span class="sensenum span"( newline="yes"){0,1}>[0-9]+</span>
    复制代码

    替换为 空

    还有进阶的针对查词的灵活性优化,合并原词典后的去重,这些就不说了,每部词典不同,没有通用性,

    最后将完成后的文件内容复制到原mdx解压的txt中顶部, 用MdxBuilder   打包即可

    只要严格按照我的步骤来,就一定可以完成提取,我是一遍码帖,一遍操作完成了一次提取的.

    希望大家踊跃行动起来,提取出自己的词组词典,造福大家!

    有问题请私信,正则,mdx等的基础知识普及不回哦.




    评分

    8

    查看全部评分

    本帖被以下淘专辑推荐:

    • · 工具|主题: 61, 订阅: 28
    • · 中医|主题: 7, 订阅: 0
  • TA的每日心情
    奋斗
    2019-4-14 02:12
  • 签到天数: 93 天

    [LV.6]常住居民II

    250

    主题

    2966

    回帖

    53万

    积分

    状元

    吃水不忘挖井人

    Rank: 9Rank: 9Rank: 9

    积分
    534526

    灌水大神章笑傲江湖章推广专家QQ 章

    来自 61楼
    发表于 2019-1-8 17:21:09 | 只看该作者
    编译了一个Mac版tidy html tidy-5.7.17-Darwin.pkg.zip (4.26 KB, 下载次数: 4)
    不知道可以用不… 反正按官方步骤编译的。
    Mac用户有需要的时候 可以试试。

    评分

    1

    查看全部评分

  • TA的每日心情
    开心
    2019-2-14 21:07
  • 签到天数: 2 天

    [LV.1]初来乍到

    0

    主题

    12

    回帖

    118

    积分

    童生

    Rank: 2

    积分
    118
    推荐
    发表于 2019-3-11 18:57:37 | 只看该作者
    把mdx导进sqlite3里面(网上能找到一个readmdict.py,稍微修改一下就能干这个),然后逐条处理,会不会比直接处理一个大txt要省劲一点儿?

    我是用node.js来做正则处理的。当然用python也一样。
  • TA的每日心情
    开心
    2018-5-27 05:26
  • 签到天数: 55 天

    [LV.5]常住居民I

    22

    主题

    388

    回帖

    4362

    积分

    被盗用户

    积分
    4362
    推荐
    发表于 2018-5-4 17:02:13 | 只看该作者
    本帖最后由 nidetou 于 2018-5-4 17:13 编辑

    链接:https://pan.baidu.com/s/1LbaCNOIHVV-tND9Dg48QgQ 密码:omwb

    我提取Laad3词典例句音频(coca5000),按字母顺序分割为51个文件.最头痛的是每个单词下的例句没有排序。所以应按照theaurus, phrase,collocation, spoken和意项五个部分分别提取(如有可能把usage也单独提取),即使顺序不对,也没有什么大碍。
  • TA的每日心情
    开心
    2018-5-27 05:26
  • 签到天数: 55 天

    [LV.5]常住居民I

    22

    主题

    388

    回帖

    4362

    积分

    被盗用户

    积分
    4362
    推荐
    发表于 2018-5-4 16:08:09 | 只看该作者
    本帖最后由 nidetou 于 2018-5-4 17:14 编辑

    这个一定要收藏,我想把coca5000从LAAD3提取音频例句,让大家听。由于不熟悉计算机语言,找到anki一款插件提取mdd文件中的音频,我是一个一个手工提取(大家别笑我,人笨没办法),合并文件有50多小时,没有放在出来的原因是例句排序很很麻烦。我感觉应分五个部分提取,theaurus, phrase,collocation, spoken和意项(如有可能usage也单独提取)。学外语大量听优先。如果有可能再把coca5000-10000提取,这样可建立输入词汇在大脑里形成bank.
  • TA的每日心情
    开心
    2020-5-23 22:47
  • 签到天数: 128 天

    [LV.7]常住居民III

    1

    主题

    212

    回帖

    1745

    积分

    解元

    Rank: 5Rank: 5

    积分
    1745
    2
    发表于 2018-5-3 00:44:36 | 只看该作者
    非常好的东西,这么晚了还在码,辛苦了。明天我也要好好学学怎么替换……
    比较好奇的是,为什么有些词典,例如简明必应 https://www.pdawiki.com/forum/fo ... hread&tid=20726 这份词典里
    一些比如say等基础词汇,会出现前缀,后缀的,-等符号,导致如果将该词典作为首词典查询单词的时候,由于搜索机制的问题,输入say,会直接被导向-say之类的,然后……一个say搜出很多个同样的解释。
    不知道制作这样带有符号的同一个单词,是批量生成过程中产生的问题,还是为了作为词组存在留下的。
    研究好以后,看看能不能正则把这部分切了。
  • TA的每日心情
    开心
    2023-1-18 23:24
  • 签到天数: 211 天

    [LV.7]常住居民III

    427

    主题

    4539

    回帖

    9万

    积分

    超级版主

    Rank: 12Rank: 12Rank: 12

    积分
    92011

    灌水大神章小蜜蜂章笑傲江湖章翰林院专用章管理组专用章城管大队长

    3
    发表于 2018-5-3 00:47:22 | 只看该作者
    QQending2 发表于 2018-5-3 00:44
    非常好的东西,这么晚了还在码,辛苦了。明天我也要好好学学怎么替换……
    比较好奇的是,为什么有些词典, ...
    出现前缀,后缀的,-等符号
    词典中本来有这些词条,不奇怪
  • TA的每日心情
    开心
    2020-4-2 14:11
  • 签到天数: 464 天

    [LV.9]以坛为家II

    0

    主题

    795

    回帖

    1万

    积分

    状元

    Rank: 9Rank: 9Rank: 9

    积分
    17042

    灌水大神章小蜜蜂章笑傲江湖章QQ 章

    4
    发表于 2018-5-3 14:23:25 | 只看该作者
    非常感谢楼主的分享!!!
  • TA的每日心情
    开心
    前天 19:36
  • 签到天数: 624 天

    [LV.9]以坛为家II

    539

    主题

    1981

    回帖

    5万

    积分

    超级版主

    Rank: 12Rank: 12Rank: 12

    积分
    53359

    翰林院专用章推广专家灌水大神章笑傲江湖章小蜜蜂章管理组专用章QQ 章

    5
    发表于 2018-5-3 19:32:29 | 只看该作者
    不管东西咋样 还是先谢谢了
  • TA的每日心情
    慵懒
    2 小时前
  • 签到天数: 1905 天

    [LV.Master]伴坛终老

    4

    主题

    1958

    回帖

    7万

    积分

    状元

    Rank: 9Rank: 9Rank: 9

    积分
    70659
    6
    发表于 2018-5-3 20:50:11 | 只看该作者
    很喜欢关于词典技术的讨论
  • TA的每日心情
    开心
    2018-4-10 07:58
  • 签到天数: 60 天

    [LV.6]常住居民II

    5

    主题

    96

    回帖

    782

    积分

    举人

    Rank: 4

    积分
    782

    QQ 章灌水大神章笑傲江湖章

    7
    发表于 2018-5-3 23:49:13 | 只看该作者
    给楼主点赞,这份工作需要一些创造力
  • TA的每日心情
    开心
    昨天 09:24
  • 签到天数: 1854 天

    [LV.Master]伴坛终老

    40

    主题

    4277

    回帖

    6万

    积分

    状元

    Rank: 9Rank: 9Rank: 9

    积分
    68103
    8
    发表于 2018-5-4 00:34:27 | 只看该作者
    Thanks for sharing...
  • TA的每日心情

    2018-6-16 18:13
  • 签到天数: 158 天

    [LV.7]常住居民III

    22

    主题

    255

    回帖

    6055

    积分

    禁止发言

    积分
    6055

    灌水大神章

    9
    发表于 2018-5-4 11:40:55 | 只看该作者
    千呼万唤始出来啊
  • TA的每日心情
    慵懒
    2018-9-28 00:22
  • 签到天数: 273 天

    [LV.8]以坛为家I

    6

    主题

    600

    回帖

    6635

    积分

    会元

    Rank: 7Rank: 7Rank: 7

    积分
    6635

    灌水大神章

    10
    发表于 2018-5-4 12:11:30 | 只看该作者
    还是要对正则熟悉。
  • TA的每日心情
    开心
    2018-5-27 05:26
  • 签到天数: 55 天

    [LV.5]常住居民I

    22

    主题

    388

    回帖

    4362

    积分

    被盗用户

    积分
    4362
    12
    发表于 2018-5-4 16:11:01 | 只看该作者
    本帖最后由 nidetou 于 2018-5-4 16:34 编辑

    朗文现代不好的原因是例句英美音混杂。
  • TA的每日心情
    开心
    5 天前
  • 签到天数: 1322 天

    [LV.10]以坛为家III

    28

    主题

    4069

    回帖

    3万

    积分

    状元

    Rank: 9Rank: 9Rank: 9

    积分
    32060

    灌水大神章小蜜蜂章笑傲江湖章QQ 章

    14
    发表于 2018-5-4 22:55:18 | 只看该作者
    谢谢,下来看看
  • TA的每日心情
    开心
    2019-10-25 14:29
  • 签到天数: 32 天

    [LV.5]常住居民I

    1

    主题

    126

    回帖

    4738

    积分

    贡士

    Rank: 6Rank: 6

    积分
    4738

    QQ 章推广专家笑傲江湖章灌水大神章

    15
    发表于 2018-6-7 22:44:39 | 只看该作者
    感谢楼主的分享!学习下。
  • TA的每日心情
    开心
    2023-1-13 01:10
  • 签到天数: 1469 天

    [LV.10]以坛为家III

    1

    主题

    2477

    回帖

    1万

    积分

    状元

    Rank: 9Rank: 9Rank: 9

    积分
    13881

    灌水大神章笑傲江湖章

    16
    发表于 2018-6-7 23:15:15 | 只看该作者
    谢谢楼主的介绍,很想学习制作,先从基础开始

    该用户从未签到

    16

    主题

    1074

    回帖

    3万

    积分

    翰林院编修

    Rank: 11Rank: 11Rank: 11Rank: 11

    积分
    31794

    翰林院专用章灌水大神章笑傲江湖章小蜜蜂章管理组专用章

    18
    发表于 2018-6-14 17:35:07 | 只看该作者
    感谢楼主分享制作经验,学习了!
  • TA的每日心情
    擦汗
    2020-2-7 12:22
  • 签到天数: 44 天

    [LV.5]常住居民I

    10

    主题

    154

    回帖

    2064

    积分

    解元

    Rank: 5Rank: 5

    积分
    2064
    19
    发表于 2018-6-15 17:20:23 | 只看该作者
    好贴!讲的很详细!可惜我看到的太晚了,浪费了好多时间
  • TA的每日心情
    开心
    2018-6-18 09:03
  • 签到天数: 110 天

    [LV.6]常住居民II

    12

    主题

    180

    回帖

    7万

    积分

    状元

    Rank: 9Rank: 9Rank: 9

    积分
    71940
    20
    发表于 2018-6-15 18:17:14 | 只看该作者
    学习了。虽然会一丁点的正则,但一直没有太怎么敢用在这种大型处理上。
  • TA的每日心情
    开心
    2019-7-11 11:21
  • 签到天数: 313 天

    [LV.8]以坛为家I

    0

    主题

    169

    回帖

    2825

    积分

    禁止发言

    积分
    2825
    21
    发表于 2018-6-15 22:24:34 | 只看该作者
    非常感谢garypang精心整理,无私分享,授人以渔!
  • TA的每日心情

    2018-6-15 14:54
  • 签到天数: 3 天

    [LV.2]偶尔看看I

    38

    主题

    509

    回帖

    5035

    积分

    翰林院编修

    Rank: 11Rank: 11Rank: 11Rank: 11

    积分
    5035

    翰林院专用章灌水大神章笑傲江湖章小蜜蜂章管理组专用章

    22
    发表于 2018-6-16 18:47:15 | 只看该作者
    过来学习一下
  • TA的每日心情
    慵懒
    2021-11-14 17:58
  • 签到天数: 999 天

    [LV.10]以坛为家III

    3

    主题

    904

    回帖

    15万

    积分

    状元

    Rank: 9Rank: 9Rank: 9

    积分
    152378

    灌水大神章

    23
    发表于 2018-6-16 19:24:52 | 只看该作者
    这个要好好学习下
    正则看不懂,哎。。。。。。。。。。
  • TA的每日心情
    开心
    2018-6-20 16:04
  • 签到天数: 1 天

    [LV.1]初来乍到

    3

    主题

    9

    回帖

    71

    积分

    白身

    Rank: 1

    积分
    71
    24
    发表于 2018-6-20 19:56:03 | 只看该作者
    看看啊。这个应该是非常好的。XUEXIB LA
  • TA的每日心情
    奋斗
    2020-7-12 05:59
  • 签到天数: 97 天

    [LV.6]常住居民II

    16

    主题

    585

    回帖

    2万

    积分

    禁止发言

    积分
    21266
    25
    发表于 2018-6-25 16:42:23 | 只看该作者
    谢谢garypang 实在是太感谢了 谢谢 对我帮助很大 可以自己diy了