王桐 王韻婷
摘要:該文設(shè)計(jì)了一個(gè)基于復(fù)雜形式最大匹配算法(MMSeg_Complex)的自定義中文分詞器,該分詞器采用四種歧義消除規(guī)則,并實(shí)現(xiàn)了用戶自定義詞庫、自定義同義詞和停用詞的功能,可方便地集成到Lucene中,從而有效地提高了Lucene的中文處理能力。通過實(shí)驗(yàn)測試表明,該分詞器的分詞性能跟Lucene自帶的中文分詞器相比有了極大的提高,并最終構(gòu)建出了一個(gè)高效的中文全文檢索系統(tǒng)。
關(guān)鍵詞:中文分詞;復(fù)雜最大匹配;Lucene;分詞器
中圖分類號:TP393 文獻(xiàn)標(biāo)識碼:A 文章編號:1009-3044(2014)02-0430-04
雖然Lucene功能強(qiáng)大,配置靈活且應(yīng)用廣泛,然而其自帶分詞器的中文分詞效果卻不是太好。中文分詞是自然語言處理領(lǐng)域中的一項(xiàng)重要的基礎(chǔ)性工作,其結(jié)果將直接影響到檢索系統(tǒng)的查準(zhǔn)率和查全率。因此,研究一種能與Lucene相結(jié)合的高效的中文分詞器,一直以來都是一個(gè)重要的課題[1]。將中文的漢字序列切分成一系列有意義的詞,就是中文分詞技術(shù)所要探討內(nèi)容,中文分詞的準(zhǔn)確與否,對搜索引擎檢索結(jié)果的相關(guān)性和準(zhǔn)確性有著很大的影響[2]。綜合考慮上述要求,該文決定采用基于字符串匹配的分詞算法來設(shè)計(jì)分詞器,因?yàn)樗砗唵吻乙子趯?shí)現(xiàn),簡潔而高效,完全可以滿足一般情況下開發(fā)設(shè)計(jì)自己個(gè)性化搜索引擎的需要。
1 Lucene簡介及其分詞原理
Lucene中不同的Analyzer其實(shí)質(zhì)上就是組合不同的Tokenizer和TokenFilter而得到最后的TokenStream。當(dāng)文本在索引過程中經(jīng)過分析后,最后生成的每個(gè)語匯單元都將作為一個(gè)項(xiàng)被傳遞給索引[3]。我們以對文本“How are you”的分析為例,該文本中每個(gè)語匯單元都表示一個(gè)獨(dú)立的單詞,圖2展示了用Lucene 中的StandardAnalyzer類分析該短語所產(chǎn)生的語匯單元。
由圖1可知,當(dāng)文本被語匯單元化了之后,相對于前一個(gè)語匯單元的位置信息將以位置增量值保存,一般來說,位置增量默認(rèn)為1。如果位置增量大于1,則允許語匯單元之間有空隙,可以利用這個(gè)空隙來表示被刪除的單詞,由于“are”這個(gè)單詞是個(gè)停用詞,分詞時(shí)被過濾掉了,所以“How”和“you”之間的位置增量變成了2。位置增量為0的語匯單元?jiǎng)t表示將該語匯單元放置在前一個(gè)語匯單元的位置上。同義詞分詞器可以通過0位置增量來表示插入的同義詞,這個(gè)做法使得Lucene在進(jìn)行短語查詢時(shí),輸入任何一個(gè)同義詞,都能匹配到相同的結(jié)果。該文設(shè)計(jì)的自定義同義詞分詞器就應(yīng)用到了0位置增量的原理。
2 基于復(fù)雜形式最大匹配算法的自定義分詞器的設(shè)計(jì)
根據(jù)Lucene的分詞原理,該文設(shè)計(jì)了一個(gè)基于復(fù)雜形式最大匹配算法的自定義分詞器,在有效提高Lucene對中文信息處理能力的同時(shí),用戶還可以根據(jù)開發(fā)需要添加用戶自定義詞庫、根據(jù)分詞結(jié)果自定義同義詞和停用詞集來擴(kuò)展該分詞器的性能,從而能夠更加方便地檢索出自己想要搜索的內(nèi)容。
其中最大長度的詞組是第三個(gè),因此,第三個(gè)詞組的第一個(gè)單詞_C1C2_被我們認(rèn)為是正確的,我們接受這個(gè)詞,然后從漢字C3開始,重復(fù)上述步驟,直到字符串的最后一個(gè)詞被識別。該文提出的復(fù)雜最大匹配算法的“消除歧義規(guī)則”有四項(xiàng),依次使用這四項(xiàng)規(guī)則對分詞結(jié)果進(jìn)行過濾,直到只有一種結(jié)果或者這四項(xiàng)規(guī)則使用完畢為止。這四項(xiàng)規(guī)則分別是:1) 最大匹配,2) 最大平均單詞長度,3) 單詞長度最小方差,4) 單字單詞語素自由度的最大和。
規(guī)則1:最大匹配最大匹配規(guī)則選擇具有最大長度的三詞詞組的第一個(gè)詞作為正確的分詞結(jié)果,如果經(jīng)過規(guī)則1過濾后,有多于一個(gè)的詞組具有最大長度,則采用下一個(gè)規(guī)則。
規(guī)則2:最大平均單詞長度,在每一個(gè)字符串的結(jié)尾,很可能得到只有一個(gè)或兩個(gè)單詞的詞組,例如:下面的詞組擁有相等的長度且單詞長度的方差也相等。1) _C1_ _C2_ 2) _C1C2_。
規(guī)則2以最大平均單詞長度(平均詞長=詞組總字?jǐn)?shù)/詞語數(shù)量)從詞組中取得第一個(gè)單詞,因此在上面的例子中,我們選擇第二個(gè)詞組中的_C1C2_作為正確的分詞結(jié)果。規(guī)則2是基于相對于單字的單詞我們更容易遇到多字的單詞這個(gè)事實(shí)來進(jìn)行假設(shè)的,而且這個(gè)規(guī)則是只有在三詞詞組中的一個(gè)或兩個(gè)單詞位置為空時(shí)才適用,因?yàn)楫?dāng)詞組是一個(gè)真正的三詞詞組時(shí),相同長度的三詞詞組當(dāng)然具有相同的平均詞長,這個(gè)規(guī)則就不適用了,于是要采用規(guī)則3。
規(guī)則3:單詞長度最小方差,規(guī)則3是取擁有單詞長度最小方差的詞組的第一個(gè)單詞作為正確分詞結(jié)果的。這個(gè)規(guī)則是建立在“我們通常認(rèn)為,單詞的長度是均勻分布的”這個(gè)假設(shè)之上的。
規(guī)則4:單字單詞語素自由度的最大和,規(guī)則4將計(jì)算詞組中所包含的所有單字單詞的語素自由度,然后將得到的值相加,取總和最大的詞組的第一個(gè)單詞作為正確的分詞結(jié)果。
由于這兩個(gè)詞組擁有相同的詞長、方差和平均單詞長度,而它們分別有“是”和“主”這兩個(gè)單字單詞,假設(shè)“是”作為單字單詞時(shí)候的使用頻率是10,“主”作為單字單詞時(shí)候的使用頻率是5,對10和5分別取自然對數(shù)以得到它們各自的語素自由度,然后取其最大值者,所以選擇“是”字所在詞組的第一個(gè)單詞,即“主要”作為正確的分詞。因?yàn)楹苌儆袃蓚€(gè)漢字會(huì)擁有完全相同的使用頻率值,而一個(gè)高頻率使用的漢字更可能是一個(gè)單字單詞,所以在應(yīng)用這個(gè)規(guī)則之后應(yīng)該就沒有歧義性了。
2.1 詞典配置模塊
本文設(shè)計(jì)的MMSeg_Complex分詞算法的詞典配置采用的是IK2012分詞器自帶的主詞典,它擁有27萬左右的漢語單詞量,另外,該文采用“雙數(shù)組trie樹”的詞典結(jié)構(gòu)來存儲(chǔ)該詞典,同時(shí)還支持用戶添加自定義詞庫。詞典的第二部份由13060個(gè)漢字以及它們的使用頻率組成,漢字的使用頻率會(huì)在最后一個(gè)消除歧義規(guī)則中使用。其中,中文分詞的處理,以UTF-8編碼為主,以減少編碼的復(fù)雜性。在MMSeg_Complex算法中,取得所有的“三詞詞組(chunk)”是比較復(fù)雜的部分,在這里,出于性能考慮,該文采用“三層for循環(huán)”來實(shí)現(xiàn)所有“三詞詞組”的獲取。
3 實(shí)驗(yàn)測試結(jié)果及分析
根據(jù)前文所述的中文分詞器設(shè)計(jì)方案,可以很方便地將該分詞器集成到Lucene中去,不妨將其命名為MySame_MyStopAnalyzer。在這里,分別對三個(gè)分詞器StandardAnalyzer、SimpleAnalyzer,MySame_MyStopAnalyzer的分詞性能來進(jìn)行測試。實(shí)驗(yàn)環(huán)境為Microsoft Windows XP Professional 版本2002 Service Pack 3 操作系統(tǒng),Pentium(R)4 CPU 2.93GHz 處理器,2 GB內(nèi)存。一般來說,分詞系統(tǒng)的評價(jià)準(zhǔn)則主要有以下幾個(gè)方面[5]:1)分詞準(zhǔn)確性;2)分詞速度;3)功能完備性——自動(dòng)分詞方法除了要完成分詞的功能外,還應(yīng)具備詞庫增刪、修改等的功能。
3.1 分詞準(zhǔn)確性和分詞速度比較
采用一篇由1152個(gè)單詞組成的語料樣本來對各分詞器的算法性能進(jìn)行測試,其分詞結(jié)果如表1所示。
其中,SimpleAnalyzer使用的是簡單形式的最大匹配算法,不出意料的,就算是簡單最大匹配算法,也能正確識別出樣本中90%以上的單詞,而這也被作為評估分詞算法的一個(gè)基準(zhǔn)。由于MySame_MyStopAnalyzer使用的是包含了四條歧義解析規(guī)則的復(fù)雜形式最大匹配算法,所以能正確識別出樣本中近93%的單詞,這個(gè)算法的分詞準(zhǔn)確性要明顯優(yōu)于簡單匹配算法。
3.2 分詞器功能完備性測試
接下來,該文要對MySame_MyStopAnalyzer功能的完備性進(jìn)行測試,它包括用戶自定義詞庫的更新,自定義同義詞和停用詞功能的實(shí)現(xiàn)。首先,輸入一個(gè)包含有未登錄詞的測試字符串——“周黑鴨,安世亞太科技股份有限公司,郭敬明,雪鄉(xiāng)”。測試結(jié)果如表2所示。
4 結(jié)束語
本文針對Lucene中文分詞模塊的薄弱性,設(shè)計(jì)并實(shí)現(xiàn)了一個(gè)基于復(fù)雜形式最大匹配算法的自定義分詞器。這種全新的中文分詞器,有效地改善了Lucene自身在中文分詞能力上的不足。當(dāng)然,該分詞器的分詞算法采用的仍是傳統(tǒng)的機(jī)械分詞,其分詞的準(zhǔn)確性和分詞速度還有待進(jìn)一步的提高。今后的工作可以分為以下兩點(diǎn)來進(jìn)行:1. 在機(jī)械分詞的基礎(chǔ)上,結(jié)合語義本體或基于統(tǒng)計(jì)的分詞方法,通過收集更多專業(yè)權(quán)威的文檔去充實(shí)語料庫、更新詞典庫,以進(jìn)一步地提高分詞算法在歧義消除和未登錄詞識別方面的處理能力;2. 通過改進(jìn)詞典的存儲(chǔ)效率,以進(jìn)一步地提高分詞算法的分詞速度,使得Lucene處理中文信息的能力更加地高效和智能化。
參考文獻(xiàn):
[1] 羅寧,徐俊剛,郭洪韜.基于Lucene的中文分詞模塊的設(shè)計(jì)和實(shí)現(xiàn)[J].電子技術(shù)設(shè)計(jì)與應(yīng)用,2013(1):54-56.
[2] 朱世猛.中文分詞算法的研究與實(shí)現(xiàn)[D].成都:電子科技大學(xué),2010.
[3] (美)Michael McCandless,Erik Hatcher,Otis Gospodnetic. Lucene in Action[M].北京:人民郵電出社,2011.
[4] Tsai Chih-Hao. MMSEG: A Word Identification System for Mandarin Chinese Text Based on Two Variants of the Maximum Matching Algorithm[EB/OL]. (2000-03-12). http://technology. chtsai.org/mmseg.
[5] 劉件,魏程.中文分詞算法研究[J].微計(jì)算機(jī)應(yīng)用,2008,29(8):11-16.
[6] 彭煥峰.基于Lucene 的中文分詞器的設(shè)計(jì)與實(shí)現(xiàn)[J].微型機(jī)與應(yīng)用,2011,30(18):62-64.
[7] 郎小偉,王申康.基于Lucene的全文檢索研究與開發(fā)[J].計(jì)算機(jī)工程,2006,32(4):94-96.
[8] 義天鵬,陳啟安.基于Lucene的中文分析器分詞性能比較研究[J].計(jì)算機(jī)工程,2012,38(22):279-282.
[9] 索紅光,孫鑫.針對中文檢索的Lucene改進(jìn)策略[J].計(jì)算機(jī)應(yīng)用與軟件,2009,26(6):175-177.