文章目标
本文旨在描述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的 [研究_生_命] 和 [研_究生_命] 。
经过R1,Simple模式已经完成了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. mmseg4j与solr集成
mmseg4j是基于MMSEG分词算法的Java实现,可以从以下地址获得:https://github.com/chenlb/mmseg4j-solr。
Note : 我这里的mmseg4j版本是 2.3.0,solr版本是 5.3.0。
安装步骤:
1. 将mmseg4j-core-1.10.0.jar,mmseg4j-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 Question:https ://en.wikipedia.org/wiki/A-not-A_question
http://www.360doc.com/content/13/0217/15/11619026_266141425.shtml
相关推荐
搭建Sphinx+MySQL5.1x+SphinxSE+mmseg中文分词搜索引擎架构 概述:本资源旨在介绍搭建Sphinx+MySQL5.1x+SphinxSE+mmseg中文分词搜索引擎架构的过程,涵盖了Sphinx的基本概念、特性、安装和配置 MySQL+SphinxSE存储...
接着,`MMSEG`(Maximum Matching Segmentation)是一种中文分词算法,它基于最长匹配原则,从待分词的字符串两端向中间进行匹配,寻找最长的词语序列。这种算法在处理歧义词和新词方面有一定的优势,因为它可以考虑...
mmseg4j core 使用 Chih-Hao Tsai 的 MMSeg 算法(http://technology.chtsai.org/mmseg/ )实现的中文分词器。 MMSeg 算法有两种分词方法:Simple和Complex,都是基于正向最大匹配。Complex 加了四个规则过虑。官方说...
MMSEG(Maximum Matching Segmentation)是一种高效的中文分词算法,它采用了最长匹配原则,能够有效地处理歧义问题,适用于多种应用场景,如搜索引擎、信息检索等。相比其他分词器,MMSEG的优势在于它的灵活性和...
mmseg4j是一个基于Java实现的中文分词工具,它在中文信息处理领域有着广泛的应用。该工具的主要功能是将连续的汉字序列分割成具有语义的词语,这一过程称为分词。在中文自然语言处理(NLP)中,分词是基础步骤,对于...
mmseg4j-solr-2.3.0.jar 支持 solr5.x 版本以上 分词器本身并未做升级还是mmseg4j-core-1.10.0 和 mmseg4j-analysis-1.9.1.jar为了方便也一并上传
其次,mmseg4j是基于Java实现的中文分词组件,它采用了MaxMatch(最大匹配法)算法,结合了词频统计信息,能够在一定程度上提高分词准确性。mmseg4j的特点在于其灵活性,用户可以根据需要调整分词模式,但可能在处理...
在中文信息处理领域,分词是文本分析的基础步骤,它将连续的汉字序列分割成具有语义的词汇单元。MMseg4j是一个广泛应用于Java环境中的中文分词工具,它以其高效、灵活和准确的特性,在Lucene和Solr等搜索引擎框架中...
**mmseg4j分词器** 是一个专为Java平台设计的中文分词库,它在中文信息处理领域中扮演着重要的角色。该库的主要功能是将连续的汉字序列分割成具有语义意义的词语,这是自然语言处理(NLP)中的基础任务,对搜索引擎...
mmseg4j是一款广泛使用的Java实现的中文分词库,它提供了高效且精准的中文分词功能。而“兼容solr4.10.3”意味着这个分词器已经过测试,可以无缝集成到Solr 4.10.3的搜索引擎环境中,用于提高中文文本处理的性能。 ...
在中文信息处理领域,分词是文本分析的重要环节,它将连续的汉字序列划分为具有独立语义的词语,为后续的文本挖掘、搜索引擎索引、情感分析等任务奠定基础。mmseg4j是一款针对Java平台的高效中文分词工具,因其准确...
**mmseg4j中文分词器** mmseg4j是一个基于Java实现的高效、灵活的中文分词工具,主要用于处理中文文本的分词任务。它借鉴了MaxEnt(最大熵模型)和MMSeg算法,提供了高效且准确的中文分词效果。在处理大量中文文本...
在 Rust 语言中实现中文分词算法,MMSEG(MaxMatch Segmentation)是一个常见的选择。MMSEG 是一种高效的中文分词方法,由廖雪峰在 2005 年提出,它基于最大匹配法,旨在提高分词的准确性和效率。在 Rust 中,我们...
本篇文章将带你深入学习如何在Solr5中集成并使用MMSeg4J分词器,提升中文处理能力。 首先,我们来了解一下MMSeg4J。这是一个高效、灵活的Java实现的中文分词库,它采用了基于词频的动态最大匹配算法(MaxMatch),...
**中文分词器mmseg4j详解** 在自然语言处理(NLP)领域,中文分词是基础且关键的一环。中文不同于英文,其词汇之间没有明显的边界,因此需要通过分词来识别句子中的词语。`mmseg4j`便是一款专为Java平台设计的高效...
《mmseg-0.7.3.tar.gz:中文分词技术在Sphinx全文搜索引擎中的应用》 在现代信息检索和自然语言处理领域,中文分词是至关重要的一步,它直接影响到搜索结果的质量和准确度。LibMMSeg,作为专门为Sphinx全文搜索引擎...
clj-cn-mmseg clj-cn-mmseg是一个用clojure实现的mmseg中文分词工具包。使用使用Leiningen,在project.clj文件中dependencies中加入如下依赖: [clj-cn-mmseg " 0.1.5 " ]使用Maven,则在pom.xml文件中加入: ...
中文分词 solr 支持solr 4.7