1. 程式人生 > >Lucene分詞器之庖丁解牛

Lucene分詞器之庖丁解牛

注意:這裡配置環境變數要重新啟動系統後生效 我現在測試用的Lucene版本是lucene-2.4.0,它已經能夠支援中文分詞,但它是採用一元分詞(逐字拆分)的方法,即把每一個漢字當作是一個詞,這樣會使建立的索引非常龐大,會影響查詢效率.所以大多運用lucene的朋友,都會考慮使用其它的中文分詞包,這裡我就介紹最為常用的"庖丁解牛"分詞包,當然它也是一個值得推薦的中文分詞包. 
        本文主要講解Lucene如何整合"庖丁解牛"分詞包,在整合前,還是先通過一個例項演示一下Lucene自帶的中文分詞器的分詞效果. 
    package gzu.lyq.luceneAnalyzer; 
    import java.io.StringReader; 
    import org.apache.lucene.analysis.Analyzer; 
    import org.apache.lucene.analysis.Token; 
    import org.apache.lucene.analysis.TokenStream; 
    import org.apache.lucene.analysis.standard.StandardAnalyzer; 
    //測試Lucene自帶的中文分詞器
     
    public class LuceneAnalyzer { 
        public static void main(String[] args) throws Exception { 
            
//StandardAnalyzer: 一元分詞   
            Analyzer analyzer = new StandardAnalyzer(); 
            String  indexStr = "
我的QQ號碼是58472399"; 
            StringReader reader = new StringReader(indexStr); 
            TokenStream ts = analyzer.tokenStream(indexStr, reader); 
            Token t = ts.next(); 
            while (t != null) { 
                System.out.print(t.termText()+"  "); 
                t = ts.next(); 
            } 
        } 
    } 
分詞結果:
我  的  qq  號  碼  是  234456   
        通過上面的例子就會發現,Lucene自帶分詞器是將中文逐字拆分的,這是最為原始的分詞方法,現在大都不採用. 
        下面進入主題,來講解Lucene和"庖丁解牛"中文分詞包的整合. 
        "庖丁解牛"的下載地址是
[url]http://code.google.com/p/paoding/downloads/list[/url],下載好後解壓,我解壓在E:\paoding2_0_4,進入該目錄,首先將paoding-analysis.jar拷貝到專案的WEB-INF/lib目錄;接著需要設定環境變數PAODING_DIC_HOME,變數名:PAODING_DIC_HOME 變數值:E:\paoding2_0_4\dic 第三步將E:\paoding2_0_4\src目錄下的paoding-dic-home.properties屬性檔案拷貝到專案的src目錄下,新增一行paoding.dic.home=E:/paoding2_0_4/dic
 好了,到這裡,已經完成了Lucene和"庖丁解牛"的整合,下面寫個例子來測試一下. 
    package gzu.lyq.luceneAnalyzer; 
    import java.io.StringReader; 
    import org.apache.lucene.analysis.Analyzer; 
    import org.apache.lucene.analysis.Token; 
    import org.apache.lucene.analysis.TokenStream; 
    import net.paoding.analysis.analyzer.PaodingAnalyzer; 
    
//測試"庖丁解牛"中文分詞器的分詞效果     
    public class PaodingAnalyzer { 
        public static void main(String[] args) throws Exception { 
            Analyzer analyzer = new PaodingAnalyzer(); 
            String  indexStr = "
我的QQ號碼是3453245"; 
            StringReader reader = new StringReader(indexStr); 
            TokenStream ts = analyzer.tokenStream(indexStr, reader); 
            Token t = ts.next(); 
            while (t != null) { 
                System.out.print(t.termText()+"  "); 
                t = ts.next(); 
            } 
        } 
    } 
分詞結果:
我的  qq  號碼  3453245   
如果把indexStr換成是"中華人民共和國萬歲" ,那麼分詞結果為: 
中華  華人  人民  共和  共和國  萬歲
   注意:用庖丁分詞器的時候,首先加入的包路徑中不能有中文,似乎中文不認,要加入common-logging.jar包,要不然會提示找不到類。