劉 瑞
(中州大學(xué) 外國語學(xué)院,鄭州450044)
正則表達(dá)式在語料庫建庫與檢索中的應(yīng)用
劉 瑞
(中州大學(xué) 外國語學(xué)院,鄭州450044)
經(jīng)過自20世紀(jì)60年代至今近50年的發(fā)展,語料庫的種類、應(yīng)用領(lǐng)域及相關(guān)技術(shù)正在不斷擴(kuò)展。然而,語料庫的建設(shè)與檢索常常涉及文本預(yù)處理、文本標(biāo)注、詞表制作、字符塊匹配、搭配分析、句型查找等諸多模式匹配問題,這對(duì)于絕大部分語言研究者和外語教學(xué)者來講是一個(gè)相當(dāng)大的技術(shù)難題,也是制約語料庫建設(shè)與推廣運(yùn)用的主要障礙。在語料庫建庫與檢索中,我們常常可以利用功能強(qiáng)大的正則表達(dá)式結(jié)合相關(guān)檢索軟件,對(duì)文本進(jìn)行模式匹配,從而準(zhǔn)確、高效的提取各種所需信息。本文主要探討如何使用正則表達(dá)式解決語料庫建庫與檢索中的模式匹配問題。
語料庫;正則表達(dá)式;建庫;檢索
語料庫(corpora)是應(yīng)用計(jì)算機(jī)技術(shù)對(duì)海量自然語言材料進(jìn)行處理(包括預(yù)處理、語法自動(dòng)附碼、自動(dòng)句法分析、語義分析等)、存儲(chǔ),以供自動(dòng)檢索(retrieval)、索引(concordance)以及統(tǒng)計(jì)分析的大型資料庫。它是為一個(gè)或多個(gè)應(yīng)用目標(biāo)而專門收集的、有一定結(jié)構(gòu)的、有代表性的、可被計(jì)算機(jī)程序檢索的、具有一定規(guī)模的語料的集合。經(jīng)過自上世紀(jì)60年代至今近50年的發(fā)展,語料庫的種類、技術(shù)和應(yīng)用領(lǐng)域正在不斷擴(kuò)展。
Sinclair在2003年語料庫語言學(xué)國際會(huì)議上指出,20世紀(jì)90年代末大型語料庫建設(shè)的勢頭已緩,代之而起的是大批小型語料庫。隨著計(jì)算機(jī)、網(wǎng)絡(luò)及其他軟硬件技術(shù)的飛速發(fā)展,語料庫建設(shè)變得越來越容易。大量web文本以及通過各種電子媒介發(fā)行的電子出版物為收集語料提供了極大的便利。建立語料庫已經(jīng)不再是語言學(xué)家與技術(shù)開發(fā)專家的專利,一般語料庫研究者和外語教學(xué)人員已經(jīng)完全可以根據(jù)自己的需要自行建立起中小型語料庫。然而語料庫的建設(shè)與檢索涉及到文本預(yù)處理、文本標(biāo)注、詞表制作、字符塊匹配、搭配分析、句型查找等諸多模式匹配問題,同時(shí),相關(guān)索引軟件的開發(fā)對(duì)于絕大部分語言研究者和外語教學(xué)者來講更是一個(gè)相當(dāng)大的技術(shù)難題,這些都成為制約語料庫建設(shè)與推廣運(yùn)用的主要障礙。
正則表達(dá)式(regular expressions,簡稱regex或regexp)是計(jì)算機(jī)匯編語言中的一種技術(shù),用于匹配文本中的字符串。它具有特殊屬性,可以實(shí)現(xiàn)高效查找和匹配字符串。因此,如何使用正則表達(dá)式解決語料庫建庫和檢索中的模式匹配問題是推動(dòng)語料庫發(fā)展中所必須進(jìn)行的有益探索。
語料庫的開發(fā)和建設(shè)是一項(xiàng)龐雜的工程,它包括語料庫的構(gòu)建原則、語料選擇、文本分類、文本格式、文本預(yù)處理等問題,而文本預(yù)處理是語料庫建設(shè)中需要特別考慮和解決的問題。文本預(yù)處理,有時(shí)也稱文本清理或預(yù)加工,主要包括語料文本的清理與語料文本的標(biāo)注。通過網(wǎng)絡(luò)、手工錄入、掃描識(shí)別等方法獲得的文本存在各種不合規(guī)范的符號(hào)、格式等,只有對(duì)問題文本進(jìn)行清潔整理才能保障文本賦碼的正確性以及語料檢索的精確性。同時(shí),對(duì)語料庫文本進(jìn)行標(biāo)注,可以對(duì)文本進(jìn)行必要的分類,這為靈活提取文本進(jìn)行研究提供了極大的便利。運(yùn)用正則表達(dá)式,我們既能迅速地對(duì)不規(guī)范的文本進(jìn)行批量處理,又可以輕松實(shí)現(xiàn)對(duì)批量文本的標(biāo)注。而在對(duì)語料庫的索引中,正則表達(dá)式具有更廣泛的應(yīng)用價(jià)值,如文本查找、替換、統(tǒng)計(jì)等批量處理功能是檢索語料庫中句法相關(guān)語言現(xiàn)象的必備技術(shù)。
目前有許多軟件支持正則表達(dá)式的模式匹配,如Power-GREP、EditPad Pro、UtrlEdit、Editplus、Emeditro、RegexBuddy、Antconc等。其中PowerGREP的文本查詢和檢索功能比較強(qiáng)大,在本文中我們主要使用PowerGREP進(jìn)行演示,有的地方為了演示方便則使用EditPad Pro。
語料庫的主要研究對(duì)象是文本,通過對(duì)文本的處理分析來尋找語言的規(guī)律和意義。文本數(shù)據(jù)大體可以分為兩種:純文本和標(biāo)注文本。純文本只有文字,沒有其他輔助或標(biāo)注信息,如圖片、視音頻等。Leech指出,對(duì)語料庫進(jìn)行標(biāo)注可以為語料庫帶來增值,標(biāo)注已成為語料庫最重要的基本規(guī)范之一。標(biāo)注文本分為兩類:一類是對(duì)文本的屬性和特征等進(jìn)行信息標(biāo)識(shí),最常見的就是網(wǎng)頁文本(含有許多非文本元素和html標(biāo)簽),或者是經(jīng)過xml標(biāo)注的語料庫中的文本(含有許多自定義xml標(biāo)簽);另一類是對(duì)文本中的字符進(jìn)行詞性賦碼標(biāo)注,如BNC語料庫pos賦碼。
在語料庫建庫過程中,文本處理的流程如圖1所示:
圖1 語料庫建庫流程圖
文本預(yù)處理是語料庫建庫過程中的重要組成部分,預(yù)處理效果的優(yōu)劣直接影響到語料庫的質(zhì)量。傳統(tǒng)的方法是通過編程,程序員預(yù)先設(shè)定各種情況的處理辦法,讓程序分析過濾文本,這樣可操作性不強(qiáng)且代價(jià)太高。使用正則表達(dá)式來消除噪音,可以讓文本預(yù)處理更優(yōu)化、更靈活。一般有兩種方法:一是利用查找垃圾信息,并替換為空;另一種是通過查找收集有用數(shù)據(jù),來提取有用信息。使用哪種方法更好,關(guān)鍵看素材本身。如果垃圾信息容易匹配,就用第一種方法,如果有價(jià)值信息容易識(shí)別,就用第二種方法,也可以兩者結(jié)合使用。為了保證質(zhì)量,達(dá)到效果,使用兩種方法都不必一步到位,可以循序漸進(jìn),一次匹配一部分。
目前語料庫的建庫素材大部分取自于互聯(lián)網(wǎng)或各種電子出版物(光盤、電子書籍等),存儲(chǔ)格式大部分為網(wǎng)頁(.htm/.html/.xhtml等)、word(.doc)文檔、電子書(.chm)等。而這些文本源含有大量的非文本元素和排版信息,如:圖片、視音頻、表格、動(dòng)畫、html標(biāo)注、列表等。首先把這些素材中的非文本元素過濾掉,轉(zhuǎn)存為txt記事本格式;然后通過正則表達(dá)式,去除排版信息和一些冗余信息,如空行等。
如何剔除這些我們不想要的標(biāo)記,抽取有價(jià)值的信息內(nèi)容呢?目前也有一些軟件直接轉(zhuǎn)換網(wǎng)頁文件為txt文本,但是效果都不太理想。由于網(wǎng)頁中有html、css、script代碼等多種標(biāo)簽,另外它們還相互嵌套,所以其源代碼會(huì)有一些復(fù)雜多變的樣式,只能具體情況具體分析。當(dāng)然最直接也是最好的辦法就是在瀏覽器顯示下復(fù)制粘貼到記事本,然后再作處理。比較通用的匹配HTML標(biāo)記的正則表達(dá)式為:“<(S+)(s[^>]*)? >[sS]* < /1s* >”。
語料素材在處理中,由于其原排版顯示需要、處理轉(zhuǎn)存等,會(huì)造成一些多余的空行或文本首尾大段的空白字符,這些在文本預(yù)處理時(shí)必需刪除掉,可以通過查找替換為空的方式來刪除它們。匹配空白行的正則表達(dá)式為:“ s* ”或者“^s*$”;匹配首尾空白字符的正則表達(dá)式為:“^s{3,}|s+$”。
在語料素材中,英漢混排是很常見的,要分離其中的漢語或英語文本就比較復(fù)雜。由于文本自身的復(fù)雜性,要想寫出一個(gè)萬能的表達(dá)式達(dá)到理想效果,幾乎是不可能的。所以我們也要結(jié)合文本實(shí)際情況,盡可能的優(yōu)化表達(dá)式。如果要匹配文本中的英語,就可以根據(jù)正則表達(dá)式中給出的各種元字符,匹配文本中的所有英語字符(字母、數(shù)字、下劃線、英語標(biāo)點(diǎn)符號(hào)等),如使用表達(dá)式:“[a-zs_d-,.?!"′]”基本能匹配出英語行,使用者在實(shí)際使用過程中,稍作修改即可。圖2是在EditPad Pro中所進(jìn)行的在中英文共現(xiàn)文本中匹配英語行的演示。
圖2 匹配英語行
計(jì)算機(jī)的文本存儲(chǔ)有多種編碼格式,如:ASCII、UTF-8、Gb2312等,其中UTF-8和Gb2312都支持漢字顯示(或韓語、日語等),在這些編碼中,每個(gè)漢字都對(duì)應(yīng)一個(gè)唯一的字符,由此表達(dá)式“[u4e00-u9fa5]”可以匹配所有的中文字符,再加上中文標(biāo)點(diǎn)符號(hào),就能匹配文本中的中文行。圖3為在EditPad Pro中所進(jìn)行的在中英文共現(xiàn)文本中匹配中文行的演示。
圖3 匹配中文行
文本存儲(chǔ)格式不同、內(nèi)部樣式多變、非文本元素混排等等這些文本自身的復(fù)雜性因素,使得文本預(yù)處理必須具體情況具體分析,正則表達(dá)式極強(qiáng)的可操作性和靈活性正好滿足這一要求,從而使語料文本在文字符號(hào)、空格段落、標(biāo)點(diǎn)符號(hào)等方面統(tǒng)一規(guī)范,便于以后語料庫進(jìn)行文本標(biāo)注、詞匯分析以及搭配統(tǒng)計(jì)。
如圖1所示,純文本語料收集完成之后,在入庫前,要進(jìn)行語料的信息標(biāo)注,如:文本作者、出處、時(shí)間、領(lǐng)域等。目前使用的標(biāo)記語言有SGML、XML、HTML等,本文以XML標(biāo)注為例,演示如何使用正則表達(dá)式查找替換功能對(duì)語料進(jìn)行批量標(biāo)注。首先設(shè)計(jì)標(biāo)注方案如下:
分析上面標(biāo)注樣例可知,信息標(biāo)注的最外層標(biāo)簽是<text_head>,其中包含兩層信息:頭部信息<text_head>和文本自身<text_body/>,頭部信息包含文本一些屬性信息(作者、文本源等)。文本中使用<p>,</p>來標(biāo)注段落,屬性id標(biāo)注段落標(biāo)號(hào)。
標(biāo)注分兩步完成,首先要對(duì)文本段落標(biāo)注和編號(hào)。使用PowerGREP軟件批處理,查找表達(dá)式:“^(.+)$”,替換表達(dá)式:“<p no=”%MATCHSECTIONN%“>1</p>”。查找結(jié)果如圖4。
PowerGREP3.0以上版本除了支持正則表達(dá)式中的所有符號(hào)之外,還另外提供一些特殊表達(dá)式,表示文件的文件名、路徑等信息,如上面對(duì)段落標(biāo)注編號(hào),具體可參考PowerGREP幫助文檔PowerGREP Reference中的Match Placeholder和Path Placeholder兩部分。
然后標(biāo)注頭部信息,即<text_head/>部分。在正則表達(dá)式中,“A”和“z”分別匹配文件頭和文件尾,由此設(shè)計(jì)查找表達(dá)式:“A(.*)z”(句點(diǎn)匹配換行),替換表達(dá)式為:
</text>
其中“1”表示查找表達(dá)式中第一個(gè)括號(hào)部分的內(nèi)容,即文本。這一步也是批處理,省去了每個(gè)文件單獨(dú)標(biāo)注的麻煩。最后手工往頭部信息標(biāo)簽里填寫文本信息。
圖4 文本段落標(biāo)注
在語料庫研究應(yīng)用中,目前已開發(fā)出許多專業(yè)軟件,如Wordsmith、Antconc等,包括上文提到的PowerGREP,這些軟件都是單機(jī)運(yùn)行的檢索工具,并支持正則表達(dá)式。只要我們知道標(biāo)注格式,即可利用正則表達(dá)式對(duì)語料庫進(jìn)行檢索,滿足各種檢索需求。同時(shí),還可以根據(jù)研究需要,進(jìn)一步擴(kuò)展功能。下面我們使用正則表達(dá)式,就語料庫研究中幾個(gè)常用功能進(jìn)行探討分析。
連續(xù)文本塊,可以是一個(gè)詞綴、單詞、詞組、短句等。正則表達(dá)式利用模式匹配來檢索文本中符合要求的內(nèi)容。
如果確定要搜索某個(gè)字符串,直接輸入此字符串即可。如:搜索“the”這個(gè)字符串(正則表達(dá)式:the),它會(huì)把文本中的所有含有“the”的單詞都匹配出來,結(jié)果可能就是:the、The、there、farther、ohter、breathe 等(可以設(shè)定大小寫)。如果想要的結(jié)果是一個(gè)完整的單詞,而不是單詞的一部分,可以使用詞邊界符“”,正則表達(dá)式可寫成“the”。相反,如果確定輸入的字符串“the”是單詞的一部分,可使用非詞邊界“B”。如要求出現(xiàn)在詞首,則為“w+theB”、出現(xiàn)在詞尾則為“Bthew+”、在詞中則為“BtheB”,其中w匹配所有字母、數(shù)字和下劃線。我們要理解正則表達(dá)式中這些元字符的涵義,結(jié)合實(shí)際研究需求,具體情況具體分析,靈活運(yùn)用。
在PowerGREP軟件中控制結(jié)果顯示方式,可以呈現(xiàn)不同效果,如所在文本、上下文、排序、統(tǒng)計(jì)信息等,下面舉例以示說明。在英語文本中,一個(gè)詞會(huì)出現(xiàn)多種形式,如名詞的復(fù)數(shù)(-s/-es)、形容詞(-ful)及副詞(-ly),動(dòng)詞的過去式或過去分詞(-ed)及現(xiàn)在進(jìn)行時(shí)(-ing),形容詞的比較級(jí)和最高級(jí)(-er/est),還有加前綴(trans-/un-)、后綴(-ment/-tion)等。在英語教學(xué)和研究中,我們可能需要對(duì)它們進(jìn)行統(tǒng)計(jì)分析,但憑個(gè)人想像或手工查找很難達(dá)到目的,且缺乏實(shí)證,借助正則表達(dá)式,那就輕而易舉了。首先,我們要確定該詞可能會(huì)以哪些形式出現(xiàn)在文本中,如success,它在文本中可能出現(xiàn)的形式有:success/successful/successfully/succeed,然后利用正則表達(dá)式的詞邊界“”和選擇“|”,此正則表達(dá)式為succe(ss|ful|fully|ed)。
上面我們匹配的內(nèi)容都是連續(xù)的,而在英語文本中,有很多固定搭配是非連續(xù)的,如非連續(xù)短語或一些句型結(jié)構(gòu)等。
如果要搜索詞word1、word2在文本中臨近共現(xiàn)的情況,完整的正則表達(dá)式為:word1W+(?:w+W+){1,6}word2 ,或者寫成:word1(w+W){1,6}word2。其中{1,6}要求word1、word2之間出現(xiàn)詞語至少有1個(gè),最多6個(gè)。
如要檢索It is+過去分詞+that…句型結(jié)構(gòu),輸入正則表達(dá)式“it isw+that”,很明顯這樣會(huì)檢索出許多不符合要求的內(nèi)容,如:It is well-known that...。由于過去分詞多以ed結(jié)尾,故it isw+ed that,就可以檢索出:It is reported that.../It is predicted that...等,但許多過去分詞是不規(guī)則變化,如:It is known that...,這樣的內(nèi)容會(huì)被漏掉。
上述示例都是基于純文本的檢索,如果檢索標(biāo)注語料庫(如pos詞性賦碼標(biāo)注),由于語料經(jīng)過特殊標(biāo)注,我們可以根據(jù)標(biāo)注寫出功能更強(qiáng)大的正則表達(dá)式。
詞語索引是語料庫研究的最基本要求之一。詞語索引基本意義是把搜索詞或詞組按字母或頻率順序排列,與其所在語境一同展示。
一級(jí)詞表正則表達(dá)式為:w+,使用PowerGREP可以很容易實(shí)現(xiàn),不過要想看到直觀的詞頻表,在結(jié)果欄中選擇顯示方式:Display files and matches:Matches without context,Group search matches:Per unique match(多篇文本統(tǒng)一顯示,如果要單篇文本獨(dú)立顯示,則選Per file,then per unique match),如圖5所示。
圖5 一級(jí)詞表顯示結(jié)果
二級(jí)詞表正則表達(dá)式:w+(w+),刪除原文本中第一個(gè)單詞,輸入此正則表達(dá)式,把生成兩個(gè)詞表放在一起就是全部二級(jí)詞表。
三級(jí)詞表正則表達(dá)式:w+w+w+,刪除原文本中第一個(gè)單詞,輸入此正則表達(dá)式,再刪除原文本中第二個(gè)單詞,再次輸入此正則表達(dá)式,最后把生成的三個(gè)文件合在一起即可。
隨著語料庫語言學(xué)的迅速發(fā)展,語料庫與計(jì)算機(jī)技術(shù)結(jié)合得越來越緊密,語料庫資源與技術(shù)在外語教學(xué)中具有極大的使用價(jià)值與開發(fā)前景。廣大語言工作者只有掌握相關(guān)技術(shù)手段,才能最大程度地使用語料庫,從而發(fā)揮語料庫更大的潛力。
通過以上論述與演示,我們可以看出,正則表達(dá)式能夠很好地解決語料庫建設(shè)與檢索中的模式匹配問題,是進(jìn)行建庫與檢索的必備技術(shù)。運(yùn)用正則表達(dá)式,結(jié)合相關(guān)檢索軟件,語言工作者可以根據(jù)自己的需求建立語料庫并對(duì)語料庫檢索運(yùn)用自如,這不僅能大大提高建庫與檢索的操作效率,而且操作形式也更加靈活。因此,運(yùn)用正則表達(dá)式是解決語料庫建設(shè)與檢索中模式匹配問題的有效途徑。
正則表達(dá)式功能強(qiáng)大,使用者要領(lǐng)會(huì)正則表達(dá)式每個(gè)元字符的涵義,靈活使用。在實(shí)際應(yīng)用中可能還會(huì)遇到其他復(fù)雜情況,使用者可根據(jù)上面的討論分析,舉一反三,定能得心應(yīng)手。
[1]楊惠中.語料庫語言學(xué)導(dǎo)論[M].上海:上海外語教育出版社,2002.
[2]李文中.語料庫、學(xué)習(xí)者語料庫與外語教學(xué)[J].外語界,1999(1).
[3]梁茂成,李文中,許家金.語料庫應(yīng)用教程[M].北京:外語教學(xué)與研究出版,2010.
[4]梁茂成.詞性賦碼語料庫的檢索與正則表達(dá)式的編寫[J].中國外語教育,2009(2).
[5]衛(wèi)乃興,李文中,濮建忠.語料庫應(yīng)用研究[M].上海:上海外語教育出版社,2005.
[6]甄鳳超,張霞.語料庫語言學(xué)發(fā)展趨勢展望:2003語料庫語言學(xué)國際會(huì)議綜述[J].外語界,2004(4).
(責(zé)任編輯 劉楊)
H319
A
1008-3715(2011)01-0121-05
2010-12-26
劉瑞(1982—),女,碩士,河南鄭州人,中州大學(xué)外國語學(xué)院教師,研究方向?yàn)閼?yīng)用語言學(xué)、語料庫與外語教學(xué)。