文/張超
在基于語料庫的語法研究中,我們常常需要檢索統(tǒng)計語法項在語料中的出現(xiàn)頻率。就當(dāng)前主流的語料庫前端檢索功能來看,對于連續(xù)文本串的語法項的檢索統(tǒng)計倒是很方便,只需用語法項作為關(guān)鍵詞在語料中進行檢索即可輕松獲得該語法項在語料庫中的出現(xiàn)頻次。比如檢索現(xiàn)代漢語語氣詞“呢”的應(yīng)用情況,只需將“呢”作為關(guān)鍵詞輸入檢索即可。而對于非連續(xù)多項語法構(gòu)式而言,當(dāng)前語料庫前端程序往往無法一次性檢索出結(jié)果,而要通過兩次以上的檢索,甚至還要將檢索結(jié)果集導(dǎo)出后再輔以人工排檢才能得到所需要的結(jié)果。比如,要檢索“怎么……法”這個語法構(gòu)式的出現(xiàn)情況,按目前語料檢索的常規(guī)技術(shù)方案,可以先檢索含有“怎么”的用例,然后再從結(jié)果集中檢索含有“法”的用例。這樣二次檢索后,得到的仍然不是最終想要的結(jié)果,因為“法”位于“怎么”之前的用例并不符合要求,但也會出現(xiàn)在二次檢索結(jié)果集之中,比如“法人代表怎么能這樣說話”這樣的例句就無法在二次檢索結(jié)果集中自動排除,只能依靠人工來排檢。這就比較耗時耗力。因此,探究一種專門針對“怎么……法”之類非連續(xù)多項語法構(gòu)式的檢索程序方案,對語法研究將有積極的意義。本文擬專門探討非連續(xù)雙項語法構(gòu)式的檢索程序設(shè)計方案,程序設(shè)計工具為易語言V5.9版。
Adele E.Goldberg(2003)將構(gòu)式定義為“當(dāng)且僅當(dāng)C是一個形式-意義匹配對應(yīng)體<Fi,Si>,且該匹配對應(yīng)體的形式或意義的某些方面不能通過C的組成成分或者其他先前已知結(jié)構(gòu)形式而完全預(yù)測出來,那么C就是構(gòu)式”。德國學(xué)者馬丁·休伯特(Martin Hilpert)(2016:16)進一步指出,“如果一個表達形式的意義不能從其各組成部分的意義之中推斷出來,那就毫無疑問地得出結(jié)論,即人們必須得把這個表達形式本身當(dāng)作一個形式-意義匹配對應(yīng)體來學(xué)習(xí),換言之,它就是一個構(gòu)式”。根據(jù)構(gòu)式的定義,現(xiàn)代漢語中像“雖然......但是......”、“如果.....就.....”等關(guān)聯(lián)詞結(jié)構(gòu),像“怎么/如何.....法”等都屬于構(gòu)式。我們把含有兩個項目且兩個項目之間有其他文本存在的構(gòu)式稱為非連續(xù)雙項語法構(gòu)式。比如“怎么......法”,實際應(yīng)用中往往是“怎么V法”的模式,即兩個項之間要插入動詞,所以“怎么......法”就是一個非連續(xù)雙項語法構(gòu)式。
基于語料庫的語法研究中,常常需要統(tǒng)計一些語法項的出現(xiàn)頻次。對于單詞項的語法項,按傳統(tǒng)的關(guān)鍵詞檢索方式即可解決,但對于非連續(xù)雙項語法構(gòu)式,用傳統(tǒng)的關(guān)鍵詞檢索技術(shù)無法滿足需求,即便采取結(jié)果集中二次關(guān)鍵詞檢索的手段,也難以檢索出完全符合要求的結(jié)果。這是因為,傳統(tǒng)的關(guān)鍵詞檢索技術(shù)并不是為非連續(xù)雙項語法構(gòu)式的檢索需求而生的。
在語法研究中,非連續(xù)雙項語法構(gòu)式的檢索需求可概括為以下幾點:
A.構(gòu)式中的兩個詞項必須在同一個句子中同現(xiàn),并且出現(xiàn)順序不能顛倒;
B.兩個詞項之間存在一定的距離,即兩個詞項之間應(yīng)當(dāng)有其他詞語,存在一定量的間隔文字;
C.在檢索時應(yīng)當(dāng)允許自主設(shè)定詞項之間的間隔文字?jǐn)?shù)量,以便進行更細(xì)致深入的考察分析。
D.檢索結(jié)果集要能夠?qū)С鰹門XT文檔或EXCEL文檔,以便進一步分析處理。
比如檢索詢問行為方式的 “怎么……法……”這個非連續(xù)雙項語法構(gòu)式,符合要求的句子應(yīng)當(dāng)是如下這類(用例來自國家語委現(xiàn)代漢語語料庫):
(1)有1、2、3這三個數(shù)字,還有一個小數(shù)點,至于怎么排法,全忘了。
(2)國王問:"怎么個好法?"
(3)黃莉婭把紙高帽往頭上一扣,笑嘻嘻地,“怎么個游法?”
而像如下三類用例則不能被列入檢索結(jié)果集之中。
1.詞項順序與檢索構(gòu)式不一致用例,如:
(4)這就是說法不是一般的行為規(guī)則,它與習(xí)慣或道德不同,法是一種特殊的行為規(guī)則,是統(tǒng)治階級基于經(jīng)濟上的生產(chǎn)、交換、分配關(guān)系和政治上統(tǒng)治與被統(tǒng)治關(guān)系,把自己的意志客觀化、條文化,以便使社會上的人們不僅知道應(yīng)該怎么做,而且也知道必須怎么做。
(5)他威脅劉法說:"當(dāng)年你在京城時,曾親手從皇帝那里接過命令,你并且說一定能取勝,怎么現(xiàn)在不想出兵了呢?
2.只包含第一個詞項的用例,如:
(5)我們的人民怎么能夠沉默?
(6)試回想一下看,他們是怎么鉆空子的。
3、兩個詞項緊鄰的用例,如:
(7)怎么法國那時也是八國聯(lián)軍之一?
(8)怎么法不容情?
由以上需求可知,傳統(tǒng)的關(guān)鍵詞匹配檢索技術(shù)的確不能滿足需求,得根據(jù)非連續(xù)雙項語法構(gòu)式的特點,設(shè)計專門的檢索程序來實現(xiàn)。
“易語言是中國人自主開發(fā),適合國情,不同層次不同專業(yè)的人員易學(xué)易用的漢語編程語言?!痹谝渍Z言中,本程序的實現(xiàn)要用到 “尋找文本()、倒找文本()、GBK_取文本長度()、取文本右邊()、取文本左邊()”等命令。
考慮到用戶應(yīng)用上的方便,檢索輸入界面設(shè)計力求簡潔,并允許用戶設(shè)置關(guān)鍵詞左側(cè)和右側(cè)要顯示的字?jǐn)?shù);如果是雙關(guān)鍵詞,還要允許用戶自定義兩關(guān)鍵詞之間間隔的字?jǐn)?shù)。界面如圖1所示。
檢索非連續(xù)雙項語法構(gòu)式用例時,在關(guān)鍵詞文本框中輸入兩個詞項,詞項之間加一個空格即可。在檢索代碼中,通過“尋找文本()”命令搜尋關(guān)鍵詞內(nèi)部的空格,如果找到空格,則判定為非連續(xù)雙項語法構(gòu)式關(guān)鍵詞,也可稱為雙關(guān)鍵詞。建立局部變量“第一關(guān)鍵詞”和“第二關(guān)鍵詞”分別記錄空格前后的關(guān)鍵詞項,并通過“GBK_取文本長度()”確定好關(guān)鍵詞的長度,為后續(xù)提取語句作準(zhǔn)備。代碼如下:
第一關(guān)鍵詞=取文本左邊 (搜索關(guān)鍵詞,尋找文本 (搜索關(guān)鍵詞,“ ”,,假) -1)
第二關(guān)鍵詞=取文本右邊 (搜索關(guān)鍵詞,取文本長度 (搜索關(guān)鍵詞) -倒找文本 (搜索關(guān)鍵詞,“ ”,,假))
第一關(guān)鍵詞長度=GBK_取文本長度 (第一關(guān)鍵詞)
第二關(guān)鍵詞長度=GBK_取文本長度 (第二關(guān)鍵詞)
關(guān)鍵詞之間間隔字符數(shù)=到整數(shù) (編輯框_字?jǐn)?shù).內(nèi)容)
然后將語料文件內(nèi)容讀到到超級文本框,再計算被搜尋文本的總長度。
為方便檢索和測算文字長度等,可以在軟件界面放一個超級文本框,設(shè)置可視屬性值為假。
超級編輯框3.內(nèi)容=刪全部空 (到文本 (讀入文件 (要搜索的路徑數(shù)組 [n])))
被搜尋文本總長度=超級編輯框3.取文本長度 ()
接下來用超級文本框的“尋找()”命令搜尋第一關(guān)鍵詞,用變量記錄所找到的關(guān)鍵詞出現(xiàn)位置。
當(dāng)前找到的關(guān)鍵詞起始位置=超級編輯框3.尋找 (起始搜尋位置,,,第一關(guān)鍵詞)
接著根據(jù)用戶設(shè)定的兩關(guān)鍵詞間隔字?jǐn)?shù)搜尋第二關(guān)鍵詞。先在指定位置區(qū)域取和第二關(guān)鍵詞同等長度的文本串,判斷所取值是否與第二關(guān)鍵詞相同,創(chuàng)建一個邏輯變量“是否取得第二關(guān)鍵詞”存儲判斷結(jié)果。
第二關(guān)鍵詞起始位置=當(dāng)前找到的關(guān)鍵詞起始位置+第一關(guān)鍵詞長度+關(guān)鍵詞之間間隔字符數(shù)
超級編輯框3.起始選擇位置=第二關(guān)鍵詞起始位置-1
超級編輯框3.被選擇字符數(shù)=第二關(guān)鍵詞長度
第一關(guān)鍵詞后的取值-超級編輯框3.被選擇文本
.如果 (第一關(guān)鍵詞后的取值-第二關(guān)鍵詞)
是否取得第二關(guān)鍵詞 = 真
.否則
是否取得第二關(guān)鍵詞 = 假
如果變量“是否取得第二關(guān)鍵詞”的值為“真”,通過超級文本框取出含關(guān)鍵詞的語句并加入到檢索結(jié)果列表框,然后將起始搜尋位置移到所找到的第一關(guān)鍵詞之后。具體代碼如圖2所示。
變量“當(dāng)前找到的關(guān)鍵詞起始位置”值如果不為-1,且起始搜尋位置也小于被搜尋文本總長度時,程序要循環(huán)執(zhí)行以上過程,直到搜索至被搜尋文本最末位置且找不到相應(yīng)關(guān)建詞為止。
以上程序執(zhí)行完畢后,可能還會檢索出如下這樣的用例:
(1)這筆賬誰負(fù)責(zé)還?怎么還?
“我沒辦法,要命有命!”長順的淚已在眼圈中轉(zhuǎn)。
圖1
圖2
圖3
很顯然,這個例子中的“怎么”與“法”分屬于不同的句子,并不是一個非連續(xù)雙項語法構(gòu)式,卻被列入到檢索結(jié)果中。這是因為,以上程序中沒有排除“怎么”和“法”之間有換行符的情況。因此,以上程序執(zhí)行中取得含關(guān)鍵詞的語句在輸出前應(yīng)當(dāng)增加檢測是否含有換行符的情況,不含換行符的才予輸出。含關(guān)鍵詞語句輸出部分代碼優(yōu)化如圖3所示。
如此一來,就減少了不合要求的語句的干擾輸出。
筆者選擇《紅樓夢》全本語料進行測試,全文90余萬字,設(shè)置兩關(guān)鍵詞間隔字?jǐn)?shù)為2,檢索完成并輸出結(jié)果集共耗時10秒左右,運行速率有待提升,但對語法研究來說,這個速率當(dāng)在可接受范圍。
檢索測試也發(fā)現(xiàn)了如下這樣的不合要求的語例:
將此事告訴與尤二姐,又說我怎么操心打聽,又怎么設(shè)法子,須得如此方救下眾人無罪。
此例中的“怎么”和“法”顯然不是要檢索的非連續(xù)雙項語法構(gòu)式,“法”只是構(gòu)成“法子”這個名詞的一個實語素??梢姡绦虻暮罄m(xù)設(shè)計應(yīng)當(dāng)還要在排除這類語例上下功夫。
針對非連續(xù)雙項語法構(gòu)式的計算機檢索程序的設(shè)計,對語法構(gòu)式研究有非常重要的應(yīng)用價值。本文基于易語言來設(shè)計的計算機程序,檢索結(jié)果集基本符合要求,運行速率也在可接受范圍,當(dāng)可以在語法構(gòu)式研究實踐中嘗試采用。