mmseg4j中文分词包学习报告

目录

1.认识中文分词包
2.分词方法与效果分析
3.分词包背后的分词算法学习
4.分词结果提交
5.基于分词结果的词云分析
<p>1.认识中文分词包
本次的中文分词包学习我使用的是mmseg4j分词器,资料查得,mmseg4j用Chih-Hao Tsai 的MMSeg算法实现的中文分词器,并实现lucene的analyzer和solr的TokenizerFactory以方便在Lucene和Solr中使用。 MMSeg 算法有三种分词方法:MaxWord、Simple和Complex,都是基于正向最大匹配。

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中,创建一个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中的值应修改为相应的值。
重启Solr 后,即可在新创建的abc这个core的Analysis中看到mmseg4j新增的field


solrabc.png

到这个时候便可以开始输入字段进行分词了。但这里我却遇到很大的问题。如下图,当我输入一段文字以后,点击分词却毫无反应,也不知道是什么问题,到处都修改了一遍甚至重新安装了一遍还是同样的错误。前前后后弄了好几个小时。


analysef.png

我也很崩溃,特别崩溃。后来已经是纯属乱弄了,然而当我点了右上角那个Use <u>original UI</u>后,竟莫名其妙地可以了,很奇怪的地方,我也不懂为什么。但是再看右上角的文字,说是该用户界面过时,隐隐担心可能后续步骤会进行不下去。知道其中缘由的还望求解。
analyset.png

<p>
  • <p>本地cmd中mmseg4j中文分词
    这个步骤倒是不需要solr,直接一个命令后就可以进行分词操作了。好处是方便操作,不好的地方是所分词的文字需要复制粘贴进去,而分好的内容需要复制粘贴出来,而且无法对文件分词,它只能对复制或输入的文字进行分词。
    进入mmseg4j所在文件夹,输入:java -cp mmseg4j-core-1.10.0.jar com.chenlb.mmseg4j.example.MaxWord(用哪种分词方法就写哪种)+ 所要分词的字符串,如此便可得到结果。
mmseg4j.png

<p>2.分词方法与效果分析
最近又大火的欢乐颂,我就用欢乐颂的简介进行分词。分词内容为:
从外地来上海打拼的樊胜美(蒋欣饰)、关雎尔(乔欣饰)、邱莹莹(杨紫饰)三个女生合租一套房,与高智商海归金领安迪(刘涛饰)、魅力超群的富家女曲筱绡(王子文饰),同住在一个名叫“欢乐颂”的中档小区22楼,五个女人性格迥异,各自携带着来自工作、爱情和家庭的困难与不如意,因为邻居关系而相识相知,从互相揣测对方到渐渐接纳彼此并互相敞开心扉,在这一过程中齐心协力解决了彼此生活中发生的种种问题和困惑,并见证彼此在上海这座“魔都”的成长与蜕变。 不离不弃、手拉手、团结一心、克服困难、目标一致。

outsolr.png

这是solr上的分词结果,可以看出,其无法看到完整的分词内容(或许有解决方法但至今我还没有找到),所以我决定在cmd内进行分词。
<p>maxword方法:


outm.png

complex方法:


outc.png

simple方法:
outs.png

分词效果分析:
可以看出三个方法的分词结果不尽相同,归纳出三种方法的不一样处及正确分词方法:

dif.png

除此之外,三种分词方法存在着一些同样的错误。

人名错误:樊胜美、蒋欣、关雎尔、乔欣、邱莹莹、杨紫、安迪、刘涛、曲筱绡、王子文。

其他错误:

  • 错误:一 | 套房
    正确:一套房
  • 错误:高 | 智商
    正确:高智商
  • 错误:海 | 归
    正确:海归
  • 错误:金 | 领
    正确:金领
  • 错误:魅力 | 超群
    正确:魅力超群
  • 错误:富 | 家 | 女
    正确:富家女
  • 错误:魔 | 都
    正确:魔都
  • 错误:团结 | 一心
    正确:团结一心
  • 错误:目标 | 一致
    正确:目标一致

综上所述可以看出,complex这一分词方法的准确率最高。

    存在分词错误时,便需要进行改进。改进的方法是设置自定义词库包,再将词库包放入词库目录下。cmd中还需要配置环境,较为麻烦,所以我决定在solr进行词库的添加。
    首先,我创建相应的词库包: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中的值应修改为相应的值。
<p>


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

以上为增加词库后的分词结果,将就看吧。

3.分词包背后的分词算法学习
mmseg4j使用的是Chih-Hao Tsai 的MMSeg算法
其算法原文:http://technology.chtsai.org/mmseg/

  • Simple算法:
    Simple算法是简单最大匹配算法,其基本形式是解析单个单词的歧义性。例如,假设C1,C2,….代表一个字符串中的汉字。我们首先位于字符串的开头并想知道如何区分单词。我们首先搜索词典,看 C1是否为一个单个汉字组成的单词,然后搜索 C1C2来看是否为一个两个汉字组成的单词,以下类推。直至找到字典中最长的匹配。最可能的单词就是最长的匹配。我们取这个单词,然后继续这个过程直至字符串中的最后一个单词被识别出来。

  • Complex算法
    Complex算法是复杂最大匹配算法。最大匹配规则是最大长度的三个词块合理的分割,当存在模糊分割时(比如, C1 是一个词,但 C1C2 也是一个词),此时将向前两个单词找出所有可能的以C1C1C2的词块,进行匹配。
    例如:
    你 | 是 | 不
    你 | 是 | 不是
    你是 | 不 | 是
    你是 | 不 | 是傻
    你是 | 不是 | 傻

  • 消除歧义规则
    (1)最大匹配,包括简单最大匹配及复杂最大匹配。
    (2)最大平均字长度
    (3)单词长度的最小方差
    (4)单字单词的语素自由度的最大和

4.分词结果提交
我进行了政府工作报告的分词。详情可见:
政府工作报告原文http://www.jianshu.com/p/9dab71d520e6
政府工作报告分词原文(Complex分词)http://www.jianshu.com/p/a0a89ed0918d
政府工作报告分词(修改分词后)http://www.jianshu.com/p/1f93a0d4bdfb

5.基于分词结果的词云分析(词频统计+可视化)
使用的是在线词频制作进行政府工作报告的词频统计。

yun1.png
yun.png
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 199,064评论 5 466
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 83,606评论 2 376
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 146,011评论 0 328
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 53,550评论 1 269
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 62,465评论 5 359
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 47,919评论 1 275
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,428评论 3 390
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,075评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,208评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,185评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,191评论 1 328
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,914评论 3 316
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,482评论 3 302
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,585评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,825评论 1 255
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,194评论 2 344
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 41,703评论 2 339

推荐阅读更多精彩内容

  • 目录## 1.安装solr并整合MMseg4j分词包 2.分词方法与分词效果分析 3.分词包背后的分词算法学习 4...
    狸狸深深阅读 796评论 0 3
  • 目录: 1、认识中文分词包(下载、安装与运行)2、分词方法与效果分析3、分词包背后的分词算法学习4、分词结果提交5...
    Echo真二阅读 1,750评论 0 2
  • 目录 认识中文分词包(下载、安装及运行) 分词方法与效果分析 分词算法学习 分词结果提交(2017/5/24完善方...
    㭍葉阅读 1,561评论 0 2
  • 速食信息太多,浮躁的心情也慢慢在微博,朋友圈还有各种打折信息里发酵起来。像温水里的青蛙丝毫没有发现任何的不妥。在j...
    美女一号阅读 308评论 0 1
  • 早餐吃的枸杞百合粥,还有茶叶蛋跟几碟小菜,清爽可口。 饭后灵犀拉着帅哥回到她的房间,神秘兮兮的说到:我要送你一样礼...
    灵犀心理咨询室阅读 380评论 0 0