首页 理论教育 使用正则表达式的语料检索

使用正则表达式的语料检索

时间:2022-04-07 理论教育 版权反馈
【摘要】:正则表达式使用一系列元字符。现在,我们可以使用规则表达式对汉语进行检索。

正则表达式使用一系列元字符(metacharacters,见附表)。元字符看上去复杂(如“p(a|o)?rt”),实则繁而不乱,遵循着明确的规则,更没有想象的那般深奥。如在表达式“p(a|o)?rt”中“|”表示二选一(a或者o),“?”表示匹配前面的子表达式零次或一次。所以可以检索到part,port这类的词汇。使用正则表达式还可以检索到词语串,如语料库中“story_NN has_VBZ it_PRP that_IN”一类的表达可以使用以下形式检索:

\b\S+/N*\b\s\b\S+_V*\b\s\bit_PRP\b\s\bthat_IN\b

同时还能检索到“rumor had it that”、“legend has it that”、“word has it that”等语言实例。

3.2.1 常用元符号

在编程中使用的正则表达式元字符(metachracter)很多,其中的一些元字符不适用于汉语,有些则需要调整。我们这里只介绍汉语语料检索时常用的元符号。根据使用经验,汉语语料库检索时常用以下元字符(更多的元字符见附表7):

“\bx\b”表示一个汉语词,如“\b我们\b”,能检索到“我们”这个词。而“\b吃”由于没有使用“\b”定义词的结束,则能检索到“吃”、“吃亏”、“吃苦”等字串。

“\w”可用来检索词中的汉语字符,如“\b\w亚\b”能检索到“尼亚”;“\b\w+亚\b”可以检索到“阿米莉亚”;而“\b爱\w+亚\b”能检索到“爱米莉亚”。

“\S”也能表达汉语词,比如,“\b\S+\b”表示一个完整的汉语词(如果有标注可以连词性标注一起检索出来,如“工作/v”)。但“\w”用起来就不方便,因为“\b\w+\b”可能检索到汉语的词,也有可能检索到英语的字母(包括词性标注)。为避免不便,在双语文本里一般不用“\w”检索汉语词。

“\s”表示一个空格。如果汉语语料已经分词或在字符间添加空格,使用\s会使检索更加方便。如:在有POS赋码的语料里检索与“房间里挂满了照片”、“台上坐着主席团成员”结构相似的句子框架,就可用下面的表达式(POS标注为“/*”):

(2)(\b\S+/n\b\s{1,})(\b\S+/f\b\s{1,})(\b\S+/*\b\s{1,}){0,2}(\b\S+/v\b\s{1,})(\b\S+/u\b\s{1,})(\b\S+/m\b\s{1,}){0,2}(\b\S+/*\b\s{1,}){0,4}(\b\S+/n\b\s{1,})

看起来复杂的表达式其实很规则:多次出现的“(\b\S+/n\b\s{1,})”代表一个独立的词;“/n”、“/f”、“/v”表示词性;“/*”表示任何词性标注或者无词性标注;“\s{1,}”表示语料库里词与词之间有一个以上的空格。

这样,上面的表达形式用汉语表达出来,从左到右的线性排列就是:名词+方位词+任意词(最多两个或者零个)+动词+助词+数量词(一个或者没有)+任意词(零个或者最多两个)+名词。这样,在特定的语料库里就可能检索到类似下面的存在句表达:

(3)山坡上生长着绿油油的庄稼。

淡水水域里栖息着上百种蚌类。

3.2.2 汉语检索使用的特殊元符号

正则表达式的元符号系统把汉语字符归入非英语字符,这样就有不少可以匹配汉语的元字符。如,在Antconc3.2.2w上能匹配汉语字符的元字符有以下几种:

(4)a.[^\x80-\xff]

b.[^\u Ee00-\u9Fa5]

c.[^\x00-\xff]

d.[^a-z A-Z0-9]

使用以上四种元字符检索汉语词时通常要添加+,但除了[^\x00-\xff],其他三种元字符都不够精确检索汉语词。如,“\b[^\u Ee00-\u9Fa5]+/*\b”可能会检索到多个词:“闹哄哄/z的/u”。由于不同软件对于正则表达式有不同的定义,我们只能说在Antconc中推荐使用“[^\x00-\xff]”检索汉语字符。

当然,更简单的表达汉语字符的元字符是“\S”。需要说明,“[^\x00-\xff]”和“\S”都代表一个字符,但前者只代表汉语字符,而“\S”能代表英语和汉语字符。

现在,我们可以使用规则表达式对汉语进行检索。如果被检索汉语语料已分词、标注并以下面的方式存储(使用早期的ICTCLAS汉语分词标注软件标注):

<p>领班/n 的/u 坐/v 在/p 戏台/n 上/m 幌子/n 前面/f

,/w 对/p 着/u 底下/f 闹哄哄/z 的/b 市场/n ,/w 瞧/v

了/u 半晌/m ,/w 心里/s 不/d 觉/v 悲惨/a 起来/v 。/

w 市场/n 上/m 的/u 人/n 有的/r 在/p 吃喝/v ,/w 有

的/r 在/p 调情/v ,/w 有的/r 得/v 了/u 新/a 宠/n 就/d

丢/v 了/u 旧/a 爱/n ;/w 有/v 在/p 笑/v 的/u ,/w

也/d 有/v 在/p 哭/v 的/u ,/w 还/d 有/v 在/p 抽烟/v

的/u ,/w 打架/v 的/u ,/w 跳舞/v 的/u ,/w 拉/v 提琴/

n 的/b ,/w 诓骗/v 哄人/v 的/b 。/w </p>

那么,可以使用表3-1所列的元字符检索汉语:

表3-1 汉语检索基本元字符

当然,正则表达式可以和普通汉语字符混合在一起检索。如:“\b高[兴|大]\b”可以同时检索到“高兴”、和“高大”;“\b快快[\^x00-\xff]{2}\b”可能会检索到“快快乐乐”。

以上的汉语元字符“[^\x00-\xff]”也可以用“\S”来代替,但“\S”在双语语料库里不能保证检索到的都是汉语字符,故宜慎用。

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈