美文网首页信息组织与信息检索
中文分词器MMSEG4J分词练习

中文分词器MMSEG4J分词练习

作者: cathy1997 | 来源:发表于2018-08-02 09:35 被阅读136次

    1.MMSeg分词算法原理

    MMSeg是Chih-Hao Tsai提出的基于字符串匹配(亦称基于词典)的中文分词算法,mmseg4j是MMSeg的Java实现的中文分词器,并实现lucene的analyzer和solr的TokenizerFactory以方便在Lucene和Solr中使用。

    MMSeg的字符串匹配算法分为两种:

    • Simple,简单的正向最大匹配,即按能匹配上的最长词做切分
    • Complex,在正向最大匹配的基础上,考虑相邻词的词长,设计了四个去歧义规则(Ambiguity Resolution Rules)指导分词。主要思想是每次从一个完整的句子里,按照从左向右的顺序,识别出多种不同的三个词作为词块(chunk),然后根据下面的4条消歧规则,确定最佳的备选词组合:
      1.备选词块的长度最大(Maximum matching),即三个词的词长之和最大;
      2.备选词块的平均词长最大(Largest average word length),即要求词长分布尽可能均匀;
      3.备选词块的词长变化最小(Smallest variance of word lengths );
      4.备选词块中(若有)单字的出现词频率统计值最高(Largest sum of degree of morphemic freedom of one-character words)。

    2.MMSeg4j分词过程

    2.1 下载Solr

    Solr 是基于Lucene的全文搜索服务器,提供了比Lucene更为丰富的查询语言,同时实现了可配置、可扩展,并对索引、搜索性能进行了优化。

    接下来通过solr(可视化界面)整合mmseg4j中文分词包来进行分词,solr历史版本下载地址:http://archive.apache.org/dist/lucene/solr/。这里我选择下载solr6.5.1版本。

    6.5.1版本

    下载之后解压缩包,然后通过cmd启动solr:

    启动solr

    启动之后在浏览器输入:http://localhost:8983/solr/#/可以在本地打开solr。

    服务器首页

    2.2 下载mmseg4j

    能够和solr完美集成的中文分词器包括Mmseg4j、IkAnalyzer、ICTCLAS等。以Mmeseg4j为例,介绍中文分词器的使用。

    mmseg4j支持三种分词方法:

    • MaxWord
    • Simple
    • Complex

    下载mmseg4j的相关jar包,所有有关的包可以到Maven Repository下载。这里我下载的版本是:

    1. mmseg4j-core-1.10.0.jar下载
    2. mmseg4j-solr-2.3.0.jar下载
    3. mmseg4j-analysis-1.9.1.jar下载

    windows系统cmd中运行mmseg4j(这里还不需要用到solr):
    检查Java环境

    Java版本

    运行mmseg4j-core-1.10.0.jar,用哪种分词方法就写哪种+ 所要分词的字符串,例如:

    java -cp mmseg4j-core-1.10.0.jar com.chenlb.mmseg4j.example.MaxWord 字符串
    

    我使用的文本:

    近一百多年来,总有一些公司很幸运地、有意识或者无意识地站在技术革命的浪尖之上。一旦处在了那个位置,即使不做任何事,也可以随着波浪顺顺当当地向前漂个十年甚至更长的时间。在这十几年间,它们代表着科技的浪潮,直到下一波浪潮的来临。从一百年前算起,AT&T公司、IBM公司、苹果(Apple)公司 、英特尔(Intel) 公司、微软(Microsoft) 公司、和谷歌(Google)公司都先后被幸运地推到了浪尖。虽然,它们来自不同的领域,中间有些已经衰落或者正在衰落,但是它们都极度辉煌过。这些公司里的人,无论职位高低,在外人看来,都是时代的幸运儿。因为,虽然对一个公司来说,赶上一次浪潮不能保证其长盛不衰;但是,对一个人来说,一生赶上一次这样的浪潮就足够了。一个弄潮的年轻人,最幸运的,莫过于赶上一波大潮。

    • MaxWord方法:
    MaxWord
    • Simple方法:
    Simple
    • Complex方法:
    Complex

    分词效果比较:
    可以看出三个方法虽然分词结果不尽相同,但都去掉了标点符号且英文仍可分出来,归纳出三种方法的不一样处及正确分词方法.

    正确分法 MaxWord Simple Complex
    有意识 有意|意识 有意识 有意识
    顺顺当当 顺|顺当|当当 顺顺当当 顺顺当当
    波|浪潮 波浪|潮 波浪|潮 波浪|潮
    英特尔 英特|尔 英特|尔 英特|尔
    谷歌 谷|歌 谷|歌 谷|歌
    职位|高低 职位|高低 职位高|低 职位|高低
    年轻人 年轻|人 年轻人 年轻人

    综上所述可以看出,三种分词方法存在着一些同样的错误,比如名词“英特尔“和”谷歌“都没有识别出来。综合比较Complex的分词方法准确率最高。

    2.3 Sol集成mmseg4j

    将刚才下载的3个mmseg4j的jar包放到D:\Program Files\solr-6.5.1\server\solr-webapp\webapp\WEB-INF\lib目录下。

    创建一个core:test

    进入创建的test项目下的conf目录(比如我的是D:\Program Files\solr-6.5.1\server\solr\test\conf),修改managed-schema文件,添加以下代码(注意dicPath的值要修改为自己目录下相应的值):

        <!-- 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:/Program Files/solr-6.5.1/server/solr/test/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:/Program Files/solr-6.5.1/server/solr/test/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:/Program Files/solr-6.5.1/server/solr/test/conf"/>
                <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" />
            </analyzer>
        </fieldType>
        <!-- mmseg4j-->
    

    重启Solr

    即可在新创建的test这个core的Analysis中看到mmseg4j新增的field:

    这是使用Simple模式分词的结果:

    simple

    可以发现和之前通过命令行使用mmseg4j包分词的效果是一样的,仍然存在专有名词无法识别的错误。

    2.4 添加自定义词典进行分词

    要减少分词错误,可以通过优化算法、自定义词库两种方法来提高分词正确率,在这里尝试加载自定义词库。

    修改managed-schema配置,添加下列内容

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

    /test/conf目录下新建词库文件,文件名必须以 words开头,dic结尾,如words-test.dic。

    编辑文件,定义需要被识别的词

    英特尔
    谷歌

    保存为第一行为空行或为无 BOM 格式的 utf-8 文件。重启solr,可以看到自己定义的词典被加载进去了:

    可以看到加载自定义词典后,特有的名词就被分出来了:

    分析结果

    3.MMSeg4j分词包算法学习

    4.词云分析分词结果

    个性化词云是依赖语料和抽取语料关键词呈现的,需要有标签关键词关键词词频两个数据,关键词词频数量决定关键词的显示大小。
    自带中文分词的词云制作工具:图悦 - 在线词频分析工具。在图悦中,可以直接将需要分析的文本输入,它可以自己进行中文分析,然后直接输出词云,形式比较单一。

    词云 词频统计

    参考:

    相关文章

      网友评论

        本文标题:中文分词器MMSEG4J分词练习

        本文链接:https://www.haomeiwen.com/subject/eqqpjftx.html