劉 瑞
(中州大學 外國語學院,鄭州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—),女,碩士,河南鄭州人,中州大學外國語學院教師,研究方向為應用語言學、語料庫與外語教學。