MMSeg只是实现了Chih-Hao Tsai的MMSEG算法,这是一个来源于网络的分词算法。我照抄了算法开始的部分:
MMSEG: A Word Identification System for Mandarin Chinese Text Based on Two Variants of the Maximum Matching Algorithm
Published: 1996-04-29
Updated: 1998-03-06
Document updated: 2000-03-12
License: Free for noncommercial use
Copyright 1996-2006 Chih-Hao Tsai (Email: hao520 at yahoo.com )
您可以在Chih-Hao Tsai's Technology Page找到算法的原文。
我将依据自己的理解来简述MMSeg分词算法的基本原理,如有错误请不吝赐教。
首先来理解一下chunk,它是MMSeg分词算法中一个关键的概念。Chunk中包含依据上下文分出的一组词和相关的属性,包括长度(Length)、平均长度(Average Length)、标准差的平方(Variance)和自由语素度(Degree Of Morphemic Freedom)。我在下面列出了这4个属性的计算方法:
属性 | 含义 | 代码位置 |
长度(Length) | chuck中各个词的长度之和 | org.solol.mmseg.internal.Chunk.getLength() |
平均长度(Average Length) | 长度(Length)/词数 | org.solol.mmseg.internal.Chunk.getAverageLength() |
标准差的平方(Variance) | 同数学中的定义 | org.solol.mmseg.internal.Chunk.getVariance() |
自由语素度(Degree Of Morphemic Freedom) | 各单字词词频的对数之和 | org.solol.mmseg.internal.Chunk.getDegreeOfMorphemicFreedom() |
注意:表中的含义列可能有些模糊,最好参照MMSeg的源代码进行理解,代码所在的函数已经给出了。
Chunk中的4个属性采用Lazy的方式来计算,即只有在需要该属性的值时才进行计算,而且只计算一次。
其次来理解一下规则(Rule),它是MMSeg分词算法中的又一个关键的概念。实际上我们可以将规则理解为一个过滤器(Filter),过滤掉不符合要求的chunk。MMSeg分词算法中涉及了4个规则:
- 规则1:取最大匹配的chunk (Rule 1: Maximum matching)
- 规则2:取平均词长最大的chunk (Rule 2: Largest average word length)
- 规则3:取词长标准差最小的chunk (Rule 3: Smallest variance of word lengths)
- 规则4:取单字词自由语素度之和最大的chunk (Rule 4: Largest sum of degree of morphemic freedom of one-character words)
这4个规则分别位于org.solol.mmseg.internal.MMRule.java、org.solol.mmseg.internal.LAWLRule.java、org.solol.mmseg.internal.SVWLRule.java和org.solol.mmseg.internal.LSDMFOCWRule.java4个源文件中。之所以这样来处理是因为我们可以方便的增加规则和修改应用规则的顺序。
这4个规则符合汉语成词的基本习惯。
再次来理解一下两种匹配方式,简单最大匹配(Simple maximum matching)和复杂最大匹配(Complex maximum matching)。
简单最大匹配仅仅使用了规则1。
复杂最大匹配先使用规则1来过滤chunks,如果过滤后的结果多于或等于2,则使用规则2继续过滤,否则终止过滤过程。如果使用规则2得到的过滤结果多于或等于2,则使用规则3继续过滤,否则终止过滤过程。如果使用规则3得到的过滤结果多于或等于2,则使用规则4继续过滤,否则终止过滤过程。如果使用规则4得到的过滤结果多于或等于2,则抛出一个表示歧义的异常,否则终止过滤过程。
最后通过一个例句--研究生命起源来简述一下复杂最大匹配的分词过程。MMSeg分词算法会得到7个chunk,分别为:
编号 | chunk | 长度 |
0 | 研_究_生 | 3 |
1 | 研_究_生命 | 4 |
2 | 研究_生_命 | 4 |
3 | 研究_生命_起 | 5 |
4 | 研究_生命_起源 | 6 |
5 | 研究生_命_起 | 5 |
6 | 研究生_命_起源 | 6 |
使用规则1过滤后得到2个chunk,如下:
编号 | chunk | 长度 |
4 | 研究_生命_起源 | 6 |
6 | 研究生_命_起源 | 6 |
计算平均长度后为:
编号 | chunk | 长度 | 平均长度 |
4 | 研究_生命_起源 | 6 | 2 |
6 | 研究生_命_起源 | 6 | 2 |
使用规则2过滤后得到2个chunk,如下:
编号 | chunk | 长度 | 平均长度 |
4 | 研究_生命_起源 | 6 | 2 |
6 | 研究生_命_起源 | 6 | 2 |
计算标准差的平方后为:
编号 | chunk | 长度 | 平均长度 | 标准差的平方 |
4 | 研究_生命_起源 | 6 | 2 | 0 |
6 | 研究生_命_起源 | 6 | 2 | 4/9 |
使用规则3过滤后得到1个chunk,如下:
编号 | chunk | 长度 | 平均长度 | 标准差的平方 |
4 | 研究_生命_起源 | 6 | 2 | 0 |
匹配过程终止。最终取“研究”成词,以相同的方法继续处理“生命起源”。
分词效果:
Simple ->研究生_命_起源_
Complex->研究_生命_起源_
Simple ->研究生_教育_
Complex->研究生_教育_
注意:Simple表示简单最大匹配的分词效果,Complex表示复杂最大匹配的分词效果。
Update:这是一篇老文,之前放在http://dobestdeveloper.blogspot.com上,现在移到这里方便大家查阅。
http://m.blog.csdn.net/blog/HHyatt/6202826
相关推荐
**Elasticsearch与MMSEG分词器** Elasticsearch(ES)是一款强大的开源搜索引擎,广泛应用于大数据处理和分析。它基于Lucene库构建,提供实时、分布式、容错能力的搜索和数据分析功能。在处理中文数据时,由于中文...
1. 下载并解压提供的 `ik+mmseg分词器完美兼容solr6.1` 压缩包,其中包含了所需的分词器库和配置文件。 2. 将解压后的分词器库(通常为 JAR 文件)复制到 Solr 的 `server/solr/lib` 目录下,确保 Solr 在启动时能...
开源地址 ...MMSeg 算法有两种分词方法:Simple和Complex,都是基于正向最大匹配。Complex 加了四个规则过虑。官方说:词语的正确识别率达到了 98.41%。mmseg4j 已经实现了这两种分词算法。
在 Rust 语言中实现中文分词算法,MMSEG(MaxMatch Segmentation)是一个常见的选择。MMSEG 是一种高效的中文分词方法,由廖雪峰在 2005 年提出,它基于最大匹配法,旨在提高分词的准确性和效率。在 Rust 中,我们...
《基于mmseg算法的轻量级中文分词器深度解析》 中文分词是自然语言处理(NLP)领域的一项基础任务,对于理解和处理中文文本至关重要。本文将深入探讨一个基于mmseg算法的轻量级中文分词器,旨在帮助读者理解其工作...
MMSEGO这是MMSEG的GO实现,它是中文分词算法。 待办事项清单文档/注释基准测试用法#输入字典格式键\ tFreq每个键占用一个MMSEGO。这是MMSEG的GO实现,它是中文分词算法。 待办事项列表文档/注释基准测试用法#输入...
本文旨在介绍一种改进的正向最大匹配分词算法(MMSEG),该算法针对传统最大匹配算法存在的不足进行了优化,特别是在处理交集型歧义字段方面有所创新。通过引入预处理、互信息等概念和技术,提高了分词的效率和准确性...
其次,mmseg4j是基于Java实现的中文分词组件,它采用了MaxMatch(最大匹配法)算法,结合了词频统计信息,能够在一定程度上提高分词准确性。mmseg4j的特点在于其灵活性,用户可以根据需要调整分词模式,但可能在处理...
关键句子提取和文章自动摘要等功能,并且提供了一个基于Jetty的web服务器,方便各大语言直接http调用,同时提供了最新版本的lucene、solr、elasticsearch、opensearch的搜索分词接口Jcseg是基于mmseg算法的一个轻量...
该项目是一款基于mmseg算法的轻量级Java中文分词器源码,包含190个文件,其中Java源文件135个、Lex文件28个、XML文件7个、Markdown文件5个、属性文件3个、PNG文件3个、Git忽略文件1个、策略文件1个。该分词器具备...
Jcseg基于mmseg算法轻量级中文分词器.rar
2. **mmseg算法**: mmseg4j的核心算法基于“最小编辑距离”(Minimum Edit Distance)的改进版,能够有效处理歧义分词问题,提高分词准确率。mmseg算法通过动态规划策略寻找最优的分词路径。 3. **词典(Dictionary...
该项目为基于mmseg算法开发的轻量级Java中文分词器,源码包含205个文件,涵盖143个Java源文件、29个Lex定义文件、8个XML文件、6个Markdown文件、4个属性文件、3个PNG图片文件、2个策略文件以及1个Git忽略文件。...
1. `mmseg4j-core-1.9.1.jar`:这是mmseg4j的核心库文件,包含了mmseg4j的主要分词算法和数据结构。该版本号1.9.1与标题中的版本相匹配,用于实现基本的中文分词功能。 2. `mmseg4j-analysis-1.9.2-SNAPSHOT.jar`:...
搭建Sphinx+MySQL5.1x+SphinxSE+mmseg中文分词搜索引擎架构 概述:本资源旨在介绍搭建Sphinx+MySQL5.1x+SphinxSE+mmseg中文分词搜索引擎架构的过程,涵盖了Sphinx的基本概念、特性、安装和配置 MySQL+SphinxSE存储...
mmseg4j采用了MaxMatch(最大匹配法)算法,这是一种常用的中文分词策略。该算法从待分词文本的两端同时进行匹配,寻找最长的可能词汇,再根据上下文信息进行调整,以达到最佳的分词效果。此外,mmseg4j还引入了动态...
mmseg4j的设计灵感来源于MaxEnt Segmentation(最大熵分词)算法,这是一种基于统计模型的分词方法,它通过学习大量已标注的语料库,构建出一个概率模型来决定最佳的分词结果。与其他分词系统相比,mmseg4j具备以下...
在com.chenlb.mmseg4j.analysis包里扩展lucene analyzer。 MMSegAnalyzer默认使用max-word方式分词(还有:ComplexAnalyzer, SimplexAnalyzer, MaxWordAnalyzer)。
Friso的核心算法采用了MMSEG(Maximum Matching Segmentation),这是一种广泛应用的中文分词方法。MMSEG算法的基本思想是最大匹配法,它通过寻找最长的可能词语来对句子进行分割。该算法的优势在于能够处理歧义词和...
它借鉴了MaxEnt(最大熵模型)和MMSeg算法,提供了高效且准确的中文分词效果。在处理大量中文文本数据时,mmseg4j具有较高的性能和可扩展性,是Java开发环境下进行自然语言处理(NLP)工作的重要组件。 **一、MMSeg...