1. 程式人生 > >13.solr學習速成之IK分詞器

13.solr學習速成之IK分詞器

更新 api 一個 廣泛 針對 -i 處理器 多個 -1

IKAnalyzer簡介

IKAnalyzer是一個開源的,基於java語言開發的輕量級的中文分詞工具包。 技術分享技術分享

IKAnalyzer特性

a. 算法采用“正向叠代最細粒度切分算法”,支持細粒度和最大詞長兩種分詞方式,速度最大支持80W字/秒(1600KB/秒)。 b. 支持多子處理器分析模式:中文、數字、字母,並兼容日文、韓文。 c. 較小的內存占用,優化詞庫占有空間,用戶可自定義擴展詞庫。 d. 擴展lucene的擴展實現,采用歧義分析算法優化查詢關鍵字的搜索排列組合,提高lucene檢索命中率

IK分詞算法理解

根據作者官方說法IK分詞器采用“正向叠代最細粒度切分算法”,分析它的源代碼,可以看到分詞工具類IKQueryParser起至關重要的作用,它對搜索關鍵詞采用從最大詞到最小詞層層叠代檢索方式切分,比如搜索詞:“中華人民共和國成立了”,首先到詞庫中檢索該搜索詞中最大分割詞,即分割為:“中華人民共和國”和“成立了”,然後對“中華人民共和國”切分為“中華人民”和“人民共和國”,以此類推。最後,“中華人民共和國成立了”切分為:“中華人民 | 中華 | 華人 | 人民 | 人民共和國 | 共和國 | 共和 | 成立 | 立了”,當然,該切分方式為默認的細粒度切分,若按最大詞長切分,結果為:“中華人民共和國 | 成立 | 立了”。

其它分詞器

目前的分詞器有:mmseg4j、paoding、ik-analyzer、imdict、Ansj;目前任在持續更新的有mmseg4j、ik-analyzer和Ansj,這三類分詞器都有java的實現,ansj是一個ictclas的java實現,ictclas是中科院計算技術研究所的一個中文分詞器,目前用的比較廣泛的還是ik-analyzer分詞器和mmseg4j 分詞器,我們對比下: mmseg4j :自帶sogou詞庫,支持名為 wordsxxx.dic, utf8文本格式的用戶自定義詞庫,一行一詞。不支持自動檢測。 ik :支持api級的用戶詞庫加載,和配置級的詞庫文件指定,無 BOM 的 UTF-8 編碼,rn 分割。不支持自動檢測。 mmseg4j : 在complex基礎上實現了最多分詞(max-word),但是還不成熟,還有很多需要改進的地方。 ik :針對Lucene全文檢索優化的查詢分析器IKQueryParser

IK與solr的集成

1.添加jar

將ik-analyzer-solr5-5.x.jar 放到apache-tomcat-8.5.15/webapps/solr/WEB-INF/lib 2.配置test核下面的schema.xml
<fieldType name="text_ik" class="solr.TextField">
        <analyzer type="index">
            <tokenizer class="org.wltea.analyzer.lucene.IKTokenizerFactory" useSmart="false"
/> </analyzer> <analyzer type="query"> <tokenizer class="org.wltea.analyzer.lucene.IKTokenizerFactory" useSmart="true"/> </analyzer> </fieldType>

有了這個fieldType,我們順便改一個text_ik的field

<!--
   <field name="title" type="text_general" indexed="true" stored="true" multiValued="true"/>
   -->
   <field name="title" type="text_ik" indexed="true" stored="true" multiValued="true"/>
3.添加擴展詞庫 在apache-tomcat-8.5.15/webapps/solr/WEB-INF下創建classes文件夾,添加ext.dic,IKAnalyzer.cfg.xml,stopword.dic文件 也可以添加多個詞庫文件.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>
重啟tomcat

技術分享

技術分享

13.solr學習速成之IK分詞器