`
lzzy_alex
  • 浏览: 29991 次
社区版块
存档分类
最新评论

MMSEG中文分词

    博客分类:
  • Solr
 
阅读更多

文章目标

本文旨在描述MMSEG中文分词算法核心设计概念,简要介绍中文分词实现方式(基于语法,基于词典,基于统计)。适用于对中文分词感兴趣的入门读者。

 

阅读目录

文章分为以下几个内容点,大家可以选择性阅读。

1. 分词必要性(即为什么要分词)

2. 中文分词基本实现方式(基于语法,基于词典,基于统计)

3. MMSEG分词算法设计实现

4. mmseg4j solr 集成

5. 参阅文档

 

1. 分词必要性

什么是分词

分词是指将输入文本划分成若干个词汇单元的过程,如:

Hi tom, nice to meet you! -> [Hi,tom,nice,to,meet,you]

 

为什么要分词

在数据检索领域,为了实现数据快速检索,通常都对源数据建索引,索引的存储结构(如B树,B+树,Tire树等)通常都是基于关键字的,即关键字索引。关键字的提取就依赖于分词组件。当然,分词的应用并不局限于此,如智能交互,机器学习等领域都会用到。

 

2. 中文分词基本实现方式

由于中文语法表达有别于其它语系(如英文可用空格识别词汇),造就了中文词汇识别的特殊性。对中文分词的实现方式,大致可分为以下几类

 

基于语法规则的分词(主谓宾定状补,名词,动词,形容词等)

利用句法,语义进行词性标注,以解决歧义分词。由于语法组合复杂,词性难以规整,在当前阶段,分词效果并不理想。

 

基于词典分词

将输入文本逐一与词典匹配(正向/逆向),匹配成功的词将被筛选出来。实现简单高效,但对词典依赖性强。

 

基于统计的分词

词是由语素单元组成,相邻N个字在资料库中出现频率越高,成词机率越大,所以这种方式是具备语言学习能力的。但需要完备的资料库做词频统计,实践中对歧义分词还需要自定义词典做匹配,门槛较高,实现复杂。

 

3. MMSEG分词算法设计实现

MMSEG是一种基于词典文件的分词算法,算法核心有两点:匹配算法(Matching algorithm)与歧义消除规则(Ambiguity resolution rules)

 

3.1 匹配算法

匹配算法即用输入文本与词典文件内容做匹配,相等的词将被筛选出来。匹配算法分为两种模式,不同模式下的分词算法会有不同的分词效果:

 

- Simple模式:

匹配所有以Cn为首且在词典中出现的词。比如“南京市长”,假设n=1,则可能出现(依赖词典)的结果:[南京市长] => [南京, 南京市, 南京市长],由此选出了n=1时可能出现的词,之后n++ 直到n=4为止。

 

- Complex模式:

匹配所有以Cn为首的三个词的词组(chunk),如“研究生命起源”,假设n=1,则可能出现(依赖词典)的结果:[研究生命起源] => [__],[研究__],[_究生_]

 

从前面的结果可以看到,经过匹配算法,有可能出现若干以Cn为首的词,这种现象称之为分割性歧义(segmentation ambiguities)。到底应该选择哪一个呢,这需要借助歧义消除规则完成歧义消除。

 

3.2 歧义消除规则

MMSEG歧义消除规则有四个,其中Simple模式使用规则一(R1)就可以完成歧义消除任务。

 

R1 最大匹配(Maximum matching)

Simple模式:

选择长度最大的词,比如:[南京市长] => [南京, 南京市, 南京市长],则选择长度为4[南京市长]

 

Complex模式:

选择词组长度最大的chunk,比如:[研究生命起源] => [__],[研究__],[_究生_],则选择长度为4的 [研究__] [_究生_]

 

经过R1Simple模式已经完成了C1[]的词匹配,但Complex模式还有两个结果,所以还需要借助 R2 完成歧义消除。

 

R2 最大平均语句长度(Largest average word length)

经过R1如果剩余的chunk超过一个,则选择平均语句长度最大的词,其中,

平均词长=词组总字数/词语数量,比如:

chunk1: [生活__] =  4 / 3 = 1.33

chunk2: [生活_水平_] =  4 / 2 = 2   (二元组)

这时,chunk2将会被选出。

 

R3 最小语句长度变化率(Smallest variance of word lengths)

经过R1,R2过滤后,可能还存在多个歧义结果,比如:

chunk1: 研究_生命_起源

chunk2: 研究生__起源

这时会选择 chunk1 中的“研究”, 这是基于语言长度均匀分布(evenly distributed)规律推测出来的,计算如下(标准差)

chunk1 = sqrt(((2-2)^2 + (2-2)^2 + (2-2)^2)/3) = 0

chunk2 = sqrt(((3-2)^2 + (1-2)^2 + (2-2)^2)/3) = 0.816

 

R4 最大单字语素自由度之和(Largest sum of degree of morphemic freedom of one-character words)

如果经过R3还有多个结果,则需要R4规则完成歧义消除了。比如:

chunk1. 设施_和服_

chunk2. 设施__服务

以上两个chunk拥有相同的chunk长度(R1),相同的平均语句长度(R2)以及变化率(R3), 如何分辨哪个才是正确的呢?

我们注意到这里都存在着单个字的组,而在中文用语中,不同的单字应用频率是不一样的。比如:[][],显然单字带[]的成词概率更大。语素自由度可由数学表达式log(frequency)计算,表示该词(one-character words)的词频对数, 自由度之和最大的则被选出: 如上例,

假设chunk1[]的频率 fq=5, chunk2[]的频率 fq=10,

sum_degree(chunk1)=log(5) < sum_degree(chunk2)=log(10), 所以选择chunk2

 

More: mmseg4j已经提供了一个单字词频统计文件 chars.dic

 

4. mmseg4jsolr集成

mmseg4j是基于MMSEG分词算法的Java实现,可以从以下地址获得:https://github.com/chenlb/mmseg4j-solr

Note : 我这里的mmseg4j版本是 2.3.0solr版本是 5.3.0

 

安装步骤:

1. mmseg4j-core-1.10.0.jarmmseg4j-solr-2.3.0.jar放到solr目录server\solr-webapp\webapp\WEB-INF\lib 下。

2. 修改schema.xml,添加mmseg支持

<fieldtype name="textComplex" class="solr.TextField" positionIncrementGap="100">  
 <analyzer>  
 <tokenizer class="com.chenlb.mmseg4j.solr.MMSegTokenizerFactory" mode="complex" dicPath="dic"/>  
 </analyzer>  
</fieldtype>

 

 重启solr服务就可以使用mmseg分词了:



  

5. 参阅文档

mmseg作者: http://technology.chtsai.org/mmseg

A-Not-A Questionhttps ://en.wikipedia.org/wiki/A-not-A_question

http://www.360doc.com/content/13/0217/15/11619026_266141425.shtml

 

 

  • 大小: 25.7 KB
分享到:
评论

相关推荐

    搭建Sphinx+MySQL5.1x+SphinxSE+mmseg中文分词搜索引擎架构

    搭建Sphinx+MySQL5.1x+SphinxSE+mmseg中文分词搜索引擎架构 概述:本资源旨在介绍搭建Sphinx+MySQL5.1x+SphinxSE+mmseg中文分词搜索引擎架构的过程,涵盖了Sphinx的基本概念、特性、安装和配置 MySQL+SphinxSE存储...

    ik+mmseg分词器

    接着,`MMSEG`(Maximum Matching Segmentation)是一种中文分词算法,它基于最长匹配原则,从待分词的字符串两端向中间进行匹配,寻找最长的词语序列。这种算法在处理歧义词和新词方面有一定的优势,因为它可以考虑...

    MMSeg 算法分词

    mmseg4j core 使用 Chih-Hao Tsai 的 MMSeg 算法(http://technology.chtsai.org/mmseg/ )实现的中文分词器。 MMSeg 算法有两种分词方法:Simple和Complex,都是基于正向最大匹配。Complex 加了四个规则过虑。官方说...

    elasticsearch的mmseg分词器安装包

    MMSEG(Maximum Matching Segmentation)是一种高效的中文分词算法,它采用了最长匹配原则,能够有效地处理歧义问题,适用于多种应用场景,如搜索引擎、信息检索等。相比其他分词器,MMSEG的优势在于它的灵活性和...

    mmseg4j分词器,内含词库

    mmseg4j是一个基于Java实现的中文分词工具,它在中文信息处理领域有着广泛的应用。该工具的主要功能是将连续的汉字序列分割成具有语义的词语,这一过程称为分词。在中文自然语言处理(NLP)中,分词是基础步骤,对于...

    solr mmseg4j 中文分词器

    mmseg4j-solr-2.3.0.jar 支持 solr5.x 版本以上 分词器本身并未做升级还是mmseg4j-core-1.10.0 和 mmseg4j-analysis-1.9.1.jar为了方便也一并上传

    word分词器、ansj分词器、mmseg4j分词器、ik-analyzer分词器分词效果评估

    其次,mmseg4j是基于Java实现的中文分词组件,它采用了MaxMatch(最大匹配法)算法,结合了词频统计信息,能够在一定程度上提高分词准确性。mmseg4j的特点在于其灵活性,用户可以根据需要调整分词模式,但可能在处理...

    MMseg4j中文分词词库

    在中文信息处理领域,分词是文本分析的基础步骤,它将连续的汉字序列分割成具有语义的词汇单元。MMseg4j是一个广泛应用于Java环境中的中文分词工具,它以其高效、灵活和准确的特性,在Lucene和Solr等搜索引擎框架中...

    mmseg4j分词器jar包

    **mmseg4j分词器** 是一个专为Java平台设计的中文分词库,它在中文信息处理领域中扮演着重要的角色。该库的主要功能是将连续的汉字序列分割成具有语义意义的词语,这是自然语言处理(NLP)中的基础任务,对搜索引擎...

    兼容solr4.10.3的mmseg4j-1.9.1分词器

    mmseg4j是一款广泛使用的Java实现的中文分词库,它提供了高效且精准的中文分词功能。而“兼容solr4.10.3”意味着这个分词器已经过测试,可以无缝集成到Solr 4.10.3的搜索引擎环境中,用于提高中文文本处理的性能。 ...

    mmseg4j分词

    在中文信息处理领域,分词是文本分析的重要环节,它将连续的汉字序列划分为具有独立语义的词语,为后续的文本挖掘、搜索引擎索引、情感分析等任务奠定基础。mmseg4j是一款针对Java平台的高效中文分词工具,因其准确...

    mmseg4j中文分词器

    **mmseg4j中文分词器** mmseg4j是一个基于Java实现的高效、灵活的中文分词工具,主要用于处理中文文本的分词任务。它借鉴了MaxEnt(最大熵模型)和MMSeg算法,提供了高效且准确的中文分词效果。在处理大量中文文本...

    Rust中的 中文分词算法MMSEG_rust_代码_下载

    在 Rust 语言中实现中文分词算法,MMSEG(MaxMatch Segmentation)是一个常见的选择。MMSEG 是一种高效的中文分词方法,由廖雪峰在 2005 年提出,它基于最大匹配法,旨在提高分词的准确性和效率。在 Rust 中,我们...

    跟益达学Solr5之使用MMSeg4J分词器

    本篇文章将带你深入学习如何在Solr5中集成并使用MMSeg4J分词器,提升中文处理能力。 首先,我们来了解一下MMSeg4J。这是一个高效、灵活的Java实现的中文分词库,它采用了基于词频的动态最大匹配算法(MaxMatch),...

    mmseg4j1.9.1.zip 中文分词器

    **中文分词器mmseg4j详解** 在自然语言处理(NLP)领域,中文分词是基础且关键的一环。中文不同于英文,其词汇之间没有明显的边界,因此需要通过分词来识别句子中的词语。`mmseg4j`便是一款专为Java平台设计的高效...

    mmseg-0.7.3.tar.gz

    《mmseg-0.7.3.tar.gz:中文分词技术在Sphinx全文搜索引擎中的应用》 在现代信息检索和自然语言处理领域,中文分词是至关重要的一步,它直接影响到搜索结果的质量和准确度。LibMMSeg,作为专门为Sphinx全文搜索引擎...

    clj-cn-mmseg:MMseg中文切分算法的纯clojure实现

    clj-cn-mmseg clj-cn-mmseg是一个用clojure实现的mmseg中文分词工具包。使用使用Leiningen,在project.clj文件中dependencies中加入如下依赖: [clj-cn-mmseg " 0.1.5 " ]使用Maven,则在pom.xml文件中加入: ...

    中文分词mmseg4j

    中文分词 solr 支持solr 4.7

Global site tag (gtag.js) - Google Analytics