1. 程式人生 > >【Apache Solr系列】使用IKAnalyzer中文分詞以及自定義分詞字典

【Apache Solr系列】使用IKAnalyzer中文分詞以及自定義分詞字典

之前寫的Apache Solr只介紹了簡單的搭建以及匯入資料等功能,最近由於專案要求,新增索引分詞和搜尋分詞功能;分詞的專案有包括好幾個:smartcn、ictclas4j、IK、jeasy、庖丁、mmseg4j;

以上幾種分詞器各有優缺點,根據不同場景可分可定製和不可定製兩種:

一種是基於中科院ICTCLAS的隱式馬爾科夫HMM演算法的中文分詞器,如smartcn,ictclas4j,優點是分詞準確度高,缺點是不能使用使用者自定義詞庫;

另一種是基於最大匹配的分詞器,如IK ,Jeasy,庖丁,優點是可以自定義詞庫,增加新詞,缺點是分出來的垃圾詞較多。

檔案下載

IKAnalyzer下載地址:https://ik-analyzer.googlecode.com/files/IK%20Analyzer%202012FF_hf1.zip

這裡我使用的是IK Analyzer 2012FF_hf1.zip這個包;因為我用的是solr4.x的;

解壓、檔案拷貝

下載之後用unzip解壓,沒有安裝unzip童鞋安裝下;

解壓之後講IKAnalyzer的jar包拷貝到$SOLR_HOME的lib目錄下;將IKAnalyzer.conf.xml和stopword.dic放到classes目錄下,我這裡的classes目錄是

/data/projects/apprank-solr.zqgame.com/WEB-INF/classes
重點檔案說明 

* IKAnalyzer.conf.xml主要的作用是用於自定義分詞字典以及停止詞字典的指定;

 * stopword.dic是預設自帶的停止詞,你可以新增自己的停止詞到這個檔案中;

配置

這裡我們只講IKAnalyzer的分詞器配置。其實分詞器的配置大同小異,IKAnalyzer具體配置如下;

<fieldType name="text" class="solr.TextField">   
       <analyzer class="org.wltea.analyzer.lucene.IKAnalyzer"/>   
</fieldType>  
或者是
<fieldType name="text_ik" class="solr.TextField"> 
       <analyzer type="index" isMaxWordLength="false" class="org.wltea.analyzer.lucene.IKAnalyzer"/> 
       <analyzer type="query" isMaxWordLength="true" class="org.wltea.analyzer.lucene.IKAnalyzer"/> 
</fieldType>
如果是其他的分詞器;也是類似,將class修改為對應的分詞處理器類就OK;

配置完fieldType之後,我們將要使用到分詞器的field的type屬性修改為我們新新增fieldType;

<field name="name" type="text_ik" indexed="true"/>
這樣重啟之後,分詞器就生效了!來看下效果


之前原本想使用mmseg4j的,但是網上查了之後據說分詞效果不是很好。所以就用IKAnalyzer,而且mmseg4j的配置比IK要複雜一點;

自定義分詞字典

接下來講下自定義分詞字典,前面我們在重點檔案說明中以及提到了IKAnalyzer.cfg.xml的作用;先來看下這個檔案的內容

[email protected]:/data/projects/clusters/IKAnalyzer$ more IKAnalyzer.cfg.xml 
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd">  
<properties>  
        <comment>IK Analyzer 擴充套件配置</comment>
        <!--使用者可以在這裡配置自己的擴充套件字典 
        <entry key="ext_dict">ext.dic;</entry> 
        -->
        <!--使用者可以在這裡配置自己的擴充套件停止詞字典-->
        <entry key="ext_stopwords">stopword.dic;</entry> 

</properties>
配置一目瞭然,很簡單;

我們在IKAnalyzer.cfg.xml的同級目錄下新增一個ext.dic的檔案,檔案內新增自己的分詞字典,重啟就可以了!

注:這裡要把上面的ext_dict項的註釋去掉,要不然不會起作用的;

看下我們的自定義分詞字典ext.dic

天天跑酷
天天愛消除
天天
這裡比較簡單,我只添加了三個自定義分詞,那麼來看下效果把!

大家可以看到效果還不錯。呵呵!

轉載請註明來源地址:http://blog.csdn.net/weijonathan/article/details/18354723