一,、 為什么要進(jìn)行中文分詞,? 詞是最小的能夠獨立活動的有意義的語言成分,英文單詞之間是以空格作為自然分界符的,,而漢語是以字為基本的書寫單位,,詞語之間沒有明顯的區(qū)分標(biāo)記,因此,,中文詞語分析是中文信息處理的基礎(chǔ)與關(guān)鍵,。 Lucene中對中文的處理是基于自動切分的單字切分,或者二元切分,。除此之外,,還有最大切分(包括向前,、向后、以及前后相結(jié)合),、最少切分,、全切分等等。 二,、 中文分詞技術(shù)的分類 我們討論的分詞算法可分為三大類:基于字典,、詞庫匹配的分詞方法;基于詞頻度統(tǒng)計的分詞方法和基于知識理解的分詞方法,。 第一類方法應(yīng)用詞典匹配,、漢語詞法或其它漢語語言知識進(jìn)行分詞,如:最大匹配法,、最小分詞方法等。這類方法簡單,、分詞效率較高,但漢語語言現(xiàn)象復(fù)雜豐富,,詞典的完備性、規(guī)則的一致性等問題使其難以適應(yīng)開放的大規(guī)模文本的分詞處理,。第二類基于統(tǒng)計的分詞方法則基于字和詞的統(tǒng)計信息,,如把相鄰字間的信息、詞頻及相應(yīng)的共現(xiàn)信息等應(yīng)用于分詞,,由于這些信息是通過調(diào)查真實語料而取得的,,因而基于統(tǒng)計的分詞方法具有較好的實用性。 下面簡要介紹幾種常用方法: 1).逐詞遍歷法,。 逐詞遍歷法將詞典中的所有詞按由長到短的順序在文章中逐字搜索,直至文章結(jié)束,。也就是說,不管文章有多短,詞典有多大,都要將詞典遍歷一遍。這種方法效率比較低,,大一點的系統(tǒng)一般都不使用,。 2).基于字典、詞庫匹配的分詞方法(機(jī)械分詞法) 這種方法按照一定策略將待分析的漢字串與一個“充分大的”機(jī)器詞典中的詞條進(jìn)行匹配,,若在詞典中找到某個字符串,,則匹配成功。識別出一個詞,,根據(jù)掃描方向的不同分為正向匹配和逆向匹配,。根據(jù)不同長度優(yōu)先匹配的情況,分為最大(最長)匹配和最?。ㄗ疃蹋┢ヅ?。根據(jù)與詞性標(biāo)注過程是否相結(jié)合,又可以分為單純分詞方法和分詞與標(biāo)注相結(jié)合的一體化方法,。常用的方法如下: (一)最大正向匹配法 (MaximumMatchingMethod)通常簡稱為MM法,。其基本思想為:假定分詞詞典中的最長詞有i個漢字字符,,則用被處理文檔的當(dāng)前字串中的前i個字作為匹配字段,查找字典,。若字典中存在這樣的一個i字詞,,則匹配成功,匹配字段被作為一個詞切分出來,。如果詞典中找不到這樣的一個i字詞,,則匹配失敗,將匹配字段中的最后一個字去掉,,對剩下的字串重新進(jìn)行匹配處理…… 如此進(jìn)行下去,,直到匹配成功,即切分出一個詞或剩余字串的長度為零為止,。這樣就完成了一輪匹配,,然后取下一個i字字串進(jìn)行匹配處理,直到文檔被掃描完為止,。 其算法描述如下: (1)初始化當(dāng)前位置計數(shù)器,,置為0; (2)從當(dāng)前計數(shù)器開始,,取前2i個字符作為匹配字段,,直到文檔結(jié)束; (3)如果匹配字段長度不為0,,則查找詞典中與之等長的作匹配處理,。 如果匹配成功, 則,, a)把這個匹配字段作為一個詞切分出來,,放入分詞統(tǒng)計表中; b)把當(dāng)前位置計數(shù)器的值加上匹配字段的長度,; c)跳轉(zhuǎn)到步驟2); 否則 a) 如果匹配字段的最后一個字符為漢字字符,, 則 ①把匹配字段的最后一個字去掉; ②匹配字段長度減2,; 否則 ①把匹配字段的最后一個字節(jié)去掉,; ②匹配字段長度減1; b)跳轉(zhuǎn)至步驟3),; 否則 a)如果匹配字段的最后一個字符為漢字字符,, 則 當(dāng)前位置計數(shù)器的值加2; 否則當(dāng)前位置計數(shù)器的值加1,; b)跳轉(zhuǎn)到步驟2),。 (二)逆向最大匹配法 (ReverseMaximumMatcingMethod)通常簡稱為RMM法。RMM法的基本原理與MM法相同 ,不同的是分詞切分的方向與MM法相反,而且使用的分詞辭典也不同,。逆向最大匹配法從被處理文檔的末端開始匹配掃描,,每次取最末端的2i個字符(i字字串)作為匹配字段,若匹配失敗,,則去掉匹配字段最前面的一個字,,繼續(xù)匹配。相應(yīng)地,,它使用的分詞詞典是逆序詞典,,其中的每個詞條都將按逆序方式存放。在實際處理時,,先將文檔進(jìn)行倒排處理,,生成逆序文檔。然后,,根據(jù)逆序詞典,,對逆序文檔用正向最大匹配法處理即可。 由于漢語中偏正結(jié)構(gòu)較多,,若從后向前匹配,,可以適當(dāng)提高精確度。所以,,逆向最大匹配法比正向最大匹配法的誤差要小,。統(tǒng)計結(jié)果表明 ,單純使用正向最大匹配的錯誤率為 1/16 9,單純使用逆向最大匹配的錯誤率為 1/245,。例如切分字段“碩士研究生產(chǎn)”,,正向最大匹配法的結(jié)果會是“碩士研究生 / 產(chǎn)”,而逆向最大匹配法利用逆向掃描,,可得到正確的分詞結(jié)果“碩士 / 研究 / 生產(chǎn)”,。 當(dāng)然,最大匹配算法是一種基于分詞詞典的機(jī)械分詞法,,不能根據(jù)文檔上下文的語義特征來切分詞語,,對詞典的依賴性較大,所以在實際使用時,,難免會造成一些分詞錯誤,,為了提高系統(tǒng)分詞的準(zhǔn)確度,可以采用正向最大匹配法和逆向最大匹配法相結(jié)合的分詞方案(即雙向匹配法,,見(四),。) (三)最少切分法:使每一句中切出的詞數(shù)最小。 (四)雙向匹配法:將正向最大匹配法與逆向最大匹配法組合,。先根據(jù)標(biāo)點對文檔進(jìn)行粗切分,,把文檔分解成若干個句子,然后再對這些句子用正向最大匹配法和逆向最大匹配法進(jìn)行掃描切分,。如果兩種分詞方法得到的匹配結(jié)果相同,,則認(rèn)為分詞正確,,否則,按最小集處理,。 3). 全切分和基于詞的頻度統(tǒng)計的分詞方法 基于詞的頻度統(tǒng)計的分詞方法是一種全切分方法,。在討論這個方法之前我們先要明白有關(guān)全切分的相關(guān)內(nèi)容。 全切分 全切分要求獲得輸入序列的所有可接受的切分形式,,而部分切分只取得一種或幾種可接受的切分形式,,由于部分切分忽略了可能的其他切分形式,所以建立在部分切分基礎(chǔ)上的分詞方法不管采取何種歧義糾正策略,,都可能會遺漏正確的切分,,造成分詞錯誤或失敗。而建立在全切分基礎(chǔ)上的分詞方法,,由于全切分取得了所有可能的切分形式,,因而從根本上避免了可能切分形式的遺漏,克服了部分切分方法的缺陷,。 全切分算法能取得所有可能的切分形式,,它的句子覆蓋率和分詞覆蓋率均為100%,但全切分分詞并沒有在文本處理中廣泛地采用,,原因有以下幾點: 1)全切分算法只是能獲得正確分詞的前提,,因為全切分不具有歧義檢測功能,最終分詞結(jié)果的正確性和完全性依賴于獨立的歧義處理方法,,如果評測有誤,,也會造成錯誤的結(jié)果。 2)全切分的切分結(jié)果個數(shù)隨句子長度的增長呈指數(shù)增長,,一方面將導(dǎo)致龐大的無用數(shù)據(jù)充斥于存儲數(shù)據(jù)庫,;另一方面當(dāng)句長達(dá)到一定長度后,由于切分形式過多,造成分詞效率嚴(yán)重下降,。 基于詞的頻度統(tǒng)計的分詞方法: 這是一種全切分方法,。它不依靠詞典,而是將文章中任意兩個字同時出現(xiàn)的頻率進(jìn)行統(tǒng)計,次數(shù)越高的就可能是一個詞。它首先切分出與詞表匹配的所有可能的詞,運用統(tǒng)計語言模型和決策算法決定最優(yōu)的切分結(jié)果,。它的優(yōu)點在于可以發(fā)現(xiàn)所有的切分歧義并且容易將新詞提取出來,。 4).基于知識理解的分詞方法。 該方法主要基于句法,、語法分析,,并結(jié)合語義分析,通過對上下文內(nèi)容所提供信息的分析對詞進(jìn)行定界,,它通常包括三個部分:分詞子系統(tǒng),、句法語義子系統(tǒng)、總控部分。在總控部分的協(xié)調(diào)下,,分詞子系統(tǒng)可以獲得有關(guān)詞,、句子等的句法和語義信息來對分詞歧義進(jìn)行判斷。這類方法試圖讓機(jī)器具有人類的理解能力,,需要使用大量的語言知識和信息,。由于漢語語言知識的籠統(tǒng)、復(fù)雜性,,難以將各種語言信息組織成機(jī)器可直接讀取的形式,。因此目前基于知識的分詞系統(tǒng)還處在試驗階段。 5).一種新的分詞方法 并行分詞方法:這種分詞方法借助于一個含有分詞詞庫的管道進(jìn)行 ,比較匹配過程是分步進(jìn)行的 ,每一步可以對進(jìn)入管道中的詞同時與詞庫中相應(yīng)的詞進(jìn)行比較 ,由于同時有多個詞進(jìn)行比較匹配 ,因而分詞速度可以大幅度提高,。這種方法涉及到多級內(nèi)碼理論和管道的詞典數(shù)據(jù)結(jié)構(gòu),。(詳細(xì)算法可以參考吳勝遠(yuǎn)的《并行分詞方法的研究》。) 常用中文分詞包
1. 庖丁解牛分詞包,,適用于與Lucene整合,。http://www.oschina.net/p/paoding 庖丁中文分詞庫是一個使用Java開發(fā)的,可結(jié)合到Lucene應(yīng)用中的,,為互聯(lián)網(wǎng),、企業(yè)內(nèi)部網(wǎng)使用的中文搜索引擎分詞組件。 Paoding填補(bǔ)了國內(nèi)中文分詞方面開源組件的空白,,致力于此并希翼成為互聯(lián)網(wǎng)網(wǎng)站首選的中文分詞開源組件,。 Paoding中文分詞追求分詞的高效率和用戶良好體驗。 Paoding's Knives 中文分詞具有極 高效率 和 高擴(kuò)展性 ,。引入隱喻,,采用完全的面向?qū)ο笤O(shè)計,構(gòu)思先進(jìn),。 高效率:在PIII 1G內(nèi)存?zhèn)€人機(jī)器上,,1秒 可準(zhǔn)確分詞 100萬 漢字,。 采用基于 不限制個數(shù)的詞典文件對文章進(jìn)行有效切分,,使能夠?qū)υ~匯分類定義。 能夠?qū)ξ粗脑~匯進(jìn)行合理解析
2. LingPipe,,開源自然語言處理的Java開源工具包,。http:/alias-i.com/lingpipe/ 功能非常強(qiáng)大,最重要的是文檔超級詳細(xì),,每個模型甚至連參考論文都列出來了,,不僅使用方便,也非常適合模型的學(xué)習(xí),。 主題分類(Top Classification),、命名實體識別(Named Entity Recognition)、詞性標(biāo)注(Part-of Speech Tagging)、句題檢測(Sentence Detection),、查詢拼寫檢查(Query Spell Checking),、興趣短語檢測(Interseting Phrase Detection)、聚類(Clustering),、字符語言建模(Character Language Modeling),、醫(yī)學(xué)文獻(xiàn)下載/解析/索引(MEDLINE Download, Parsing and Indexing)、數(shù)據(jù)庫文本挖掘(Database Text Mining),、中文分詞(Chinese Word Segmentation),、情感分析(Sentiment Analysis)、語言辨別(Language Identification)等
3. JE分詞包 4. LibMMSeg http://www.oschina.net/p/libmmseg 采用C++開發(fā),,同時支持Linux平臺和Windows平臺,,切分速度大約在300K/s(PM-1.2G),截至當(dāng)前版本(0.7.1),。 LibMMSeg沒有為速度仔細(xì)優(yōu)化過,,進(jìn)一步的提升切分速度應(yīng)仍有空間。 5. IKAnalyzer http://www.oschina.net/p/ikanalyzer IKAnalyzer基于lucene2.0版本API開發(fā),,實現(xiàn)了以詞典分詞為基礎(chǔ)的正反向全切分算法,,是LuceneAnalyzer接口的實現(xiàn)。 該算法適合與互聯(lián)網(wǎng)用戶的搜索習(xí)慣和企業(yè)知識庫檢索,,用戶可以用句子中涵蓋的中文詞匯搜索,,如用"人民"搜索含"人民幣"的文章,這是大部分用戶的搜索思維,; 不適合用于知識挖掘和網(wǎng)絡(luò)爬蟲技術(shù),,全切分法容易造成知識歧義,因為在語義學(xué)上"人民"和"人民幣"是完全搭不上關(guān)系的,。 6. PHPCWS http://www.oschina.net/p/phpcws PHPCWS 是一款開源的PHP中文分詞擴(kuò)展,,目前僅支持Linux/Unix系統(tǒng)。
PHPCWS 先使用“ICTCLAS 3.0 共享版中文分詞算法”的API進(jìn)行初次分詞處理,,再使用自行編寫的“逆向最大匹配算法”對分詞和進(jìn)行詞語合并處理,,并增加標(biāo)點符號過濾功能,得出分詞結(jié)果,。
ICTCLAS(Institute of Computing Technology, Chinese Lexical Analysis System)是中國科學(xué)院計算技術(shù)研究所在多年研究工作積累的基礎(chǔ)上,,基于多層隱馬模型研制出的漢語詞法分析系統(tǒng),主要功能包括中文分詞,;詞性標(biāo)注,;命名實體識別;新詞識別,;同時支持用戶詞典,。ICTCLAS經(jīng)過五年精心打造,,內(nèi)核升級6次,目前已經(jīng)升級到了ICTCLAS3.0,,分詞精度 98.45%,,各種詞典數(shù)據(jù)壓縮后不到3M。ICTCLAS在國內(nèi)973專家組組織的評測中活動獲得了第一名,,在第一屆國際中文處理研究機(jī)構(gòu)SigHan 組織的評測中都獲得了多項第一名,,是當(dāng)前世界上最好的漢語詞法分析器。
ICTCLAS 3.0 商業(yè)版是收費的,,而免費提供的 ICTCLAS 3.0 共享版不開源,,詞庫是根據(jù)人民日報一個月的語料得出的,很多詞語不存在,。所以本人對ICTCLAS分詞后的結(jié)果,,再采用逆向最大匹配算法,根據(jù)自己補(bǔ)充的一個9萬條詞語的自定義詞庫(與ICTCLAS詞庫中的詞語不重復(fù)),,對ICTCLAS分詞結(jié)果進(jìn)行合并處理,,輸出最終分詞結(jié)果。
由于 ICTCLAS 3.0 共享版只支持GBK編碼,,因此,,如果是UTF-8編碼的字符串,可以先用PHP的iconv函數(shù)轉(zhuǎn)換成GBK編碼,,再用phpcws_split函數(shù)進(jìn)行分詞處理,,最后轉(zhuǎn)換回UTF-8編碼。
7,、KTDictSeg 一個C#.net做的簡單快速準(zhǔn)確的開源中文分詞組件(這個分詞算法效果也不錯) |
|