• <th id="kadjp"></th>

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

                Lucene的中文分詞器IKAnalyzer

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

                分詞器對(duì)英文的支持是非常好的。

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

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

                  2)去除停用詞

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

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

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

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

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

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

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

                  IK Analyzer2012版本支持 細(xì)粒度切分 和 智能切分。

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

                  1)文本原文1:

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

                  智能分詞結(jié)果:

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

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

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

                  2)文本原文2:

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

                  智能分詞結(jié)果:

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

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

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

                  IKAnalyzer的使用

                  1)下載地址:

                  GoogleCode開源項(xiàng)目: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引入項(xiàng)目中就可以了。對(duì)于"的"、"了"、"著"之類的停用詞,它有一個(gè)詞典stopword.dic。把stopword.dic和IKAnalyzer.cfg.xml復(fù)制到class根目錄就可以啟用停用詞功能和擴(kuò)展自己的詞典。

                  4)測(cè)試?yán)樱?/span>

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

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

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

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

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

                  ext.dic內(nèi)容:

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

                  測(cè)試分詞代碼:

                復(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 分詞器測(cè)試
                15  */
                16 public class IKAnalyzerTest {
                17     
                18     @Test
                19     public void testIKAnalyzer() throws Exception {
                20         
                21         String keyWord = "2012年歐洲杯四強(qiáng)賽";
                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("當(dāng)前使用的分詞器:" + 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“作為一個(gè)詞,“歐洲杯四強(qiáng)賽”也是作為一個(gè)詞,停用詞”年“已被過濾掉。

                国产欧美在线观看,国产精品白浆冒出视频,91精品国产91热久久久福利,大伊香蕉在线精品视频97 国产精品美女久久福利 国产精品黄的免费观看
              • <th id="kadjp"></th>