wjl 发表于 2020-8-2 09:08:30

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

本帖最后由 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


yunhailin123 发表于 2020-8-2 13:12:26

本帖最后由 yunhailin123 于 2020-8-2 13:15 编辑

可以借鉴一下fearfare的朗文五,有很多是需要你肉眼观察上千条词条而写的,这个没有什么规律。
所以提取词组版的只有ff的朗文五,其他人很少有那个精力去手动提取词组,毕竟那么多词条,还得肉眼加上手工去写规则你也可以去看看garypang的提取朗文五词组完美版,反正花的心思不少,没有捷径可言

wjl 发表于 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种

Mandolin 发表于 2020-8-2 13:29:05

本帖最后由 Mandolin 于 2020-8-2 13:35 编辑

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

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

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


wjl 发表于 2020-8-2 13:37:55

本帖最后由 wjl 于 2020-8-2 13:42 编辑

Mandolin 发表于 2020-8-2 13:29
英语词典做得少,没遇到过楼主这样的处理需要。要我处理的话,我会把括号「()」和「/」的情况先后处理

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

Mandolin 发表于 2020-8-2 13:45:02

本帖最后由 Mandolin 于 2020-8-2 13:54 编辑

wjl 发表于 2020-8-2 13:37
我现在练手的《当代英语习语大词典(英汉双解)》应该没有这种情况,大多数「/」两侧都是单词,只有一些 ...
如果没有我说的那种情况,那用正则就可以实现。

Mandolin 发表于 2020-8-2 13:46:26

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

如果没有我说的那种情况,那用正则应该就能实现。(果然是在做那本词典,加油,希望作品完成后能分享,很期待)

wjl 发表于 2020-8-2 13:57:53

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

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

yunhailin123 发表于 2020-8-2 16:24:22

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

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

yunhailin123 发表于 2020-8-2 16:26:53

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

建议楼主抽一两个小时恶补一下python基础,只需把基本单位认清,语句怎样写,其实python已经是把代码人性化了,要是c++,过于苛刻。现在随便搜个教程稍微一学,现学现用

阿尔文 发表于 2021-9-28 10:57:48

本帖最后由 阿尔文 于 2021-9-28 11:04 编辑

你的例子说明写得很好,规则很清晰。这个问题不要直接去用正则,而是去用 python 中的正则,这样才好控制复杂性。
页: [1]
查看完整版本: 如何用EmEditor正则表达式进行词组拆分?