13.solr學習速成之IK分詞器
阿新 • • 發佈:2017-05-24
更新 api 一個 廣泛 針對 -i 處理器 多個 -1
目前的分詞器有: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
IKAnalyzer簡介
IKAnalyzer是一個開源的,基於java語言開發的輕量級的中文分詞工具包。
IKAnalyzer特性
a. 算法采用“正向叠代最細粒度切分算法”,支持細粒度和最大詞長兩種分詞方式,速度最大支持80W字/秒(1600KB/秒)。 b. 支持多子處理器分析模式:中文、數字、字母,並兼容日文、韓文。 c. 較小的內存占用,優化詞庫占有空間,用戶可自定義擴展詞庫。 d. 擴展lucene的擴展實現,采用歧義分析算法優化查詢關鍵字的搜索排列組合,提高lucene檢索命中率IK分詞算法理解
根據作者官方說法IK分詞器采用“正向叠代最細粒度切分算法”,分析它的源代碼,可以看到分詞工具類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分詞器