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