solr中文分詞

solr分詞,就是solr配置的字段類型根據註冊的分詞文件分詞斷句的行爲。
例如:大家村村通工程知道嗎?
不分詞的時候會是這樣:

 

分詞的話,咱們把「村村通工程 」名詞化,分詞結果爲:java

 

說說中文分詞
中文分詞器有多中,經常使用的有 IKAnalyzer、 mmseg4j。
前者最新版本更新到2012年,因此使用的時候要注意可能版本上有不兼容的狀況, 因爲它是一個開源的,基於java語言開發的輕量級的中文分詞工具包。從2006年12月推出1.0版開始, IKAnalyzer已經推出了4個大版本。最初,它是以開源項目Luence爲應用主體的,結合詞典分詞和文法分析算法的中文分詞組件。從3.0版本開始,IK發展爲面向Java的公用分詞組件,獨立於Lucene項目,同時提供了對Lucene的默認優化實現。在2012版本中,IK實現了簡單的分詞歧義排除算法,標誌着IK分詞器從單純的詞典分詞向模擬語義分詞衍化
使用方法,須要下載相應的jar、配置文件, 我這裏分享了一個連接
將ik的相關文件 拷貝到 solr工程的lib目錄,配置 schema.xml 文件, 同時,把須要分詞的字段,設置爲text_ik,:
<!-- 須要分詞的字段 -->
<field name="content" type="text_ik" indexed="true" stored="true" required="true" multiValued="false" />

        <!-- 我添加的IK分詞 -->
        <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>
solr服務重啓,索引文件重建。
配置IKAnalyzer分詞器的擴展詞典,中止詞詞典
將 文件夾下的 IKAnalyzer.cfg.xml ,stopword.dic 文件 複製到/webapps/solr/WEB-INF/classes 目錄下,並修改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,mmseg4j算是更新頻率高的,目前還在更新。 mmseg4j 用 Chih-Hao Tsai 的 MMSeg 算法( http://technology.chtsai.org/mmseg/ )實現的中文分詞器,並實現 lucene 的 analyzer 和 solr 的TokenizerFactory 以方便在Lucene和Solr中使用。 MMSeg 算法有兩種分詞方法:Simple和Complex,都是基於正向最大匹配。Complex 加了四個規則過慮。官方說:詞語的正確識別率達到了 98.41%。mmseg4j 已經實現了這兩種分詞算法。
使用方法
下載文件,導入solr服務的lib目錄下
 mmseg4j-core-1.10.0.jar
 mmseg4j-solr-2.3.0.jar
配置schema.xml 文件, dicPath 指定詞庫位置(每一個MMSegTokenizerFactory能夠指定不一樣的目錄,當是相對目錄時,是相對 solr.home 的目錄),mode 指定分詞模式(simple|complex|max-word,默認是max-word)。
    <fieldtype name="textComplex" class="solr.TextField" positionIncrementGap="100">
        <analyzer type="index">
            <tokenizer class="com.chenlb.mmseg4j.solr.MMSegTokenizerFactory" mode="complex" dicPath="E:/solr_home/connect/conf/dic/" />
            <filter class="solr.StopFilterFactory" ignoreCase="false" words="stopwords.txt"/>
            <filter class="solr.WordDelimiterFilterFactory"/>
            <filter class="solr.LowerCaseFilterFactory"/>
            <filter class="solr.NGramFilterFactory" minGramSize="1" maxGramSize="20"/>
            <filter class="solr.StandardFilterFactory"/>
        </analyzer>
        <analyzer type="query">
            <tokenizer class="com.chenlb.mmseg4j.solr.MMSegTokenizerFactory" mode="complex" dicPath="E:/solr_home/connect/conf/dic/" />
            <filter class="solr.SynonymFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="true"/>
            <filter class="solr.StopFilterFactory" ignoreCase="false" words="stopwords.txt"/>
            <filter class="solr.WordDelimiterFilterFactory"/>
            <filter class="solr.LowerCaseFilterFactory"/>
            <!--  <filter class="solr.EdgeNGramFilterFactory" minGramSize="1" maxGramSize="20"/> -->
            <filter class="solr.RemoveDuplicatesTokenFilterFactory"/>
        </analyzer>
    </fieldtype>

配置詞庫git

 

注意:
一、一些字符的處理 英文、俄文、希臘、數字(包括①㈠⒈)的分出一連串的。目前版本沒有處理小數字問題, 如ⅠⅡⅢ是單字分,字庫(chars.dic)中沒找到也單字分。
二、詞庫(強制使用 UTF-8):
  • data/chars.dic 是單字與語料中的頻率,通常不用改動,1.5版本中已經加到mmseg4j的jar裏了,咱們不須要關心它,固然你在詞庫目錄放這個文件可能覆蓋它。
  • data/units.dic 是單字的單位,默認讀jar包裏的,你也能夠自定義覆蓋它,這功能是試行,若是不喜歡它,能夠空的units.dic文件覆蓋它。
  • data/words.dic 是詞庫文件,一行一詞,固然你也可使用本身的,1.5版本使用 sogou 詞庫,1.0的版本是用 rmmseg 帶的詞庫。
  • data/wordsxxx.dic 1.6版支持多個詞庫文件,data 目錄(或你定義的目錄)下讀到"words"前綴且".dic"爲後綴的文件。如:data/words-my.dic。
相關文章
相關標籤/搜索