基于Lucene的中文文本分词
王繼明,楊國林
(內蒙古工業大學信息工程學院,呼和浩特010051)
摘要:中文文本分詞技術是文本挖掘領域的一個重要分支,在中國仍然處于發展階段.Apache Jakarta的開源工程Lucene是一個十分優秀的基于Java語言的文本檢索工具包,在國外已經得到廣泛的應用.但是Lucene對中文分詞功能的支持不太理想,給Lucene加入好的中文分詞功能對Lucene在國內的發展和應用將會起到很大的推動作用.
CHINESE AUTOMATIC WORD-CUT BASE ON LUCENE
WANG Ji-ming,YING Guo-lin
(Inner Mongolia University of Technology,Hohhot010051,China)
Abstract:Chinese Automatic Word-cut technology is an important branch of Text Mining.It is still in the phases of evolution.Lucene is one of the open source project in Apache Jakarta.It is a very excellent text Retrieval toolkit base on Java and applied widely into many areas in many foreign countries.But Lucene do not support Chinese Automatic Word-cut effectively,implementing Lucene with the function of Chinese Automatic Word-cut will drive the application and improvement of Lucene in China.
0 引言
伴隨著文本挖掘技術的發展,文本分詞技術作為文本挖掘技術的一個重要研究分支,也得到了迅速的發展.文本分詞技術為大多數文本挖掘技術(如文本分類技術,文本聚類技術等)提供文本預處理工作,分詞效果的好壞會直接影響到后續的處理過程,因此文本分詞技術是文本挖掘過程中的一個關鍵環節.目前,文本挖掘領域的一項重要成果Apache Jakarta的開源工程Lucene(一種基于JAVA語言的文本檢索工具包)已經得到了廣泛的應用和發展.國際上很多的大公司都以Lucene作為開發平臺,例如目前搜索引擎業的巨頭Google公司也在其系統中引入了Lucene平臺,并在其基礎上進行深入的開發.Lucene在國內近些年也得到了廣泛的應用,但是由于其支持的中文文本分詞僅限于單字區分和CJK兩種方式,不能滿足大多數中文文本挖掘技術的需求,所以在一定程度上限制了它在中國的應用和開發.目前,基于Lucene的中文分詞包非常少而且分詞效果大多不理想,因此給Lucene加入中文分詞的功能,對于Lucene在中國的廣泛應用和發展將會起到很大的推動作用.
1 文本分詞
文本分詞技術就是利用特定的算法把文檔中的內容以詞為單位進行劃分.分詞處理包括英文單詞和中文單詞的分詞處理,兩者的處理方式有很大的不同.這是因為英文單詞之間有空格作為詞與詞的分界符,但是中文單詞則沒有明確的分界符來隔開中文中的詞語,下面主要對中文分詞的原理和算法進行詳細的闡述.
1.1 中文分詞的研究方向
中文分詞相對英文文本的分詞處理要復雜得多,目前中文單詞的分詞處理在業界還沒有形成統一的標準,但是也有很多有效的方法可以進行文本的分詞處理.比較重要的方法如下:
1.1.1 詞典分詞法.又稱機械切分法.詞典分詞法主要有最大匹配法(MM法)、逆向最大匹配法(RMM、OMM、IMM)、逐詞匹配法、部件詞典法、詞頻統計法、設立標志法、并行分詞法、詞庫劃分和聯想匹配法等.
1.1.2 語義分詞法.語義分詞法引入了語義分析,對自然語言自身的語言信息進行更多的處理,如擴充轉移網絡法、知識分詞語義分析法、鄰接約束法、綜合匹配法、后綴分詞法、特征詞庫法、約束矩陣法和語法分析法等.
1.1.3 人工智能法.又稱理解分詞法.人工智能是對信息進行智能化處理的.一種模式,主要有兩種處理方式:一種是基于心理學的符號處理方法,模擬人腦的功能即專家系統.通過構造推理網絡,符號轉換,從而可以進行解釋性處理.一種是基于生理學的模擬方法.神經網絡旨在模擬人腦的神經系統機構的運作機制來實現一定的功能.以上兩種思路也是近年來人工智能領域研究的熱點問題,應用到分詞方法上,產生了專家系統分詞法和神經網絡分詞法.
1.2 詞典分詞法
目前國內最流行的分詞算法是詞典分詞法,因為其算法實現簡單,分詞效果目前要優于其他算法.基于詞典的自動分詞主要步驟包括分詞詞典的建立,分詞算法的選擇及岐義字段處理.在我們基于Lucene的應用系統中選用機械分詞算法中的最大匹配算法(MM法)作為Lucene中文分詞的核心算法.最大匹配算法的實現過程如下:
1.2.1 分詞詞典的選擇.分詞詞典主要包括兩部分內容:一個是詞典的內容,即以詞語為單位的有序表,另一個是詞典的組織形式,它對分詞系統的速度有很大的影響.詞典構造的好壞對分詞系統的分詞效果和速度有很大的影響.
1.2.2 分詞算法的實現.基于詞典的分詞方法的思路是先查找字典進行字串匹配,然后再適當地利用部分詞法規則進行歧義校正.具體過程為:初始化系統的分詞詞典,確定詞典的最大匹配長度,匹配長度的選取可以根據詞典中最長詞串來定義;把待分詞文本按中文的字為單位導入系統的數據結構中.假設對C1C2C3C4進行分詞處理,算法描述如下:
1)取一字符C1在詞典中查找C1并保存是否成詞標記;
2)再取一字C2判斷詞典中是否有以C1C2為前綴的詞;
3)不存在,則C1為單字,一次分詞結束;
4)存在,判斷C1C2是否為詞,并取以C1C2為首的多字詞的個數n;
5)若n=0,則一次分詞結束;
6)否則再取一字Ci判斷詞典中是否有以C1C2…Ci為前綴的詞;
7)若不存在,則返回最近一次能夠成詞的C1C2…Ci-1:
8)否則轉6);
9)保存當前C1C2…Ci,根據匹配信息判斷是否有成詞的前綴;
10)沒有,轉14);
11)有則匹配該詞條并去除前綴后的子串,判斷是否成詞;
12)不成詞則轉14);
13)成詞則標記為組合歧義字段;
14)從詞尾Ci開始進行下一次分詞;
上述算法采用的是正向最大匹配分詞算法.在系統的實際應用中得到了很好的分詞效果.
2 基于Lucene的中文文本分詞
Lucene是一個成熟的Apache Jakarta開源項目,它是具有高效性和可擴展性的全文索引引擎工具包.Lucene以Java語言編寫,可以方便地嵌入到各種應用中,以實現針對應用的全文索引/檢索功能.
2.1 Lucene功能介紹
Lucene的設計目標是對多種類型文檔提供索引和檢索功能,Lucene的組成模塊如表1所示.
Lucene的工作原理是首先對待索引和檢索的文檔進行分詞處理,然后在經過分詞處理后的文本上建立索引,為以后的檢索過程提供能夠進行快速檢索的索引結構.由此可見文本分詞技術在Lucene中起著及其重要的作用,如果不能為Lucene加入好的中文分詞功能,就不能對中文文本建立有效的索引以及進行有效的檢索.為Lucene加入中文分詞功能,首先要對負責分詞的模塊進行擴展,Lucene中的Analysis包專門用于完成文件索引前的分詞工作.因此在加入中文分詞功能前,必須對Analysis包的代碼及其實現的功能進行分析.Analysis包中最基礎的類為Token類,Token流是分詞階段(analysisprocess)最基礎的輸出流,英文中可以是一系列的單詞組成的流,每一個單詞就是一個Token.Token除了記錄單詞本身的值外,還記錄了單詞在原文本流中的起點、終點以及位置增量.在索引階段要把每一個Token轉換為一個term(Lucene索引結構的最小單位,可以是詞也可以是字).
Analysis包中主要包括Analyzer、TokenStream、Tokenizer、TokenFilter四個抽象類.他們各自的功能如下:
(1)Analyzer是一個抽象的基類,代碼十分簡潔.它的作用是把輸入的文本(為Reader流)轉換為Tokens流.
(2)TokenStream是一個抽象的基類,它是一系列Token的集合.
(3)Tokenizer繼承自TokenStream類,它的輸入是Reader流.
(4)TokenFilter繼承自TokenStream類,它的輸入是其他類型的Token流.在這些類的基礎上Lucene擴展了它們的功能,實現了復雜的英文分詞功能.比如在Analyzer的基礎上擴展了SimpleAnalyzer,在Tokenizer的基礎上擴展了LowerCaseTokenizer.
2.2 Lucene中文分詞算法實現
在Lucene中加入中文分詞功能,主要就是在Lucene的四個抽象基類的基礎上進行功能擴展.下面以SimpleAnalyzer為例看一下它的代碼:
public final class SimpleAnalyzer extends Analyzer {
public TokenStream tokenStream(String fieldName, Reader reader) {
return new LowerCaseTokenizer(reader);
}
}
通過這段代碼可以看出SimpleAnalyzer的代碼十分簡單,它的作用是返回一個LowerCaseTokenizer類型的Token流.給Lucene加入中文分詞功能可以仿照該過程加入自己的分詞詞典和算法,最后再把其包裝成Lucene的TokenStream流.實現步驟如下:
(1)選擇分詞詞典和停用詞詞典或者根據需要添加一些高頻詞詞典等.
(2)編寫分詞算法,如MM法(最大匹配法)、逐詞匹配法等.
(3)通過繼承Tokenizer類定義自己的MyTokenizer類,其目的是把已經經過分詞的文本流轉換為TokenStream流.
(4)通過繼承Analyzer定義自己的MyAnalyzer類,在類中實現以下方法:初始化詞典、調用分詞算法、轉化文本流為TokenStream流(通過引用MyTokenizer的一個實例實現),其目的是返回TokenStream流.
在實現中我們采用了知網的分詞詞典和復旦大學免費提供的停用詞詞典;算法是經過改進和加工過的MM法(最大匹配法),它可以實現中英文的混和分詞.
3 結論
Lucene平臺在國際上已經得到了廣泛的應用,給其加入具有良好分詞效果的中文分詞功能,對于推進其在國內的廣泛應用和發展會起到很大的推動作用.本文實現的正向最大匹配算法經過測試具有良好的分詞效果.該算法完善了中英文噪聲詞典、支持英文、數字、中文(簡體)混合分詞、常用的數量及人名的匹配.在Lucene中加入本文實驗得出的中文分詞包,實現了良好的中文分詞功能.因此,加入中文分詞包后的Lucene平臺在國內具有良好的推廣和應用價值.
參考文獻:
[1] 張春霞,郝天永.漢語自動分詞的研究現狀與困難[J].系統仿真學報,2005,17(1):139~140.
[2] 王偉,鐘義信,孫健等.一種基于EM非監督訓練的自組織分詞歧義解決方案[J].中文信息學報,2001,15(2):38~44.
[3] 黃德根,朱和合,楊元生.基于單詞與雙詞可信度的漢語自動分詞[J].計算機研究與發展,2001,增刊:132~135.
[4] 胡俊華,楊波,李金屏.自然語言理解研究略述[J].濟南大學學報,2001,(5):58~62.
[5] 曹倩,丁艷,王超等.漢語自動分詞研究及其在信息檢索中的應用[J].計算機應用研究,2004,(5):71~73.
[6] Gospodnetic O,Hatcher E.Lucene in Action [M].Manning Publications Co.2005.1~182.
[7] Sparck Jones,Karen.Information Retrieval and Artificial Intelligence [R].Artificial Intelligence Volume:114, Issue:12, October,1999.257~281.
[8] Yuan-Yuan Wang,Zhong-Shi He.New Aproach to Chinese Person Names Recognition Based on Part-of-SpeechDetecting [R].In The Proceedings of 2004 International Conference on Machine Learning and Cybernetics.August 26~29.2004.969~972.
[9] Jakarta Lucene Home Page.http://Joakarta.apache.org/lucene/.
[10] Brian Goetz. The Lucene Search Engine Powerful Flexible and Free: JavaWorld [EB/OL]. http://www. javaworld.com/javaworld/jw-09-2000/jw-0915-lucene p.html.2000-09.
總結
以上是生活随笔為你收集整理的基于Lucene的中文文本分词的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 位移运算(左移,右移)
- 下一篇: 游戏编程十年总结(上)