正则表达式在语料库建库与检索中的应用
2011-09-28刘瑞
刘 瑞
(中州大学 外国语学院,郑州450044)
正则表达式在语料库建库与检索中的应用
刘 瑞
(中州大学 外国语学院,郑州450044)
经过自20世纪60年代至今近50年的发展,语料库的种类、应用领域及相关技术正在不断扩展。然而,语料库的建设与检索常常涉及文本预处理、文本标注、词表制作、字符块匹配、搭配分析、句型查找等诸多模式匹配问题,这对于绝大部分语言研究者和外语教学者来讲是一个相当大的技术难题,也是制约语料库建设与推广运用的主要障碍。在语料库建库与检索中,我们常常可以利用功能强大的正则表达式结合相关检索软件,对文本进行模式匹配,从而准确、高效的提取各种所需信息。本文主要探讨如何使用正则表达式解决语料库建库与检索中的模式匹配问题。
语料库;正则表达式;建库;检索
一、引言
语料库(corpora)是应用计算机技术对海量自然语言材料进行处理(包括预处理、语法自动附码、自动句法分析、语义分析等)、存储,以供自动检索(retrieval)、索引(concordance)以及统计分析的大型资料库。它是为一个或多个应用目标而专门收集的、有一定结构的、有代表性的、可被计算机程序检索的、具有一定规模的语料的集合。经过自上世纪60年代至今近50年的发展,语料库的种类、技术和应用领域正在不断扩展。
Sinclair在2003年语料库语言学国际会议上指出,20世纪90年代末大型语料库建设的势头已缓,代之而起的是大批小型语料库。随着计算机、网络及其他软硬件技术的飞速发展,语料库建设变得越来越容易。大量web文本以及通过各种电子媒介发行的电子出版物为收集语料提供了极大的便利。建立语料库已经不再是语言学家与技术开发专家的专利,一般语料库研究者和外语教学人员已经完全可以根据自己的需要自行建立起中小型语料库。然而语料库的建设与检索涉及到文本预处理、文本标注、词表制作、字符块匹配、搭配分析、句型查找等诸多模式匹配问题,同时,相关索引软件的开发对于绝大部分语言研究者和外语教学者来讲更是一个相当大的技术难题,这些都成为制约语料库建设与推广运用的主要障碍。
正则表达式(regular expressions,简称regex或regexp)是计算机汇编语言中的一种技术,用于匹配文本中的字符串。它具有特殊属性,可以实现高效查找和匹配字符串。因此,如何使用正则表达式解决语料库建库和检索中的模式匹配问题是推动语料库发展中所必须进行的有益探索。
二、正则表达式与语料库的建设与检索
语料库的开发和建设是一项庞杂的工程,它包括语料库的构建原则、语料选择、文本分类、文本格式、文本预处理等问题,而文本预处理是语料库建设中需要特别考虑和解决的问题。文本预处理,有时也称文本清理或预加工,主要包括语料文本的清理与语料文本的标注。通过网络、手工录入、扫描识别等方法获得的文本存在各种不合规范的符号、格式等,只有对问题文本进行清洁整理才能保障文本赋码的正确性以及语料检索的精确性。同时,对语料库文本进行标注,可以对文本进行必要的分类,这为灵活提取文本进行研究提供了极大的便利。运用正则表达式,我们既能迅速地对不规范的文本进行批量处理,又可以轻松实现对批量文本的标注。而在对语料库的索引中,正则表达式具有更广泛的应用价值,如文本查找、替换、统计等批量处理功能是检索语料库中句法相关语言现象的必备技术。
目前有许多软件支持正则表达式的模式匹配,如Power-GREP、EditPad Pro、UtrlEdit、Editplus、Emeditro、RegexBuddy、Antconc等。其中PowerGREP的文本查询和检索功能比较强大,在本文中我们主要使用PowerGREP进行演示,有的地方为了演示方便则使用EditPad Pro。
三、正则表达式在语料库建库中的应用
(一)文本简析
语料库的主要研究对象是文本,通过对文本的处理分析来寻找语言的规律和意义。文本数据大体可以分为两种:纯文本和标注文本。纯文本只有文字,没有其他辅助或标注信息,如图片、视音频等。Leech指出,对语料库进行标注可以为语料库带来增值,标注已成为语料库最重要的基本规范之一。标注文本分为两类:一类是对文本的属性和特征等进行信息标识,最常见的就是网页文本(含有许多非文本元素和html标签),或者是经过xml标注的语料库中的文本(含有许多自定义xml标签);另一类是对文本中的字符进行词性赋码标注,如BNC语料库pos赋码。
在语料库建库过程中,文本处理的流程如图1所示:
图1 语料库建库流程图
(二)建库过程中文本预处理
文本预处理是语料库建库过程中的重要组成部分,预处理效果的优劣直接影响到语料库的质量。传统的方法是通过编程,程序员预先设定各种情况的处理办法,让程序分析过滤文本,这样可操作性不强且代价太高。使用正则表达式来消除噪音,可以让文本预处理更优化、更灵活。一般有两种方法:一是利用查找垃圾信息,并替换为空;另一种是通过查找收集有用数据,来提取有用信息。使用哪种方法更好,关键看素材本身。如果垃圾信息容易匹配,就用第一种方法,如果有价值信息容易识别,就用第二种方法,也可以两者结合使用。为了保证质量,达到效果,使用两种方法都不必一步到位,可以循序渐进,一次匹配一部分。
目前语料库的建库素材大部分取自于互联网或各种电子出版物(光盘、电子书籍等),存储格式大部分为网页(.htm/.html/.xhtml等)、word(.doc)文档、电子书(.chm)等。而这些文本源含有大量的非文本元素和排版信息,如:图片、视音频、表格、动画、html标注、列表等。首先把这些素材中的非文本元素过滤掉,转存为txt记事本格式;然后通过正则表达式,去除排版信息和一些冗余信息,如空行等。
如何剔除这些我们不想要的标记,抽取有价值的信息内容呢?目前也有一些软件直接转换网页文件为txt文本,但是效果都不太理想。由于网页中有html、css、script代码等多种标签,另外它们还相互嵌套,所以其源代码会有一些复杂多变的样式,只能具体情况具体分析。当然最直接也是最好的办法就是在浏览器显示下复制粘贴到记事本,然后再作处理。比较通用的匹配HTML标记的正则表达式为:“<(S+)(s[^>]*)? >[sS]* < /1s* >”。
语料素材在处理中,由于其原排版显示需要、处理转存等,会造成一些多余的空行或文本首尾大段的空白字符,这些在文本预处理时必需删除掉,可以通过查找替换为空的方式来删除它们。匹配空白行的正则表达式为:“ s* ”或者“^s*$”;匹配首尾空白字符的正则表达式为:“^s{3,}|s+$”。
在语料素材中,英汉混排是很常见的,要分离其中的汉语或英语文本就比较复杂。由于文本自身的复杂性,要想写出一个万能的表达式达到理想效果,几乎是不可能的。所以我们也要结合文本实际情况,尽可能的优化表达式。如果要匹配文本中的英语,就可以根据正则表达式中给出的各种元字符,匹配文本中的所有英语字符(字母、数字、下划线、英语标点符号等),如使用表达式:“[a-zs_d-,.?!"′]”基本能匹配出英语行,使用者在实际使用过程中,稍作修改即可。图2是在EditPad Pro中所进行的在中英文共现文本中匹配英语行的演示。
图2 匹配英语行
计算机的文本存储有多种编码格式,如:ASCII、UTF-8、Gb2312等,其中UTF-8和Gb2312都支持汉字显示(或韩语、日语等),在这些编码中,每个汉字都对应一个唯一的字符,由此表达式“[u4e00-u9fa5]”可以匹配所有的中文字符,再加上中文标点符号,就能匹配文本中的中文行。图3为在EditPad Pro中所进行的在中英文共现文本中匹配中文行的演示。
图3 匹配中文行
文本存储格式不同、内部样式多变、非文本元素混排等等这些文本自身的复杂性因素,使得文本预处理必须具体情况具体分析,正则表达式极强的可操作性和灵活性正好满足这一要求,从而使语料文本在文字符号、空格段落、标点符号等方面统一规范,便于以后语料库进行文本标注、词汇分析以及搭配统计。
(三)文本标注
如图1所示,纯文本语料收集完成之后,在入库前,要进行语料的信息标注,如:文本作者、出处、时间、领域等。目前使用的标记语言有SGML、XML、HTML等,本文以XML标注为例,演示如何使用正则表达式查找替换功能对语料进行批量标注。首先设计标注方案如下:
分析上面标注样例可知,信息标注的最外层标签是<text_head>,其中包含两层信息:头部信息<text_head>和文本自身<text_body/>,头部信息包含文本一些属性信息(作者、文本源等)。文本中使用<p>,</p>来标注段落,属性id标注段落标号。
标注分两步完成,首先要对文本段落标注和编号。使用PowerGREP软件批处理,查找表达式:“^(.+)$”,替换表达式:“<p no=”%MATCHSECTIONN%“>1</p>”。查找结果如图4。
PowerGREP3.0以上版本除了支持正则表达式中的所有符号之外,还另外提供一些特殊表达式,表示文件的文件名、路径等信息,如上面对段落标注编号,具体可参考PowerGREP帮助文档PowerGREP Reference中的Match Placeholder和Path Placeholder两部分。
然后标注头部信息,即<text_head/>部分。在正则表达式中,“A”和“z”分别匹配文件头和文件尾,由此设计查找表达式:“A(.*)z”(句点匹配换行),替换表达式为:
</text>
其中“1”表示查找表达式中第一个括号部分的内容,即文本。这一步也是批处理,省去了每个文件单独标注的麻烦。最后手工往头部信息标签里填写文本信息。
图4 文本段落标注
四、正则表达式在语料库检索中的应用
在语料库研究应用中,目前已开发出许多专业软件,如Wordsmith、Antconc等,包括上文提到的PowerGREP,这些软件都是单机运行的检索工具,并支持正则表达式。只要我们知道标注格式,即可利用正则表达式对语料库进行检索,满足各种检索需求。同时,还可以根据研究需要,进一步扩展功能。下面我们使用正则表达式,就语料库研究中几个常用功能进行探讨分析。
(一)连续文本块检索
连续文本块,可以是一个词缀、单词、词组、短句等。正则表达式利用模式匹配来检索文本中符合要求的内容。
如果确定要搜索某个字符串,直接输入此字符串即可。如:搜索“the”这个字符串(正则表达式:the),它会把文本中的所有含有“the”的单词都匹配出来,结果可能就是:the、The、there、farther、ohter、breathe 等(可以设定大小写)。如果想要的结果是一个完整的单词,而不是单词的一部分,可以使用词边界符“”,正则表达式可写成“the”。相反,如果确定输入的字符串“the”是单词的一部分,可使用非词边界“B”。如要求出现在词首,则为“w+theB”、出现在词尾则为“Bthew+”、在词中则为“BtheB”,其中w匹配所有字母、数字和下划线。我们要理解正则表达式中这些元字符的涵义,结合实际研究需求,具体情况具体分析,灵活运用。
在PowerGREP软件中控制结果显示方式,可以呈现不同效果,如所在文本、上下文、排序、统计信息等,下面举例以示说明。在英语文本中,一个词会出现多种形式,如名词的复数(-s/-es)、形容词(-ful)及副词(-ly),动词的过去式或过去分词(-ed)及现在进行时(-ing),形容词的比较级和最高级(-er/est),还有加前缀(trans-/un-)、后缀(-ment/-tion)等。在英语教学和研究中,我们可能需要对它们进行统计分析,但凭个人想像或手工查找很难达到目的,且缺乏实证,借助正则表达式,那就轻而易举了。首先,我们要确定该词可能会以哪些形式出现在文本中,如success,它在文本中可能出现的形式有:success/successful/successfully/succeed,然后利用正则表达式的词边界“”和选择“|”,此正则表达式为succe(ss|ful|fully|ed)。
(二)非连续短语(句型)检索
上面我们匹配的内容都是连续的,而在英语文本中,有很多固定搭配是非连续的,如非连续短语或一些句型结构等。
如果要搜索词word1、word2在文本中临近共现的情况,完整的正则表达式为:word1W+(?:w+W+){1,6}word2 ,或者写成:word1(w+W){1,6}word2。其中{1,6}要求word1、word2之间出现词语至少有1个,最多6个。
如要检索It is+过去分词+that…句型结构,输入正则表达式“it isw+that”,很明显这样会检索出许多不符合要求的内容,如:It is well-known that...。由于过去分词多以ed结尾,故it isw+ed that,就可以检索出:It is reported that.../It is predicted that...等,但许多过去分词是不规则变化,如:It is known that...,这样的内容会被漏掉。
上述示例都是基于纯文本的检索,如果检索标注语料库(如pos词性赋码标注),由于语料经过特殊标注,我们可以根据标注写出功能更强大的正则表达式。
(三)词语索引
词语索引是语料库研究的最基本要求之一。词语索引基本意义是把搜索词或词组按字母或频率顺序排列,与其所在语境一同展示。
一级词表正则表达式为:w+,使用PowerGREP可以很容易实现,不过要想看到直观的词频表,在结果栏中选择显示方式:Display files and matches:Matches without context,Group search matches:Per unique match(多篇文本统一显示,如果要单篇文本独立显示,则选Per file,then per unique match),如图5所示。
图5 一级词表显示结果
二级词表正则表达式:w+(w+),删除原文本中第一个单词,输入此正则表达式,把生成两个词表放在一起就是全部二级词表。
三级词表正则表达式:w+w+w+,删除原文本中第一个单词,输入此正则表达式,再删除原文本中第二个单词,再次输入此正则表达式,最后把生成的三个文件合在一起即可。
五、结语
随着语料库语言学的迅速发展,语料库与计算机技术结合得越来越紧密,语料库资源与技术在外语教学中具有极大的使用价值与开发前景。广大语言工作者只有掌握相关技术手段,才能最大程度地使用语料库,从而发挥语料库更大的潜力。
通过以上论述与演示,我们可以看出,正则表达式能够很好地解决语料库建设与检索中的模式匹配问题,是进行建库与检索的必备技术。运用正则表达式,结合相关检索软件,语言工作者可以根据自己的需求建立语料库并对语料库检索运用自如,这不仅能大大提高建库与检索的操作效率,而且操作形式也更加灵活。因此,运用正则表达式是解决语料库建设与检索中模式匹配问题的有效途径。
正则表达式功能强大,使用者要领会正则表达式每个元字符的涵义,灵活使用。在实际应用中可能还会遇到其他复杂情况,使用者可根据上面的讨论分析,举一反三,定能得心应手。
[1]杨惠中.语料库语言学导论[M].上海:上海外语教育出版社,2002.
[2]李文中.语料库、学习者语料库与外语教学[J].外语界,1999(1).
[3]梁茂成,李文中,许家金.语料库应用教程[M].北京:外语教学与研究出版,2010.
[4]梁茂成.词性赋码语料库的检索与正则表达式的编写[J].中国外语教育,2009(2).
[5]卫乃兴,李文中,濮建忠.语料库应用研究[M].上海:上海外语教育出版社,2005.
[6]甄凤超,张霞.语料库语言学发展趋势展望:2003语料库语言学国际会议综述[J].外语界,2004(4).
(责任编辑 刘杨)
H319
A
1008-3715(2011)01-0121-05
2010-12-26
刘瑞(1982—),女,硕士,河南郑州人,中州大学外国语学院教师,研究方向为应用语言学、语料库与外语教学。