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