正则表达式在外语教学及研究中的应用.docx
《正则表达式在外语教学及研究中的应用.docx》由会员分享,可在线阅读,更多相关《正则表达式在外语教学及研究中的应用.docx(7页珍藏版)》请在冰点文库上搜索。
正则表达式在外语教学及研究中的应用
正则表达式在外语教学及研究中的应用
摘要:
正则表达式的应用贯穿于基于语料库的外语研究与教学实践,从语料准备、语料标注、到建库、库文件管理、语料检索都离不开这种功能强大的形式语言。
研究通过示例介绍了正则表达在语料处理、语料库课堂教学及基于语料库的个性化研究的三个主要方面的应用,并针对初学正则表达式的外语研究、教学人员给出了编写建议。
关键词:
正则表达式;语料库;检索;编写原则
电脑技术和因特网的普及使许多研究者可以在很便捷地获取大量语料,创建自己的各种单语、多语、平行甚至对比语料库。
但是在笔者自己的建库实践过程中发现,很多原始文本常常包含大量噪音(各种不需要的符号、内容及格式等),典型的问题就是文本中含有大量空白字符、换行符、中英文加杂、格式不整齐。
要对大量文本中类似问题进行处理,简单的文本查找和替换(如Word中的查找和替换操作)显然不能满足要求,但是这些任务却可以由正则表达式来帮助我们完成。
下面我们结合实例情况来说明正则表达式在语料库建库、标注等预处理中的应用。
1利用正则表达式清除文本噪声
以一例未处理原始语料作为说明。
我们可以看出该语料中存在大量空行、换行符、还有些以连续虚线作的分界符等。
对《论语》中的一个章节、一个段落我们当然可能以手工很快清除,但是对于一部完整的、甚至是多种版本的《论语》如果没有电脑辅助而采取纯手工清除文本噪声,那将是不可思议的。
文本编辑软件EditPadPro与PowerGrep⑤同属JGSoft产品,很多程序员和计算语言学专家、研究者对该这两项产品再熟悉不过了。
EditPadPro强大的支持正则表达式能力,使它在文本处理程序中独树一帜。
我们用正则表达式在EditPadPro中对它进行降噪。
第一步:
删除文本内多余空行及换行符,使文本按自然段显示。
这时我们按第2节中提及的表达式在EditPadPro中输入查找对话框输入“^(.*)$[\\r\\n]?
”,替换栏输入“\\1”,如图1就可得到我们想要的结果。
该表达式中“^(.*)$”的意义表示另一起行开始至该行末,而表达式“[\\r\\n]?
”则表示行末后的换行符,“\\1”表示替换的内容为第一个命名捕获组内(从左到右分别为\\1\\2\\3…)的内容,外加一空格。
第二步:
清除行首、行尾多余空格,对齐文本。
同样在查找对话框输入“^[\\t]+|[\\t]+$”,替换一栏输入为空,就可以清除行首行尾的多余空格。
表达式“^[\\t]+”表示位于行首的任意个空格字符,而“[\\t]+$”表示位于行尾的任意个空格字符,管状符“|”表示选择即无论行首或行尾的空格都去掉。
图1清除噪声后的语料
第三步:
清除文本中其他字符(各种特殊标记符及不需要文字部分)。
本语料片断中只有“-”一种符号,但是其他各种符号都有可能出现在语料中,如“@,#,%,$,&,■,【,】…”等诸多符号,在我们收集和加工语料时经常见到。
有的出现非常有规律,编写表达式也较容易一些,有的杂乱、散部全文,编写正则表达式则相对较难。
针对本样本,我们只需查找对话框内输入“-”,并替换为空则万事大吉。
但是常常我们的语料是中英文夹杂,中英文标点符号混用,而我们却只需要其中的英文或中文语料怎么办呢?
如下例:
同_p上述_b有关_vn的_u第二_m个_q历史性_n工程_n,_w就是_v在_p团结_a的_u非洲_ns大陆_n上_f建立_v坚强_a的_u制度_n体系_n,_w
Political_JJ,_,economic_JJand_CCsocial_JJinstitutions_NN2at_IInational_JJ,_,regional_JJand_CCcontinental_JJlevel_NN1..._...
即_v国家_n级_q、_w地区_n级_n和_c大陆_n级_q的_u政治_n、_w经济_n和_c社会_n机制_n。
_w⑥
用文本编辑软件EditPad打开需要处理的语料库文档,在查找框中输入表达式“()|_\\w+|[a-zA-z]|[>]|[,.?
:
;’’!
””-…]|(-{2})”,并替换为空则可将所有英文及词性标注清除。
上述表达式分成6个部分,“()”表示所有形如“”句首标记部分,“_\\w+”部分表示所有词性标注部分,而第3部分[a-zA-z]表达所有英文字母,以此可以查找出所有英文单词,第4部分“[>]”则表示所有形如“”的句尾、段尾标记,因为中间“s”或“p”可以由第3部分表达式标示出,第5、第6个表达式表示所有常见的英文标点。
通过这个组合,我们可以顺利地将所有本例格式的中英文夹杂文本整理为全中文。
至于要获取上例中全英文文本,必须将所有双字节的中文字符和中文标点及其他英文词性标注符号全部清除,因此我们可以编写如下正则表达式组合“()|[^\\x00-\\xff]|_\\w+|||[_,]”即可获得我们想要的结果。
“()”表达式部分表示样本中句首标记;“[^\\x00-\\xff]”表示所有双字节字符,即中文和中文标点;“_\\w+|||[_,]”表示样例中的句尾、段尾标记及英文原句中的多余的标记符“_,”。
2利用正则表达式进行语料标注
语料库的标注除了词性、句法标注需要专门的软件来进行外,很多其他类型的标注是可以借助正则表达式、利用电脑辅助完成。
我们下面以汉语语料库的句子、段落的标注为例来说明,有一点要指出的是下面我们示范的标注过程一般应是在词性、句法标注之后进行,本例中的样本未做词性、句法标注。
首先我们通过前面提及的清除空行或多余空白字符的表达式清除所有空行和空白字符,接下来进行段落标记。
以表达式“(^.)”进行查找并替换为“ \\1”(表示查找所有位于行首的字符,并替换为自身加上 标注符号),接下来以表达式“(\\W$)”进行查找,并替换为“\\1”(表示查找所有位于行尾的中文或标点字符,并替换为自身和)。
经过段落标注后的文本还可进行句子层级的标注,以便于统计平均句长。
汉语的句子一般是以句号、冒号、问号、感叹号结尾。
针对此特点,我们可以以此为依据撰写正则表达式,通过四个步骤来完成句子层级的标注。
首先我们输入表达式“([。
:
!
?
]+)”进行查找,并替换为“\\1”即在所有汉语句子级标点符号后加上句子标注符“”;接下来,输入“”查找,并全部替换为“”,给位于段落中间的句子加上句首标注符“”;接下则以表达式“ ”进行查找并替换为“ ”给位于段首句子加上句首标记符“”;最后我们以表达式“”进行查找,并全部替换为“”以删除段尾多余的句首标注符“”。
3基于语料库的课堂教学中正则表达式应用
语料库被广泛应用于语言教学中。
它可以用来在母语语料库中考证单词地道权威用法;可以通过检索来统计某一词汇的搭配情况;可以用来进行语篇、文体分析;可以直接用作课堂教材;甚至可以用来作为教师的资源库,建立以语料驱动的课堂教学模式。
当然,这一切都与语料库的检索有关。
而语料库的检索又与正则表达式有着莫大的关系。
笔者常在课堂上利用语料库的检索手段进行语篇、文体分析,也常利用检索手段出一些课文中的重点词汇的练习,以加深学生对课堂所学内容的理解。
限于篇幅,笔者仅从如何利用正则表达式,过行数据驱动的课堂英语教学,结合第二点:
如何快速从语料库中生成词汇练习供学生加深对所学词汇的理解,给出一个示例。
大学英语(全新版)综合教程第七单元中有一个词汇“conserve”。
很多老师在讲解这个词汇时都会提及另两个词汇“deserve”和“reserve”。
除了直观地通过关键词索引,在具体的语境中观察分析这些词的语义韵对他们进行区分外。
我们还可通过一些练习,让学生加深对一些易混淆词汇的理解。
这里需要对大量的语料库文件进行检索,而我们一直使用的EditPadPro需要打开每一个文件,这对于数量庞大的语料库来说显然不合适,因而我们使用其姊妹软件PowerGrep,它支持利用正则表达式进行多文件全文检索。
在查找对话框中首先输入正则表达式“(^.*)\\b(?
:
conserve+|reserve+|deserve+)\\b(.*$)”,然后点击“Search”按纽,默认情况下会显所有检索结果。
当然这些句子还只是含有我们要辨析的三个词的句子,还无法直接发挥作用。
将这些结果用PowerGrep命令栏上“results”弹出菜单中的“export”导出为文本文件,用EditPad打开。
这样做的好处是可避免误操作给语料库库文件带来不可恢复的更改。
用EditPad打开结果文件之后就可用查找与替换命令来将这些结果改造成练习题了。
查找对话框内依然输入“(^.*)\\b(?
:
conserve+|reserve+|deserve+)\\b(.*$)”,替换为“\\1_____\\2”,结果如图2所示。
图2利用正则表达式准备词汇辨析题
表达式“(^.*)\\b(?
:
conserve+|reserve+|deserve+)\\b(.*$)”表示所有含有中间有“conserve”,“reserve”及“deserve”的句子。
表达式中间部分“\\b(?
:
conserve+|reserve+|deserve+)\\b”表示以完整的单词匹配非捕获组中的所有字符。
替换表达式“\\1______\\2”表示匹配第一个命名捕获组加第二个命名捕获组,中间加上六个下划线符号。
4编写适当的正则表达式进行基于语料库的研究
从一般应用的实际来看,语料库的检索过程主要涉及到关键词索引、词语搭配关系及特定句型与结构的检索。
本文开始背景介绍部分中网友提出的第一个问题就属于关键词索引,第四个问题则属于不同词间相互搭配关系,第五、六个问题则属于句型与结构的检索问题。
直接的关键词索引、甚至特定句型的语料均可以未经词性、句法标注;但是一些结构,如双宾语结构则必须经过相应的句法标注,未经句法标注分析的句子是虽可检索出部分特定结构,但是实际上不够准确,可以说非常之难,即使使用正则表达式,很多检索出来的结果并不是想要的结果,如“said:
<:
>thelearningofhistory”从形式上看是一个双宾结构,但从语法上看却不是,计算机会检索出许多非双宾结构。
而至于如何利用正则表达式进行关键词检索及特定句型检索,下面各撷取一例进行说明。
以网友的问题“如何检索‘has,have,having,had’?
”为例,我们在SWECCL1.0未经标注的文本中用检索工具AntConc⑦来检索出我们想要的结果。
首先选取SWECCL1.0语料文件,然后选中搜索对话框旁的“regex”表示支持正则表达式检索,输入图中表达式“\\bha[s|d|ve]+\\b|\\bhaving\\b”,可以得出如图3所示结果。
当然,大家也可尝试“has|have|had|having”这样一个表达式,不过值得注意的是同样的文件,后一个表达式检索出来的结果比上一个多4个,为237个,因为后者可能包含诸如“haven’t”之类的词,所以前一个表达式用单词边界符号予以限定。
而要精确地检索出形如“it+be+adj/n+that”的句型也是不可能的。
但是我们可以利用正表达式大致获取近似的结果,再经过少量的人工校读,就可利用它们进行研究分析了。
如下图,在SWECCL1.0语料库WECCL部分库文件夹RAW目录下,选取所有“Years1-4Essays”文件夹中文本后,在AntConc中以表达式“\\bit(?
:
\\W+\\w+){1,6}\\W+that\\b”可以从库从检索中包括“it+be+adj/n+that”句型的句子,如图4所示。
图3利用正则表达图4利用正则表达
式检索动词“have”式提取“it+be+adj/n+that”句型
该表达式的意义是查找所有其中单词“it”和“that”间隔至少1个,至多6个词的句子。
因而当中可能含有一些“it”和“that”属于两个句子的现象,同时单词的间隔为什么设为极限6主要是该学习者语料库中设为7以后结果没有大的变化,因此无需向上提高单词的间隔了,针对不同的语料库,该间隔可能有所变化,理想的极限值需要检索时不断尝试。
例如,在以英语为母语的语料库如BNC或COCA中该单词值可能会高于6,在一定程度上,英语母语者的语言熟练程度或语言使用中的复杂程度无疑会高于以英语为第二语言的学习者。
5编写正则表达式的原则
如同前文所提及的一样,正则表达式本质上是一种形式语言。
因而正则表达式的编写无异于我们常规语言的造句。
一句语法正确、简练精确的正则表达式能让计算机程序准确高效地查找我们想要查找的文本。
那么正则表达式的编写的决窍在哪里呢?
首先,我们要熟悉正则表达式的相关字符的特定含义语料库的赋码集和语料文本的结构层次。
掌握正则表达式中各种字符、边界符、限定符、锚点符号和必要的高级正则句法是我们能够编写正确适用的表达式的不二法门。
只有熟悉这些规则与特殊符号含义我们才能知道不同的检索要求编写不同的检索表达式。
例如,“b\\has\\b”和“has”只有经验丰富的使用者才能区分各自的使用情况及产生的检索结果。
其次,各个击破,由远及近,从微观到宏观。
本文中提及的许多表达式均遵循了该原则。
例如3.2节中3个形近词的练习题的正则表达式的编写正是将总表达式分割成3块,即目标词前句子部分、目标词和位于目标词后句子部分。
3个微观的部分组成了包含3个目标词的句子。
接下来,根据需要进行组合。
正如作曲家将不同的音符排列成不同的序列就会产生不同旋律的曲子一样,表达式编写将不同的正则符号进行组合就会产生不同的检索结果。
这也是为什么同样一个检索要求,不同的编写者可能会编写出不同的表达式的原因。
以3.1.1节中清除中英文夹杂文本中所有英文及标点符号的表达式“()|_\\w+|[a-zA-z]|[>]”为例,实际上该表达式可以改写成“(<[\\x00-\\xff]+>)|[a-zA-Z_]”,该表达式比原表达式更简洁却不影响检索结果。
从不同的思路出发,在清除所有中文及中文标点时,亦可能将第二个表达式改写成“[^\\x00-\\xff]|_[\\w+\\p{p}]+|[]”。
因此说没有一成不变的正则表达式。
最后,研究者编写正则表达式时应奉行删繁就简的原则。
正则表达式的编写者应该时刻牢记在心的一条规则就是用最简单的形式,描述最复杂的语言。
美学无处不在,正则表达式编写中简单就是美。
毋庸置疑,简单并不是在编写过程中过于粗糙,致使结果偷工减料;追求简单的同时别忘了保持检索结果的精确,在二者之间寻求一种平衡。
参考文献:
[1]辛克莱(Sinclair,J.).语料库、检索与搭配(英文)[M].上海:
上海外语教育出版社,1999.
[2]FORTAB..正则表达式必知必会[M].杨涛,译.北京:
人民邮电邮版社,2007.
[3]GRAEMEK.AnIntroductiontoCorpusLinguistics[M].Beijing:
ForeignLanguageTeachingandResearchPress,2000.
[4]HUNSTONS.CorporainAppliedLinguistics[M].Cambridge:
CambridgeUniversityPress,2002.
[5]ASTONG.EnrichingtheLearningEnvironment:
CorporainEFL[A].In:
A.Wichmannetal.(eds.).TeachingandLanguageCorpora[C].NewYork:
Longman,1997.
[6]何安平.语料库语言学与英语教学[M].北京:
外语教学与研究出版社,2004.