solr中文分詞


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

 

分詞的話,我們把“村村通工程 ”名詞化,分詞結果為:

 

說說中文分詞
中文分詞器有多中,常用的有 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>

配置詞庫

 

注意:
1、一些字符的處理 英文、俄文、希臘、數字(包括①㈠⒈)的分出一連串的。目前版本沒有處理小數字問題, 如ⅠⅡⅢ是單字分,字庫(chars.dic)中沒找到也單字分。
2、詞庫(強制使用 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。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM