查看: 576|回复: 10
打印 上一主题 下一主题

[求助] 如何用EmEditor正则表达式进行词组拆分?

[复制链接]
  • TA的每日心情
    无聊
    2022-7-21 15:56
  • 签到天数: 216 天

    [LV.7]常住居民III

    25

    主题

    646

    回帖

    1万

    积分

    状元

    Rank: 9Rank: 9Rank: 9

    积分
    16738
    跳转到指定楼层
    1
    发表于 2020-8-2 09:08:30 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
    本帖最后由 wjl 于 2020-8-2 12:58 编辑

    如何用EmEditor正则表达式进行词组拆分?
    Al/A-one ;    P0001
    更改为
    Al/A-one ;    P0001
    Al;    P0001
    A-one ;    P0001
    ___________________________________________________
    quarrel (with sb) about/for/over ;    2313
    更改为
    quarrel (with sb) about/for/over ;    2313
    quarrel with sb about ;    2313
    quarrel with sb for ;    2313
    quarrel with sb over ;    2313
    quarrel about ;    2313
    quarrel for ;    2313
    quarrel over ;    2313
    ___________________________________________________
    dabble at/in/with
    更改为
    dabble at/in/with
    dabble at
    dabble in
    dabble with
    ___________________________________________________
    damn and blast (sb/sth)
    更改为
    damn and blast (sb/sth)
    damn and blast sb
    damn and blast sth
    damn and blast
    ___________________________________________________
    dance on/upon a rope/nothing
    更改为
    dance on/upon a rope/nothing
    dance on a rope
    dance upon a rope
    dance on a nothing
    dance upon a nothing
    ___________________________________________________
    dance on (the) air
    更改为
    dance on (the) air
    dance on the air
    dance on air
    ___________________________________________________
    dead/flat/stark calm
    更改为
    dead/flat/stark calm
    dead calm
    flat calm
    stark calm
    ___________________________________________________
    do/go/make the/one's round
    更改为
    do/go/make the/one's round
    do the round
    go the round
    make the round
    do one's round
    go one's round
    make one's round
    ___________________________________________________
    do (sb/sth) grace
    更改为
    do (sb/sth) grace
    do sb grace
    do sth grace
    do grace
    ___________________________________________________

    固定一种模式的话比较好处理,难度在于/和()的出现次数和位置不固定,可能连续出现,也可能分散出现,两者也可能混合在一起出现。示例文件链接: https://pan.baidu.com/s/18rt8d7KxYOsioihLEXxzfQ 提取码: qn3k。如果EmEditor正则表达式不可行的话,用python代码也行
    Al/A-one ;    P0001这种简单的可以用
    \b(\w+)\b/\b([\w-]+)\b(\s{1,});\tP(\d{4})
    替换为:
    \1/\2\3;\tP\4\n\1\3;\tP\4\n\2\3;\tP\4


  • TA的每日心情
    擦汗
    2022-3-25 11:07
  • 签到天数: 66 天

    [LV.6]常住居民II

    23

    主题

    510

    回帖

    3585

    积分

    贡士

    Rank: 6Rank: 6

    积分
    3585

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

    2
    发表于 2020-8-2 13:12:26 | 只看该作者
    本帖最后由 yunhailin123 于 2020-8-2 13:15 编辑

    可以借鉴一下fearfare的朗文五,有很多是需要你肉眼观察上千条词条而写的,这个没有什么规律。
    所以提取词组版的只有ff的朗文五,其他人很少有那个精力去手动提取词组,毕竟那么多词条,还得肉眼加上手工去写规则你也可以去看看garypang的提取朗文五词组完美版,反正花的心思不少,没有捷径可言
  • TA的每日心情
    无聊
    2022-7-21 15:56
  • 签到天数: 216 天

    [LV.7]常住居民III

    25

    主题

    646

    回帖

    1万

    积分

    状元

    Rank: 9Rank: 9Rank: 9

    积分
    16738
    3
     楼主| 发表于 2020-8-2 13:28:15 | 只看该作者
    本帖最后由 wjl 于 2020-8-2 13:30 编辑
    yunhailin123 发表于 2020-8-2 13:12
    可以借鉴一下fearfare的朗文五,有很多是需要你肉眼观察上千条词条而写的,这个没有什么规律。
    所以提取词 ...

    肉眼观察需要考验操作者的观察力和动手能力,可能使用python代码简单些吧,我有想法,但是编程功底不佳,我的想法是将词组先按空格拆分,如果有括号的话,则按空字符串和括号内字符串与别的单词链接组合到一起,这样就有两种情况;如果有两个连在一起的/的话,则将其按/拆分成三个单词,与别的单词链接组合到一起,这样就有三种情况。简单情况能处理的话,感觉用程序实现复杂情况也没问题才对呀。比如quarrel (with sb) about/for/over,括号2种,/3种,排列组合一下总共6种
  • TA的每日心情
    开心
    2019-8-21 19:27
  • 签到天数: 5 天

    [LV.2]偶尔看看I

    61

    主题

    627

    回帖

    16万

    积分

    状元

    Rank: 9Rank: 9Rank: 9

    积分
    162733

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

    4
    发表于 2020-8-2 13:29:05 | 只看该作者
    本帖最后由 Mandolin 于 2020-8-2 13:35 编辑

    英语词典做得少,没遇到过楼主这样的处理需求。要我处理的话,我会把括号「()」和「/」的情况先后处理,最后全处理完后去重

    个人感觉:「()」的情况还是不难处理的;「/」的情况不太好处理(因为可能存在这种情况『take some/a lot of doing』,会误拆成 take some lot of doing)

    还有,你这个索引是文本识别得到的?在处理之前建议一定要先排查下字符错误,并且统一下排版,把 txt 理顺,否则后面的处理很容易出问题


  • TA的每日心情
    无聊
    2022-7-21 15:56
  • 签到天数: 216 天

    [LV.7]常住居民III

    25

    主题

    646

    回帖

    1万

    积分

    状元

    Rank: 9Rank: 9Rank: 9

    积分
    16738
    5
     楼主| 发表于 2020-8-2 13:37:55 | 只看该作者
    本帖最后由 wjl 于 2020-8-2 13:42 编辑
    Mandolin 发表于 2020-8-2 13:29
    英语词典做得少,没遇到过楼主这样的处理需要。要我处理的话,我会把括号「()」和「/」的情况先后处理

    个 ...

    我现在练手的《当代英语习语大词典(英汉双解)》应该没有这种情况,大多数「/」两侧都是单词,只有一些全英文的不需要拆分的部分例外,所以刚开始设计正则表达式时可以按都是简单单词这种情况处理,最后通过选定范围替换或手动替换即可解决例外情况。示例文件是OCR识别文本,尚未校对,仅供设计正则表达式参考用。
  • TA的每日心情
    开心
    2019-8-21 19:27
  • 签到天数: 5 天

    [LV.2]偶尔看看I

    61

    主题

    627

    回帖

    16万

    积分

    状元

    Rank: 9Rank: 9Rank: 9

    积分
    162733

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

    6
    发表于 2020-8-2 13:45:02 | 只看该作者
    本帖最后由 Mandolin 于 2020-8-2 13:54 编辑
    wjl 发表于 2020-8-2 13:37
    我现在练手的《当代英语习语大词典(英汉双解)》应该没有这种情况,大多数「/」两侧都是单词,只有一些 ...

    如果没有我说的那种情况,那用正则就可以实现。
  • TA的每日心情
    开心
    2019-8-21 19:27
  • 签到天数: 5 天

    [LV.2]偶尔看看I

    61

    主题

    627

    回帖

    16万

    积分

    状元

    Rank: 9Rank: 9Rank: 9

    积分
    162733

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

    7
    发表于 2020-8-2 13:46:26 | 只看该作者
    wjl 发表于 2020-8-2 13:37
    我现在练手的《当代英语习语大词典(英汉双解)》应该没有这种情况,大多数「/」两侧都是单词,只有一些全 ...

    如果没有我说的那种情况,那用正则应该就能实现。(果然是在做那本词典,加油,希望作品完成后能分享,很期待)
  • TA的每日心情
    无聊
    2022-7-21 15:56
  • 签到天数: 216 天

    [LV.7]常住居民III

    25

    主题

    646

    回帖

    1万

    积分

    状元

    Rank: 9Rank: 9Rank: 9

    积分
    16738
    8
     楼主| 发表于 2020-8-2 13:57:53 | 只看该作者
    Mandolin 发表于 2020-8-2 13:46
    如果没有我说的那种情况,那用正则应该就能实现。(果然是在做那本词典,加油,希望作品完成后能分享,很 ...

    现在还看不到希望,只有3个人参与校对。感觉python字符串拆分方法最简单,不用懂正则表达式,跟人们的思考方法一致。用正则表达式的话,还得肉眼观察出所有模式,再设计相应的正则表达式,否则不知道如何区分和处理仅含()、仅含/、同时含有()和/,同时含有()和/并且()中也含有/,()和/出现一次或多次、连续出现、分散出现这些情况。只有一种固定模式还好设计,难在怎么一次查找替换所有情况
  • TA的每日心情
    擦汗
    2022-3-25 11:07
  • 签到天数: 66 天

    [LV.6]常住居民II

    23

    主题

    510

    回帖

    3585

    积分

    贡士

    Rank: 6Rank: 6

    积分
    3585

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

    9
    发表于 2020-8-2 16:24:22 | 只看该作者
    wjl 发表于 2020-8-2 13:28
    肉眼观察需要考验操作者的观察力和动手能力,可能使用python代码简单些吧,我有想法,但是编程功底不佳, ...

    但是要碰见有的词条是这样的 go'es by sb ,这个词组是瞎掰的,只是举个例子,有这样的,你还得再加一个,不管拆分词组还是要找词组,最终目的都是要找到词组的一些规律,即通过观察大量的数据才能下手
    也因为这个没有规律,耗时费精力,所以论坛专门弄词组的屈指可数,数据还比较老了。
  • TA的每日心情
    擦汗
    2022-3-25 11:07
  • 签到天数: 66 天

    [LV.6]常住居民II

    23

    主题

    510

    回帖

    3585

    积分

    贡士

    Rank: 6Rank: 6

    积分
    3585

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

    10
    发表于 2020-8-2 16:26:53 | 只看该作者
    wjl 发表于 2020-8-2 13:57
    现在还看不到希望,只有3个人参与校对。感觉python字符串拆分方法最简单,不用懂正则表达式,跟人们的思 ...

    建议楼主抽一两个小时恶补一下python基础,只需把基本单位认清,语句怎样写,其实python已经是把代码人性化了,要是c++,过于苛刻。现在随便搜个教程稍微一学,现学现用
  • TA的每日心情
    开心
    2021-12-8 06:17
  • 签到天数: 68 天

    [LV.6]常住居民II

    1

    主题

    119

    回帖

    1524

    积分

    解元

    Rank: 5Rank: 5

    积分
    1524
    11
    发表于 2021-9-28 10:57:48 | 只看该作者
    本帖最后由 阿尔文 于 2021-9-28 11:04 编辑

    你的例子说明写得很好,规则很清晰。这个问题不要直接去用正则,而是去用 python 中的正则,这样才好控制复杂性。