-
盘古分词是一个基于 .net framework 的中英文分词组件。主要功能 中文未登录词识别 盘古分词可以对一些不在字典中的未登录词自动识别 词频优先 盘古分词可以根据词频来解决分词的歧义问题 多元分词 盘古分词提供多重输出解决分词粒度和分词精度权衡的问题 中文人名识别 输入: “张三说的确实在理” 分词结果:张三/说/的/确实/在理/ 输入 “李三买了一张三角桌子” 分词结果:李三/买/了/一张/三角/桌子/ 强制一元分词 输入 “张三说的确实在理” 分词结果: 张(0,1)/张三(0,5)/三说的(1,1)/三(1,1)/说(2,5)/的(3,5)/确(4,1)/确实(4,5)/实(5,1)/在 (6,1)/在理(6,5)/理(7,1)/ 繁体中文分词 输入"我的選擇" 分词结果: 我/的/選擇/ 同时输出简体和繁体 输入"我的選擇" 分词结果:我(0,5)/的(1,5)/选择(2,1)/選擇(2,5)/ 中文词性输出 盘古分词可以将以登录词的中文词性输出给用户,以方便用户做进一步处理。 全角字符支持 盘古分词可以识别全角的字母和数字 英文分词 英文分词 英文单词通常都是靠空格等符号分割,这个比较简单,盘古分词分英文自然也没有什么问题。 英文专用词识别 一些英文简写是字母符号混合,或者是字母数字混合,这个分词起来就不能按照空格符号这样分割了,对于字母符号混合的如 U.S.A ,只要将这个 词录入到字典中,盘古分词就可以分出整词。对于字母和数字混合的,盘古分词会自动作为整词输出。 英文原词输出 英文大小写同时输出 其他功能 停用词过滤 对于一些标点符号,连词,助词等有时候需要在分词时过滤掉,盘古分词提供一个 StopWord.txt 文件,用户只要将需要过滤的词加入到这个文件中,并将停用词过滤开发打开,就可以过滤掉这些词。 设置分词权值 盘古分词可以让用户对如下特性设置自定义权值 未登录词权值 最匹配词权值 次匹配词权值 再次匹配词权值 强行输出的单字的权值 数字的权值 英文词汇权值 符号的权值 强制同时输出简繁汉字时,非原来文本的汉字输出权值。 *用户自定义规则 字典管理 盘古分词提供一个字典管理工具 DictManage 通过这个工具,你可以增加,修改,和删除字典中的单词 动态加载字典 通过字典工具增加,修改,和删除字典中的单词后,保持字典,盘古分词会自动将新的字典文件加载进去,而不需要重新启动。 关键词高亮组件 Lucene 提供了一个关键词高亮组件,但这个组件对中文的支持不是特别好,特别是如果还有多元分词的情况,处理的就更不好。盘古分词提供了一 个针对中文和英文的关键词高亮组件 PanGu.HighLight ,其对中文的支持要好于Lucene 那个高亮组件。 同义词输出(后续版本提供) Lucene.net 接口及示例 在PanGu4Lucene 这个包里面有我做的一个盘古+Lucene 的简单新闻搜索Web示例程序,Release 包里面有使用说明。
性能指标
Core Duo 1.8 GHz 下单线程 分词速度为 390K 字符每秒,2线程分词速度为 690K 字符每秒。
编程语言:csharp
-
SCWS 是 Simple Chinese Words Segmentation 的缩写,即简易中文分词系统。
这是一套基于词频词典的机械中文分词引擎,它能将一整段的汉字基本正确的切分成词。词是汉语的基本语素单位,而书写的时候不像英语会在词之间用空格分开, 所以如何准确而又快速的分词一直是中文分词的攻关难点。
SCWS 在概念上并无创新成分,采用的是自行采集的词频词典,并辅以一定程度上的专有名称、人名、地名、数字年代等规则集,经小范围测试大概准确率在 90% ~ 95% 之间,已能基本满足一些中小型搜索引擎、关键字提取等场合运用。 SCWS 采用纯 C 代码开发,以 Unix-Like OS 为主要平台环境,提供共享函数库,方便植入各种现有软件系统。此外它支持 GBK,UTF-8,BIG5 等汉字编码,切词效率高。
编程语言:php
-
smallseg -- 开源的,基于DFA的轻量级的中文分词工具包
特点:可自定义词典、切割后返回登录词列表和未登录词列表、有一定的新词识别能力。
Python 示例代码:
s3 = file("text.txt").read()
words = [x.rstrip() for x in file("main.dic") ]from smallseg import SEG
seg = SEG()
print 'Load dict...'
seg.set(words)
print "Dict is OK."A,B = seg.cut(s3) #A是识别出的登录词列表,B是未登录词列表
for t in A:try:print t.decode('utf-8')except:pass
print "============================"
for t in B:try:print t.decode('utf-8')except:pass
Java 示例代码:
Seg seg = new Seg();
seg.useDefaultDict();
System.out.println(seg.cut("至于在这个程序中没有太大的意义, 这是Java提供的强制转化机制。草泥马"));stdout>>
r:[至于, 在这, 程序, 没有, 太大, 意义, 这是, 提供, 强制, 转化, 机制]
u:[Java, 草泥马, 泥马]
(因为“草泥马”并没有在词库中)
编程语言:java python
-
PHPCWS 是一款开源的PHP中文分词扩展,目前仅支持Linux/Unix系统,该项目现在已改名为 HTTPCWS,此项目不再继续维护。
PHPCWS 先使用“ICTCLAS 3.0 共享版中文分词算法”的API进行初次分词处理,再使用自行编写的“逆向最大匹配算法”对分词和进行词语合并处理,并增加标点符号过滤功能,得出分词结果。
ICTCLAS(Institute of Computing Technology, Chinese Lexical Analysis System)是中国科学院计算技术研究所在多年研究工作积累的基础上,基于多层隐马模型研制出的汉语词法分析系统,主要功能包括中文分词;词性标注;命 名实体识别;新词识别;同时支持用户词典。ICTCLAS经过五年精心打造,内核升级6次,目前已经升级到了ICTCLAS3.0,分词精度 98.45%,各种词典数据压缩后不到3M。ICTCLAS在国内973专家组组织的评测中活动获得了第一名,在第一届国际中文处理研究机构SigHan 组织的评测中都获得了多项第一名,是当前世界上最好的汉语词法分析器。
ICTCLAS 3.0 商业版是收费的,而免费提供的 ICTCLAS 3.0 共享版不开源,词库是根据人民日报一个月的语料得出的,很多词语不存在。所以本人对ICTCLAS分词后的结果,再采用逆向最大匹配算法,根据自己补充的 一个9万条词语的自定义词库(与ICTCLAS词库中的词语不重复),对ICTCLAS分词结果进行合并处理,输出最终分词结果。
由于 ICTCLAS 3.0 共享版只支持GBK编码,因此,如果是UTF-8编码的字符串,可以先用PHP的iconv函数转换成GBK编码,再用phpcws_split函数进行分词处理,最后转换回UTF-8编码。
编程语言:php
-
庖丁中文分词库是一个使用Java开发的,可结合到Lucene应用中的,为互联网、企业内部网使用的中文搜索引擎分词组件。Paoding填补了国内中文分词方面开源组件的空白,致力于此并希翼成为互联网网站首选的中文分词开源组件。 Paoding中文分词追求分词的高效率和用户良好体验。
Paoding's Knives 中文分词具有极 高效率 和 高扩展性 。引入隐喻,采用完全的面向对象设计,构思先进。
高效率:在PIII 1G内存个人机器上,1秒 可准确分词 100万 汉字。
采用基于 不限制个数 的词典文件对文章进行有效切分,使能够将对词汇分类定义。
能够对未知的词汇进行合理解析
编程语言:java
-
bamboo是一个中文语言处理系统。目前包括中文分词和词性标注部分。
bamboo提供了C,PHP,PostgreSQL的编程接口。
编程语言:c
-
1、mmseg4j 用 Chih-Hao Tsai 的 MMSeg 算法(http://technology.chtsai.org/mmseg/ )实现的中文分词器,并实现 lucene 的 analyzer 和 solr 的TokenizerFactory 以方便在Lucene和Solr中使用。
2、MMSeg 算法有两种分词方法:Simple和Complex,都是基于正向最大匹配。Complex 加了四个规则过虑。官方说:词语的正确识别率达到了 98.41%。mmseg4j 已经实现了这两种分词算法。 1.5版的分词速度simple算法是 1100kb/s左右、complex算法是 700kb/s左右,(测试机:AMD athlon 64 2800+ 1G内存 xp)。 1.6版在complex基础上实现了最多分词(max-word)。“很好听” -> "很好|好听"; “中华人民共和国” -> "中华|华人|共和|国"; “中国人民银行” -> "中国|人民|银行"。 1.7-beta 版, 目前 complex 1200kb/s左右, simple 1900kb/s左右, 但内存开销了50M左右. 上几个版都是在10M左右. mmseg4j实现的功能详情请看:
http://mmseg4j.googlecode.com/svn/branches/mmseg4j-1.7/CHANGES.txthttp://mmseg4j.googlecode.com/svn/branches/mmseg4j-1.6/CHANGES.txt
3、在 com.chenlb.mmseg4j.example包里的类示例了三种分词效果。
4、 在 com.chenlb.mmseg4j.analysis包里扩展lucene analyzer。MMSegAnalyzer默认使用max-word方式分词(还有:ComplexAnalyzer, SimplexAnalyzer, MaxWordAnalyzer)。
5、在 com.chenlb.mmseg4j.solr包里扩展solr tokenizerFactory。
dicPath 指定词库位置(每个MMSegTokenizerFactory可以指定不同的目录,当是相对目录时,是相对 solr.home 的目录),mode 指定分词模式(simple|complex|max-word,默认是max-word)。
6、运行,词典用mmseg.dic.path属性指定或在当前目录下的data目录,默认是 ./data 目录。
java -Dmmseg.dic.path=./data -jar mmseg4j-1.6.jar 这里是字符串。
java -cp .;mmseg4j-1.6.jar com.chenlb.mmseg4j.example.Simple 这里是字符串。
java -cp .;mmseg4j-1.6.jar com.chenlb.mmseg4j.example.MaxWord 这里是字符串
7、一些字符的处理 英文、俄文、希腊、数字(包括①㈠⒈)的分出一连串的。目前版本没有处理小数字问题, 如ⅠⅡⅢ是单字分,字库(chars.dic)中没找到也单字分。
8、词库(强制使用 UTF-8): data/chars.dic 是单字与语料中的频率,一般不用改动,1.5版本中已经加到mmseg4j的jar里了,我们不需要关心它,当然你在词库目录放这个文件可能覆盖它。 data/units.dic 是单字的单位,默认读jar包里的,你也可以自定义覆盖它,这功能是试行,如果不喜欢它,可以空的units.dic文件覆盖它。 data/words.dic 是词库文件,一行一词,当然你也可以使用自己的,1.5版本使用 sogou 词库,1.0的版本是用 rmmseg 带的词库。 data/wordsxxx.dic 1.6版支持多个词库文件,data 目录(或你定义的目录)下读到"words"前缀且".dic"为后缀的文件。如:data/words-my.dic。
编程语言:java
-
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-29Updated: 1998-03-06Document updated: 2000-03-12License: Free for noncommercial useCopyright 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编码。
词典文件格式:
....河 187x:187造假者 1x:1台北队 1x: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 => dotnetc# => csharpc++ => 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 长度
编程语言:c
-
ictclas4j中文分词系统是sinboy在中科院张华平和刘群老师的研制的FreeICTCLAS的基础上完成的一个java开源分词项目,简化了原分词程序的复杂度,旨在为广大的中文分词爱好者一个更好的学习机会。
编程语言:java
-
中文分词是互联网应用不可缺少的基础技术之一,也是其他语音和语言产品必不可少的技术组件。
自2003年第一届国际中文分词评测以来,由字构词的分词方法获得了压倒性优势,国内主要通过CRF++开源软件包来学习该分词方法,但是CRF++过于复杂的代码结构,导致了该算法的普及率。
CRF中文分词开源版仅仅包含CRF++软件包中分词解码器部分,简化了CRF++复杂代码结构,清除了分词解码器不需要的代码,大大提高了分词解码器的可读性和可懂度。同时为了方便学习者可视化跟踪和调试代码,在Windows平台下分别建立了VC6.0和VS2008两个工程文件,使得VC6.0用户和VS2008用户都能轻玩转中文分词。
开源包中的分词知识库较小,分词精度较低,仅供学习Crf分词算法使用,可以通过如下途径获得更高精度的分词知识库和更高速度的分词引擎DLL或OCX:1)致电 nlptech360@gmail.com 或者 langiner@gmail.com2)在博客 http://langiner.blog.51cto.com 留言3)在搜索引擎上搜索:极速分词
编程语言:c