mmseg4j中文分詞包學(xué)習(xí)報告

目錄

1.認識中文分詞包
2.分詞方法與效果分析
3.分詞包背后的分詞算法學(xué)習(xí)
4.分詞結(jié)果提交
5.基于分詞結(jié)果的詞云分析
<p>1.認識中文分詞包
本次的中文分詞包學(xué)習(xí)我使用的是mmseg4j分詞器,資料查得,mmseg4j用Chih-Hao Tsai 的MMSeg算法實現(xiàn)的中文分詞器,并實現(xiàn)lucene的analyzer和solr的TokenizerFactory以方便在Lucene和Solr中使用。 MMSeg 算法有三種分詞方法:MaxWord、Simple和Complex,都是基于正向最大匹配。

  • <p>solr +mmseg4j中文分詞
    此方法是在solr下配置中文分詞器mmeseg4j,在配置前,需要安裝好java運行環(huán)境。配置jdk。
    solr下載:http://www-eu.apache.org/dist/lucene/solr/6.5.1/
    下載solr后本地便可以使用,運行cmd,進入下載的solr文件中的bin文件夾中,通過solr start命令運行solr
    solrstart.png

    如此,便可在本地打開solr:http://localhost:8983/solr/#/
solr.png
    隨后,下載mmseg4j配置在solr中。
    mmseg4j下載:http://download.csdn.net/search?keywords=mmseg4j
    整合mmseg4j:
    (1)mmseg4j支持Solr需要使用附件的mmseg4j-solr-x.x.x.jar以及mmseg4j-core-x.x.jar(x是多少取決于下載的solr的版本),將這兩個jar包放在類似于這樣的目錄下:

../solr/server/solr-webapp/webapp/WEB-INF/lib
(2)在cmd中,創(chuàng)建一個core:solr create -c abc(abc為自定義)

solrcreate.png
    (3)進入目錄:../solr/server/solr/abc/conf,修改其中managed-schem


<!-- mmseg4j-->
    <field name="mmseg4j_complex_name" type="text_mmseg4j_complex" indexed="true" stored="true"/>
    <field name="mmseg4j_maxword_name" type="text_mmseg4j_maxword" indexed="true" stored="true"/>
    <field name="mmseg4j_simple_name" type="text_mmseg4j_simple" indexed="true" stored="true"/>

    <fieldType name="text_mmseg4j_complex" class="solr.TextField" positionIncrementGap="100" >
        <analyzer>
          <tokenizer class="com.chenlb.mmseg4j.solr.MMSegTokenizerFactory" mode="complex" dicPath="D:\solr\solr-6.5.1\server\solr\abc\conf"/>
          <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" />
        </analyzer>
    </fieldType>
    <fieldType name="text_mmseg4j_maxword" class="solr.TextField" positionIncrementGap="100" >
        <analyzer>
           <tokenizer class="com.chenlb.mmseg4j.solr.MMSegTokenizerFactory" mode="max-word" dicPath="D:\solr\solr-6.5.1\server\solr\abc\conf"/>
           <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" />
        </analyzer>
    </fieldType>
    <fieldType name="text_mmseg4j_simple" class="solr.TextField" positionIncrementGap="100" >
        <analyzer>
        <tokenizer class="com.chenlb.mmseg4j.solr.MMSegTokenizerFactory" mode="simple" dicPath="D:\solr\solr-6.5.1\server\solr\abc\conf"/>
        <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" />
      </analyzer>
  </fieldType>
<!-- mmseg4j-->

注意:dicPath中的值應(yīng)修改為相應(yīng)的值。
重啟Solr 后,即可在新創(chuàng)建的abc這個core的Analysis中看到mmseg4j新增的field


solrabc.png

到這個時候便可以開始輸入字段進行分詞了。但這里我卻遇到很大的問題。如下圖,當我輸入一段文字以后,點擊分詞卻毫無反應(yīng),也不知道是什么問題,到處都修改了一遍甚至重新安裝了一遍還是同樣的錯誤。前前后后弄了好幾個小時。


analysef.png

我也很崩潰,特別崩潰。后來已經(jīng)是純屬亂弄了,然而當我點了右上角那個Use <u>original UI</u>后,竟莫名其妙地可以了,很奇怪的地方,我也不懂為什么。但是再看右上角的文字,說是該用戶界面過時,隱隱擔(dān)心可能后續(xù)步驟會進行不下去。知道其中緣由的還望求解。
analyset.png

<p>
  • <p>本地cmd中mmseg4j中文分詞
    這個步驟倒是不需要solr,直接一個命令后就可以進行分詞操作了。好處是方便操作,不好的地方是所分詞的文字需要復(fù)制粘貼進去,而分好的內(nèi)容需要復(fù)制粘貼出來,而且無法對文件分詞,它只能對復(fù)制或輸入的文字進行分詞。
    進入mmseg4j所在文件夾,輸入:java -cp mmseg4j-core-1.10.0.jar com.chenlb.mmseg4j.example.MaxWord(用哪種分詞方法就寫哪種)+ 所要分詞的字符串,如此便可得到結(jié)果。
mmseg4j.png

<p>2.分詞方法與效果分析
最近又大火的歡樂頌,我就用歡樂頌的簡介進行分詞。分詞內(nèi)容為:
從外地來上海打拼的樊勝美(蔣欣飾)、關(guān)雎爾(喬欣飾)、邱瑩瑩(楊紫飾)三個女生合租一套房,與高智商海歸金領(lǐng)安迪(劉濤飾)、魅力超群的富家女曲筱綃(王子文飾),同住在一個名叫“歡樂頌”的中檔小區(qū)22樓,五個女人性格迥異,各自攜帶著來自工作、愛情和家庭的困難與不如意,因為鄰居關(guān)系而相識相知,從互相揣測對方到漸漸接納彼此并互相敞開心扉,在這一過程中齊心協(xié)力解決了彼此生活中發(fā)生的種種問題和困惑,并見證彼此在上海這座“魔都”的成長與蛻變。 不離不棄、手拉手、團結(jié)一心、克服困難、目標一致。

outsolr.png

這是solr上的分詞結(jié)果,可以看出,其無法看到完整的分詞內(nèi)容(或許有解決方法但至今我還沒有找到),所以我決定在cmd內(nèi)進行分詞。
<p>maxword方法:


outm.png

complex方法:


outc.png

simple方法:
outs.png

分詞效果分析:
可以看出三個方法的分詞結(jié)果不盡相同,歸納出三種方法的不一樣處及正確分詞方法:

dif.png

除此之外,三種分詞方法存在著一些同樣的錯誤。

人名錯誤:樊勝美、蔣欣、關(guān)雎爾、喬欣、邱瑩瑩、楊紫、安迪、劉濤、曲筱綃、王子文。

其他錯誤:

  • 錯誤:一 | 套房
    正確:一套房
  • 錯誤:高 | 智商
    正確:高智商
  • 錯誤:海 | 歸
    正確:海歸
  • 錯誤:金 | 領(lǐng)
    正確:金領(lǐng)
  • 錯誤:魅力 | 超群
    正確:魅力超群
  • 錯誤:富 | 家 | 女
    正確:富家女
  • 錯誤:魔 | 都
    正確:魔都
  • 錯誤:團結(jié) | 一心
    正確:團結(jié)一心
  • 錯誤:目標 | 一致
    正確:目標一致

綜上所述可以看出,complex這一分詞方法的準確率最高。

    存在分詞錯誤時,便需要進行改進。改進的方法是設(shè)置自定義詞庫包,再將詞庫包放入詞庫目錄下。cmd中還需要配置環(huán)境,較為麻煩,所以我決定在solr進行詞庫的添加。
    首先,我創(chuàng)建相應(yīng)的詞庫包:words-test-my.dic(需以words開頭,擴展名為dic)。
word.png

隨后,將該詞庫包放入詞庫目錄下。
..\solr\server\solr\abc\conf
在此,還需要在managed-schem添加字段(度娘上看到的教程,我也不知道這段文字是干什么的)。

<requestHandler name="/mmseg4j/reloadwords" class="com.chenlb.mmseg4j.solr.MMseg4jHandler">
    <lst name="defaults">
        <str name="dicPath">D:\solr\solr-6.5.1\server\solr\abc\conf</str>
        <str name="check">true</str>
        <str name="reload">true</str>
    </lst>
</requestHandler>

同樣,dicPath中的值應(yīng)修改為相應(yīng)的值。
<p>


out1.png
out2.png
out3.png
out4.png
out5.png
out6.png

以上為增加詞庫后的分詞結(jié)果,將就看吧。

3.分詞包背后的分詞算法學(xué)習(xí)
mmseg4j使用的是Chih-Hao Tsai 的MMSeg算法
其算法原文:http://technology.chtsai.org/mmseg/

  • Simple算法:
    Simple算法是簡單最大匹配算法,其基本形式是解析單個單詞的歧義性。例如,假設(shè)C1,C2,….代表一個字符串中的漢字。我們首先位于字符串的開頭并想知道如何區(qū)分單詞。我們首先搜索詞典,看 C1是否為一個單個漢字組成的單詞,然后搜索 C1C2來看是否為一個兩個漢字組成的單詞,以下類推。直至找到字典中最長的匹配。最可能的單詞就是最長的匹配。我們?nèi)∵@個單詞,然后繼續(xù)這個過程直至字符串中的最后一個單詞被識別出來。

  • Complex算法
    Complex算法是復(fù)雜最大匹配算法。最大匹配規(guī)則是最大長度的三個詞塊合理的分割,當存在模糊分割時(比如, C1 是一個詞,但 C1C2 也是一個詞),此時將向前兩個單詞找出所有可能的以C1C1C2的詞塊,進行匹配。
    例如:
    你 | 是 | 不
    你 | 是 | 不是
    你是 | 不 | 是
    你是 | 不 | 是傻
    你是 | 不是 | 傻

  • 消除歧義規(guī)則
    (1)最大匹配,包括簡單最大匹配及復(fù)雜最大匹配。
    (2)最大平均字長度
    (3)單詞長度的最小方差
    (4)單字單詞的語素自由度的最大和

4.分詞結(jié)果提交
我進行了政府工作報告的分詞。詳情可見:
政府工作報告原文http://www.itdecent.cn/p/9dab71d520e6
政府工作報告分詞原文(Complex分詞)http://www.itdecent.cn/p/a0a89ed0918d
政府工作報告分詞(修改分詞后)http://www.itdecent.cn/p/1f93a0d4bdfb

5.基于分詞結(jié)果的詞云分析(詞頻統(tǒng)計+可視化)
使用的是在線詞頻制作進行政府工作報告的詞頻統(tǒng)計。

yun1.png
yun.png
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容