国内精品久久久久久久星辰影视-亚洲天堂久久精品成人-亚洲国产成人综合青青-91精品啪在线看国产网站-日韩一区二区在线观看

?
    開(kāi)發(fā)技術(shù) / Technology

    Lucene的中文分詞器IKAnalyzer

    日期:2015年1月29日  作者:zhjw  來(lái)源:昆明逆火科技股份有限公司    點(diǎn)擊:776

    分詞器對英文的支持是非常好的。

      一般分詞經(jīng)過(guò)的流程:

      1)切分關(guān)鍵詞

      2)去除停用詞

      3)把英文單詞轉為小寫(xiě)

      但是老外寫(xiě)的分詞器對中文分詞一般都是單字分詞,分詞的效果不好。

      國人林良益寫(xiě)的IK Analyzer應該是最好的Lucene中文分詞器之一,而且隨著(zhù)Lucene的版本更新而不斷更新,目前已更新到IK Analyzer 2012版本。

      IK Analyzer是一個(gè)開(kāi)源的,基于java語(yǔ)言開(kāi)發(fā)的輕量級的中文分詞工具包。到現在,IK發(fā)展為面向Java的公用分詞組件,獨立于Lucene項目,同時(shí)提供了對Lucene的默認優(yōu)化實(shí)現。在2012版本中,IK實(shí)現了簡(jiǎn)單的分詞歧義排除算法,標志著(zhù)IK分詞器從單純的詞典分詞向模擬語(yǔ)義分詞衍化。

      在系統環(huán)境:Core2 i7 3.4G雙核,4G內存,window 7 64位, Sun JDK 1.6_29 64位 普通pc環(huán)境測試,IK2012具有160萬(wàn)字/秒(3000KB/S)的高速處理能力。

      特別的,在2012版本,詞典支持中文,英文,數字混合詞語(yǔ)。

      IK Analyzer 2012版本的分詞效果示例:

      IK Analyzer2012版本支持 細粒度切分 和 智能切分。

      我們看兩個(gè)演示樣例:

      1)文本原文1:

      IKAnalyzer是一個(gè)開(kāi)源的,基于java語(yǔ)言開(kāi)發(fā)的輕量級的中文分詞工具包。從2006年12月推出1.0版本開(kāi)始,IKAnalyzer已經(jīng)推出了3個(gè)大版本。

      智能分詞結果:

      ikanalyzer | 是 | 一個(gè) | 開(kāi)源 | 的 | 基于 | java | 語(yǔ)言 | 開(kāi)發(fā) | 的 | 輕量級 | 的 | 中文 | 分詞 | 工具包 | 從 | 2006年 | 12月 | 推出 | 1.0版 | 開(kāi)始 | ikanalyzer | 已經(jīng) | 推 | 出了 | 3個(gè) | 大 | 版本

      最細粒度分詞結果:

      ikanalyzer | 是 | 一個(gè) | 一 | 個(gè) | 開(kāi)源 | 的 | 基于 | java | 語(yǔ)言 | 開(kāi)發(fā) | 的 | 輕量級| 量級 | 的 | 中文 | 分詞 | 工具包 | 工具 | 包 | 從 | 2006 | 年 | 12 | 月 | 推出 | 1.0 | 版 | 開(kāi)始 | ikanalyzer | 已經(jīng) | 推出 | 出了 | 3 | 個(gè) | 大 | 版本

      2)文本原文2:

      張三說(shuō)的確實(shí)在理。

      智能分詞結果:

      張三 | 說(shuō)的 | 確實(shí) | 在理

      最細粒度分詞結果:

      張三 | 三 | 說(shuō)的 | 的確 | 的 | 確實(shí) | 實(shí)在 | 在理

      IKAnalyzer的使用

      1)下載地址:

      GoogleCode開(kāi)源項目:http://code.google.com/p/ik-analyzer/

      GoogleCode下載地址:http://code.google.com/p/ik-analyzer/downloads/list

      2)兼容性:

      IKAnalyzer 2012版本兼容Lucene3.3以上版本。

      3)安裝部署:

      十分簡(jiǎn)單,只需要將IKAnalyzer2012.jar引入項目中就可以了。對于"的"、"了"、"著(zhù)"之類(lèi)的停用詞,它有一個(gè)詞典stopword.dic。把stopword.dic和IKAnalyzer.cfg.xml復制到class根目錄就可以啟用停用詞功能和擴展自己的詞典。

      4)測試例子:

      新建一個(gè)Java Project,引入Lucene所需的jar文件和IKAnalyzer2012.jar文件,把stopword.dic和IKAnalyzer.cfg.xml復制到class根目錄,建立一個(gè)擴展詞典ext.dic和中文停用詞詞典chinese_stopword.dic。

      IKAnalyzer2012發(fā)布包自帶的stopword.dic里面存的是英文的停用詞。所以我們新建一個(gè)chinese_stopword.dic,用來(lái)存放中文停用詞。chinese_stopword.dic需要使用UTF-8編碼。詞典中,每個(gè)中文詞匯獨占一行。

      chinese_stopword.dic內容格式:

      IKAnalyzer.cfg.xml:

    復制代碼
     1 <?xml version="1.0" encoding="UTF-8"?>
     2 <!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd">  
     3 <properties>  
     4     <comment>IK Analyzer 擴展配置</comment>
     5     <!--用戶(hù)可以在這里配置自己的擴展字典 -->
     6     <entry key="ext_dict">ext.dic;</entry> 
     7 
     8     <!--用戶(hù)可以在這里配置自己的擴展停止詞字典-->
     9     <entry key="ext_stopwords">stopword.dic;chinese_stopword.dic</entry> 
    10     
    11 </properties>
    復制代碼

      可以配置多個(gè)詞典文件,文件使用";"號分隔。文件路徑為相對java包的起始根路徑。

      擴展詞典ext.dic需要為UTF-8編碼。

      ext.dic內容:

      我把"2012"作為一個(gè)詞,"歐洲杯四強賽"作為一個(gè)詞。

      測試分詞代碼:

    復制代碼
     1 package com.cndatacom.lucene.test;
     2 
     3 import java.io.StringReader;
     4 
     5 import org.apache.lucene.analysis.Analyzer;
     6 import org.apache.lucene.analysis.TokenStream;
     7 import org.apache.lucene.analysis.tokenattributes.CharTermAttribute;
     8 import org.junit.Test;
     9 import org.wltea.analyzer.lucene.IKAnalyzer;
    10 
    11 
    12 /**
    13  * IKAnalyzer 分詞器測試
    15  */
    16 public class IKAnalyzerTest {
    17     
    18     @Test
    19     public void testIKAnalyzer() throws Exception {
    20         
    21         String keyWord = "2012年歐洲杯四強賽";
    22         
    23         IKAnalyzer analyzer = new IKAnalyzer();
    24         
    25         //使用智能分詞
    26         analyzer.setUseSmart(true);
    27         
    28         //打印分詞結果
    29         printAnalysisResult(analyzer,keyWord);
    30         
    31     }
    32     
    33     /**
    34      * 打印出給定分詞器的分詞結果
    35      * @param analyzer 分詞器
    36      * @param keyWord 關(guān)鍵詞
    37      * @throws Exception
    38      */
    39     private void printAnalysisResult(Analyzer analyzer, String keyWord) throws Exception {
    40         System.out.println("當前使用的分詞器:" + analyzer.getClass().getSimpleName());
    41         TokenStream tokenStream = analyzer.tokenStream("content", new StringReader(keyWord));
    42         tokenStream.addAttribute(CharTermAttribute.class);
    43         while (tokenStream.incrementToken()) {
    44             CharTermAttribute charTermAttribute = tokenStream.getAttribute(CharTermAttribute.class);
    45             System.out.println(new String(charTermAttribute.buffer()));
    46         }
    47     }
    48 }
    復制代碼

      打印出來(lái)的分詞結果:

      可以看到”2012“作為一個(gè)詞,“歐洲杯四強賽”也是作為一個(gè)詞,停用詞”年“已被過(guò)濾掉。