<code id="qf3hh"></code>
  • <menuitem id="qf3hh"></menuitem>
  • <strike id="qf3hh"><label id="qf3hh"></label></strike>

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

      Lucene的中文分詞器IKAnalyzer

      日期:2015年1月29日  作者:zhjw  來源:昆明逆火科技股份有限公司    點擊:989

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

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

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

        2)去除停用詞

        3)把英文單詞轉(zhuǎn)為小寫

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

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

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

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

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

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

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

        我們看兩個演示樣例:

        1)文本原文1:

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

        智能分詞結(jié)果:

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

        最細粒度分詞結(jié)果:

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

        2)文本原文2:

        張三說的確實在理。

        智能分詞結(jié)果:

        張三 | 說的 | 確實 | 在理

        最細粒度分詞結(jié)果:

        張三 | 三 | 說的 | 的確 | 的 | 確實 | 實在 | 在理

        IKAnalyzer的使用

        1)下載地址:

        GoogleCode開源項目:http://code.google.com/p/ik-analyzer/

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

        2)兼容性:

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

        3)安裝部署:

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

        4)測試例子:

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

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

        chinese_stopword.dic內(nèi)容格式:

        IKAnalyzer.cfg.xml:

      復(fù)制代碼
       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     <!--用戶可以在這里配置自己的擴展字典 -->
       6     <entry key="ext_dict">ext.dic;</entry> 
       7 
       8     <!--用戶可以在這里配置自己的擴展停止詞字典-->
       9     <entry key="ext_stopwords">stopword.dic;chinese_stopword.dic</entry> 
      10     
      11 </properties>
      復(fù)制代碼

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

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

        ext.dic內(nèi)容:

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

        測試分詞代碼:

      復(fù)制代碼
       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         //打印分詞結(jié)果
      29         printAnalysisResult(analyzer,keyWord);
      30         
      31     }
      32     
      33     /**
      34      * 打印出給定分詞器的分詞結(jié)果
      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 }
      復(fù)制代碼

        打印出來的分詞結(jié)果:

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

      国产一级婬片AAA毛,无码中文精品视视在线观看,欧美日韩a人成v在线动漫,五月丁香青草久久
      <code id="qf3hh"></code>
    • <menuitem id="qf3hh"></menuitem>
    • <strike id="qf3hh"><label id="qf3hh"></label></strike>