当前位置: 首页 > 软件库 > 程序开发 > 中文分词库 >

LibMMSeg

中文分词软件包
授权协议 GPL
开发语言 C/C++
所属分类 程序开发、 中文分词库
软件类型 开源软件
地区 国产
投 递 者 江天宇
操作系统 跨平台
开源组织
适用人群 未知
 软件概览

LibMMSeg 简介

LibMMSeg 是Coreseek.com为 Sphinx 全文搜索引擎设计的中文分词软件包,其在GPL协议下发行的中文分词法,采用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找到算法的原文。

LibMMSeg 采用C++开发,同时支持Linux平台和Windows平台,切分速度大约在300K/s(PM-1.2G),截至当前版本(0.7.1)LibMMSeg没有为速度仔细优化过,进一步的提升切分速度应仍有空间。

下载

下载 MMSeg 0.7.3

修订记录

0.7.3
- 2008.05.27 修正 Makefile 无法安装csr_typedefs.h的问题
- 2008.05.27 修正 x64系统上编译无法作为动态库的一部分编译的问题

0.7.2
- 2008.05.19 修正 指定的目录中无词典不提示错误的问题
- 2008.05.19 新增 Ruby 的调用API

0.7.1
- 2008.04.23 修正了在类似 “english 中文 english" 的句子,切分不正确的问题

0.7
- 第一次发行

安装

Window平台

打开源码包中src\win32 子目录下的对应的工程文件,目前LibMMSeg内置了VS2003和VS2005的工程文件。

Linux平台

在源码包根目录下执行:

./configure && make && make install

使用

词典的构造

mmseg -u unigram.txt

该命令执行后,将会产生一个名为unigram.txt.uni的文件,将该文件改名为uni.lib,完成词典的构造。需要注意的是,unigram.txt 必须为UTF-8编码。

词典文件格式:

....
河 187
x:187
造假者 1
x:1
台北队 1
x:1
湖边 1
......

其中,每条记录分两行。其中,第一行为词项,其格式为:[词条]\t[词频率]。需要注意的是,对于单个字后面跟这个字作单字成词的频率,这个频率 需要在大量的预先切分好的语料库中进行统计,用户增加或删除词时,一般不需要修改这个数值;对于非单字词,词频率处必须为1。第二行为占位项,是由于 LibMMSeg库的代码是从Coreseek其他的分词算法库(N-gram模型)中改造而来的,在原来的应用中,第二行为该词在各种词性下的分布频 率。LibMMSeg的用户只需要简单的在第二行处填"x:1"即可。

用户可以通过修改词典文件增加自己的自定义词,以提高分词法在某一具体领域的切分精度,系统默认的词典文件在data/unigram.txt中。

分词

mmseg -d tobe_segment.txt

其中,命令使用‘-d’开关指定词库文件所在的位置,参数dict_dir为词库文件(uni.lib )所在的目录;tobe_segment.txt 为待切分的文本文件,必须为UTF-8编码。如果一切正确,mmseg会将切分结果以及所花费的时间显示到标准输出上。

对特殊短语的支持

由于LibMMSeg是为Sphinx全文搜索引擎设计的,因此其内置了部分搜索引擎切分算法的特性,主要表现在对特殊短语的支持上。

在搜索引擎中,需要处理C++时,如果分词器中没有词组C++,则将被切分为C/x +/x +/x,在进一步的检索中,可能每个词会由于出现的过于频繁而被过滤掉,导致搜索的结果与C++相关度不高不说,也严重影响的全文搜索的速度。在 LibMMSeg中,内置对特殊短语的支持。

其输入文件格式如下

// test commit
.net => dotnet
c# => csharp
c++ => cplusplus

其中左侧是待支持的特殊短语,右侧是左侧的特殊短语需要被转换为的短语。这一转换在分词前进行。

可以在行的开头加入'//'作为注释符号,发现符号'//'后,整行将被忽略。

特殊短语词库构造命令:

mmseg -b exceptions.txt

其中, 开关'-b'指示mmseg是要构造特殊短语词库;exceptions.txt是用户编辑的特殊短语转换规则。

该命令执行后,将在当前目录下产生一个名为"synonyms.dat"的文件,将该文件放在"uni.lib"同一目录下,分词系统将自动启动特殊短语转换功能。

注意:

1、在启用了该功能后,如果分词系统发现了一个特殊短语,将直接输出其在右侧对应的替换的值;

2、右侧被替换的值,请保证不会被分词器进行切分。(eg. C++ => C# 这个转换的意义不大,并且可能导致C++这个短语永远无法被检索到!)

 

附录:

MMSeg算法说明

首先来理解一下chunk,它是MMSeg分词算法中一个关键的概念。Chunk中包含依据上下文分出的一组词和相关的属性,包括长度 (Length)、平均长度(Average Length)、标准差的平方(Variance)和自由语素度(Degree Of Morphemic Freedom)。下面列出了这4个属性:

属性 含义
长度(Length) chuck中各个词的长度之和
平均长度(Average Length) 长度(Length)/词数
标准差的平方(Variance) 同数学中的定义
自由语素度(Degree Of Morphemic Freedom) 各单字词词频的对数之和
 


Chunk中的4个属性只有在需要该属性的值时才进行计算,而且只计算一次。

其次来理解一下规则(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个规则符合汉语成词的基本习惯。

再来理解一下匹配方式复杂最大匹配(Complex maximum matching):

复杂最大匹配先使用规则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

匹配过程终止。最终取“研究”成词,以相同的方法继续处理“生命起源”。

分词效果:

研究_生命_起源_
研究生_教育_

  • 使用搜狗词库制作mmseg自定义词典 http://blog.atime.me/note/mmseg-custom-dict.html#content-heading 总结使用搜狗词库制作mmseg词典的方法和步骤。另外,最近一直没写新博客,一方面是因为懒,另一方面是确实没什么可写的。 coreseek的介绍和安装説明可参考这里,不再赘述。以下是接下来需要注意的几点: 下面假设libmmseg安装

  • 【原文】 词典的构造 mmseg -u unigram.txt 该命令执行后,将会在unigram.txt所在目录中产生一个名为unigram.txt.uni的文件,将该文件改名为uni.lib,完成词典的构造。需要注意的是,unigram.txt需要预先准备,并且编码格式必须为UTF-8编码。 词典文件格式: .... 河 187 x:187 造假者 1 x:1 台北队 1 x:1 湖边 1 .

  • 转自:http://www.coreseek.cn/opensource/mmseg/#coreseek_mmseg_complex 感谢,为了方便学习 LibMMSeg 简介 LibMMSeg 是Coreseek.com为 Sphinx 全文搜索引擎设计的中文分词软件包,其在GPL协议下发行的中文分词法,采用Chih-Hao Tsai的MMSEG算法。 MMSEG: A Word Identif

  • LibMMSeg是Coreseek.com为Sphinx全文搜索引擎设计的中文分词软件包,采用Chih-Hao Tsai的MMSEG算法,可以参见这里。 下面是为Python所做的模块代码,根据mmseg_main做了部分修改: char** segment(const char* dict_path, const char* file_path, int *nseg) {     char **

 相关资料
  • 网页版 http://h5.m.taobao.com/borrowbook/braille.html  联系作者:刘学炜 liu.xuewei@hotmail.com 简介: toBraille是一个Java盲文翻译库目前支持简体、繁体中文、字母、数字、图片中的文字换为盲文,而且还能智能识别数据源中的拼音串转换成对应发音的盲文,并能将数据源通过TTS语音合成技术朗读出来。 (暂时不支持外文,但已加

  • Genius Genius是一个开源的python中文分词组件,采用 CRF(Conditional Random Field)条件随机场算法。 Feature 支持python2.x、python3.x以及pypy2.x。 支持简单的pinyin分词 支持用户自定义break 支持用户自定义合并词典 支持词性标注 Source Install 安装git: 1) ubuntu or debian

  • 介绍 现阶段,应用于搜索引擎和自然语言处理的中文分词库五花八门,使用方式各不统一,虽然有适配于Lucene和Elasticsearch的插件,但是我们想在多个库之间选择更换时,依旧有学习时间。 Hutool针对常见中文分词库做了统一接口封装,既定义一套规范,隔离各个库的差异,做到一段代码,随意更换。 Hutool现在封装的引擎有: Ansj HanLP IKAnalyzer Jcseg Jieba

  • 本文向大家介绍PHPAnalysis中文分词类详解,包括了PHPAnalysis中文分词类详解的使用技巧和注意事项,需要的朋友参考一下 PHPAnalysis是目前广泛使用的中文分词类,使用反向匹配模式分词,因此兼容编码更广泛,现将其变量与常用函数详解如下: 一、比较重要的成员变量 $resultType   = 1        生成的分词结果数据类型(1 为全部, 2为 词典词汇及单个中日韩简

  • 中文分词是怎么走到今天的 话说上个世纪,中文自动分词还处于初级阶段,每句话都要到汉语词表中查找,有没有这个词?有没有这个词?所以研究集中在:怎么查找最快、最全、最准、最狠......,所以就出现了正向最大匹配法、逆向最大匹配法、双向扫描法、助词遍历法......,用新世纪比较流行的一个词来形容就是:你太low了! 中文自动分词最难的两个问题:1)歧义消除;2)未登陆词识别。说句公道话,没有上个世纪

  • 关于中文分词的详细配置实例和分词词典的自定义设置,可以访问Coreseek网站中文分词核心配置查看。 核心配置: charset_dictpath = /usr/local/mmseg3/etc/ charset_type = zh_cn.utf-8 #charset_table = .................... #需将原有的该配置注释掉 ngram_le