李 玲
(中北大學 電子與計算機科學技術學院,山西 太原 030051)
對于中文來說,中文字符串可逐步細化為段、句、詞、字。字、句和段能通過明顯的標點符號分界符來簡單劃界,也易于讓機器“看”,只有詞需要用分詞算法來劃分,即中文分詞。現(xiàn)有的分詞算法可分為3大類:基于字符串匹配的分詞方法、基于理解的分詞方法和基于統(tǒng)計的分詞方法[1]?;谧址ヅ涞姆衷~方法是按照一定策略將待分析漢字串與詞典中的詞條進行匹配,若在詞典中找到某個字符串,則匹配成功。該方法需要確定三個要素:詞典、掃描方向、匹配原則[2]?;谧址ヅ涞姆衷~方法原理簡單,實現(xiàn)相對容易,并能達到較高的準確度,是最常用的分詞策略,缺陷是容易產(chǎn)生歧義切分。詞典是字符串匹配的分詞方法中很重要的基礎部分,因此該方法又稱為基于詞典的分詞方法。
目前有三種典型的中文自動分詞詞典機制,分別是基于整詞二分的詞典機制、基于TRIE索引樹的分詞詞典機制和基于逐字二分的分詞詞典機制[3]。整詞二分法是一種廣為使用的分詞詞典機制[4]。本設計采用一種雙詞典機制,它由改進的整詞二分法標準詞典、輔助的臨時詞典和臨時高頻詞表三部分組合而成。
2.1.1 首字散列表
詞條首字用散列表來存儲。國家標準規(guī)定,漢字編碼中漢字的區(qū)位碼值從16區(qū)開始到87區(qū),每區(qū)94位,標識6 763個漢字。即每個漢字都有唯一的區(qū)位碼。漢字的機內(nèi)碼通過編程很易獲取,又有機內(nèi)碼與區(qū)位碼換算公式如下:
機內(nèi)碼高位=區(qū)碼+0xA0,
機內(nèi)碼低位=位碼+0xA0。
若區(qū)位碼表示為十六進制數(shù),其中區(qū)碼為區(qū)位碼的前兩位,位碼為區(qū)位碼的后兩位。據(jù)此特點,可用散列表方式來存儲詞條首字,實現(xiàn)首字的迅速定位。根據(jù)機內(nèi)碼與區(qū)位碼及數(shù)組特點,設散列函數(shù)為(ch1-0xB0)*94+ch2-0xA1,其中ch1為機內(nèi)碼高位,ch2為機內(nèi)碼低位。首字結點設計見表1。
表1 首字結點結構表
2.1.2 詞索引表
根據(jù)統(tǒng)計,漢語詞語中二字詞占大多數(shù),有3萬多,其次是三字詞和四字詞,都是3千多,五字詞及以后則很少。所以二、三、四字詞的查詢效率直接影響分詞速度。為提高查詢效率,本詞索引表結點具體設計見表2。
表2 詞索引表結點結構表
若要匹配的詞為二字詞,從“二字詞起始位置”到“三字詞起始位置”間進行查詢。以此類推。
2.1.3 標準詞典正文
標準詞典正文為線性表結構,存儲每個詞條中除首字外的字串,以及通過語料庫學習后統(tǒng)計出的該詞條的總詞頻。字串與總詞頻間用“/”間隔,字串間用空格作為間隔。
對同一首字的詞條,首先按詞條的字數(shù)順序排列,同長度詞條則按次字的區(qū)位碼排序,以此類推。首字已在首字散列表中確認,故不需要再存儲。例如:首字為“中”的標準詞典詞索引表及部分正文如圖1所示。其中,各字的區(qū)位碼見表3。
在人們用語言進行交際活動時,語言成分的使用呈現(xiàn)一定的規(guī)律性,因此可以采用統(tǒng)計方法對其進行研究統(tǒng)計,這就是互信息原理。從形式上看,詞是穩(wěn)定的字的組合。因此在上下文中,相鄰字出現(xiàn)的次數(shù)越多,就越可能構成一個詞。因此字與字相鄰共現(xiàn)的頻率能夠較好地反映成詞的可信度[5]?;诖苏摂?,本設計中增加一個臨時詞典,用于存儲待分析文本中出現(xiàn)的二字詞、三字詞、四字詞及其在本文的詞頻,以便處理分詞歧義。我們所用的絕大部分詞都是四字以下詞,所以不考慮四字以上出現(xiàn)的新詞。
臨時詞典結構類似標準詞典,仍使用首字散列方式設計,但不再需要詞索引表,直接是詞典正文,首字結點結構見表4。該首字散列表格式類似標準詞典格式,區(qū)別在于最后一個數(shù)據(jù)項,此處為指向以該字為首的詞典正文第一位。臨時詞典的詞典正文結構見表5。
圖1 “中”詞索引表結點結構及詞典正文結構圖
表3 字區(qū)位碼表
表4 臨時詞典首字結點結構表
表5 臨時詞典的詞典正文結構表
比如以“諾”為首的字,其詞典正文為“2基102/3基亞102/4基亞手27/”。說明待分析文本中以“諾”為首的詞有“諾基”、“諾基亞”、“諾基亞手”三個詞?!爸Z基”詞長為2,詞頻為102;其他以此類推。
掃描臨時詞典,若某詞的出現(xiàn)頻率極高,詞密度極大,且未被標準詞典收錄,則將該詞增入標準詞典及用于構造標準詞典的原始數(shù)據(jù)中,總詞頻為該詞在本文本中詞頻。詞密度公式為:
其中:wrddt為詞密度;wordlen為詞長度;f為詞頻;txtlen為待劃分文本長度。
通過統(tǒng)計,本設計將詞密度臨界值設置為0.5%。若某詞的詞密度≥0.5%。則將其加入標準詞典中。
為提高分詞正確率,加入一個臨時高頻詞表。將臨時詞典中詞密度≥0.1%的詞存入一個高頻詞表中,以便分詞時使用。高頻詞表為線性表。
本設計使用基于詞典機制的分詞算法,它的核心思想是切分出單字串,然后和詞庫進行比對,如果是一個詞就記錄下來,否則通過增加或者減少一個單字,繼續(xù)比較,直到還剩下一個單字則終止,如果該單字串無法切分,則作為未登錄處理。按照掃描方向不同,該方法分為正向匹配和逆向匹配。本設計同時使用正向最大匹配算法和逆向最大匹配算法即雙向最大匹配算法進行分詞。
3.2.1 匹配法無關歧義處理
漢語句子中,連續(xù)的三個單字概率非常小。因此,對于一個字串,若分詞結果中存在連續(xù)的三個或三個以上單字,意味著可能出現(xiàn)分詞錯誤。這時,對這些連續(xù)單字組成的詞,查詢臨時高頻詞表。若存在,將其劃分為詞。
3.2.2 匹配法相關歧義處理
對于一個字串,若正向最大匹配法與逆向最大匹配法分析的結果不同,說明出現(xiàn)歧義,在此使用臨時詞典機制與標準詞典協(xié)同對其處理。首先,獲取兩種匹配法分詞結果不同處的詞語(為說明方便,用A、B兩字符模糊代表兩種匹配法);然后根據(jù)分詞結果不同處的詞語的特點按下述方式處理:①分別查詢“分詞結果不同處的詞語”是否存在于臨時高頻詞表中,若存在,則將含有高頻詞的分詞結果作為最終分詞結果,歧義處理結束,若不存在,轉下一步處理;②對“分詞結果不同處的詞語”查詢臨時詞典,若A匹配法中分詞結果不同處的某詞的詞頻較B匹配法中所有分詞結果不同處的詞頻都呈量級差別,則取A匹配法的分詞方式為最終結果,歧義處理結束,否則,轉下一步處理;③對“分詞結果不同處的詞語”查詢標準詞典,若A匹配法中所有不同詞的詞頻和大于B匹配法中所有不同詞的詞頻和,則取A匹配法的分詞方式為最終結果,歧義處理結束。
以上述理論為基礎,在VC++6.0開發(fā)環(huán)境下,實現(xiàn)了一個中文分詞系統(tǒng)。這里應用3個txt文檔作為測試數(shù)據(jù),分別采用本雙詞典機制中文分詞系統(tǒng)和普通詞典機制的中文分詞系統(tǒng)對3個txt文檔進行分詞,分詞結果統(tǒng)計見表6。
表6 分詞結果統(tǒng)計表
由分詞結果統(tǒng)計可見,本雙詞典機制中文分詞系統(tǒng)準確率較高,但花費時間要多一些。準確率較高說明雙詞典機制在處理歧義上起到了一定的作用,是合理有效的一種方法,這是我們可繼續(xù)深入研究的一個切入點。時間花費多與分詞過程中雙向最大匹配算法的使用有很大關系,因此,在不影響準確率的前提下,如何通過改雙向最大匹配算法為逆向最大匹配算法從而提高本分詞算法的時間性能將是后續(xù)要探討的課題。
[1]付年鈞,彭昌水,王慰.中文分詞技術及其實現(xiàn)[J].軟件導刊,2011,10(1):18-21.
[2]奉國和,鄭偉.國內(nèi)中文自動分詞技術研究綜述[J].圖書情報工作,2011,55(2):43-47.
[3]柴寶杰.中文自動分詞若干技術的研究[D].秦皇島:燕山大學,2007:56-57.
[4]費洪曉,胡海苗,鞏燕玲.基于Hash結構的機械統(tǒng)計分詞系統(tǒng)研究[J].計算機工程與應用,2006,42(5):163-165.
[5]朱曉娟,陳特放.詞頻統(tǒng)計中中文分詞技術的研究[J].儀器儀表用戶,2007(3):78-79.