NLP学习(正则化)

来源:互联网 发布:kali网络摄像头 编辑:程序博客网 时间:2024/05/23 20:56

学习自 Speech and language processing 3rd ed
https://web.stanford.edu/~jurafsky/slp3/

注:以下双斜线中间的都表示匹配模式 /*/

1.基础正则表达式模式

输入你想要匹配的字符
这里写图片描述
注意:正则表达式是大小写敏感的,若现在想匹配W或w,可以使用 /[Ww]/ 做匹配
方括号[]中间的内容只要匹配其中的一个就算匹配成功
这里写图片描述

若觉得此处的/[1234567890]/过于麻烦,可以简化为/[0-9]/,就是在中间加一短横,同样,所有的大写字母可以简化成/[A-Z]/

这里写图片描述

那如果我们想要匹配的是 非大写字母 呢,我们可以在中括号最前面加一个^符号,比如/[^A-Z]/ 就表示不匹配所有的大写字母,如果,^符号在匹配段的中间的话,^表示自己本身,见下图
这里写图片描述

注意:在匹配没有方括号[]表示的模式时,就是匹配该模式本身,^表示的是自己本身,而不是表示非,再者,若^在[]里面,但不是在开头,^也表示自己本身

若我们想匹配 woodchuck和woodchucks,怎么办呢?我们可以使用 ?, ?表示之前的一个字符由零个或者一个,见下图

这里写图片描述

那么,如果我们想匹配如下字符:
baa!
baaa!
baaaa!
baaaaa!

我们可以使用星号 * ,表示之前的一个字符有零个或者多个,因此,若我们要表示连续一个或多个a,我们就要使用 /aa*/ 的方式匹配,为什么不能用a*来匹配呢?这样有时会十分不方便,于是我们就有了另外一个符号 加号+ ,加号+表示一个或多个
现在,若我们想匹配上面的那段字符,可以使用/baaa*!/ 或者 /baa+!/ 进行匹配

另外一个重要的符号是 点号 . ,点号是一个通配符,表示任何单个字符(除了回车符),见下图
这里写图片描述

那么,现在,我们可以将点号和星号联合起来,表示任意长度的任意符号串了,
比如,我们想要匹配开头和结尾都是www的行,我们可以用 /www.*www/

锚(anchor)

又轮到 ^登场了,^可以匹配句子开头,比如我们要找以 The 开头的句子,使用 /^The/ 进行匹配,另一个anchor美元符号 /er/就表示以er结尾的句子,那我们要匹配以句点 . 结尾的句子呢?用/./ /\./的方式匹配以句点结尾的一行。

还有另外两个anchor,\b 和 \B ,\b单词分隔符,\B匹配非单词分隔符,比如 /\bthe\b/ 匹配单词the而不匹配other,注意,此处的单词分隔符为除了字母,数字,下划线以外的所有符号,包括空格 \t \n $%^&等等.

2. 析取(disjunction),组合(grouping),优先关系(precedence)

假如我们现在希望能搜索字符串cat或者dog,我们如何搜索(想想我们为什么不能用/[catdog]/ ?) ,我们需要一个新的操作符,析取操作符,也叫管道(pipe symbol) | ,模式 /cat|dog/匹配cat或者dog
再假如,我想搜索 guppy或者他的复数形实guppies,我们不能使用/guppy|ies/,这时由于guppy在管道操作符 | 上有优先关系,我们使用 /gupp(y|ies)/,将匹配gupp开头,以y或ies结尾的单词

优先级的表如下:
这里写图片描述

由于星号比字符串有更高的优先级,所以/the/匹配theee… 而不是匹配thethe…,我们可以用/(the)*/来匹配thethe

3.一个简单的例子

我们要匹配英文单词里面的the
第一个想到的是/the/,但是,我们还想匹配The,因此可以用

/[Tt]he/

但是,这样也会匹配到other,我们可以用

/\b[Tt]he\b/

若我们想匹配到the25,_the,我们继续改进

/[^a-zA-Z][Tt]he[^a-zA-Z]/

但是这又带来了一个问题:模式前面的[^a-zA-Z] 要求必须匹配一个非字母的字符,因此,若我们要匹配的the处于行首,则匹配不到,因此我们可以用 /^|[^a-zA-Z]/来匹配the的前面,那么,the的结尾处同理,我们得到如下表达式

/(^|[^a-zA-Z])[Tt]he([^a-zA-Z]|$)/

4.高级操作符

比如大括号{},/a.{3}z/ 匹配 a…z ,a和z中间是三个点的字符串,有且只能有三个点
在大括号里写两个数字,表示一个范围,/a.{3,4}z/ 匹配a…z a….z,而第二个数字不写,/a.{3,}z/,表示至少有三个句点。
最后,前面的特殊操作符*.?等当要表示其本身时,使用转义字符,在前面加一个 \
详细解释见下图
这里写图片描述
这里写图片描述

这里写图片描述

0 0
原创粉丝点击