中文分词器:jcseg
jcseg是使用Java开发的一个中文分词器,使用流行的mmseg算法实现。
1。目前最高版本:jcseg 1.6.9。
2。mmseg四种过滤算法,分词准确率达到了97%以上。
3。支持自定义词库。在lexicon文件夹下,可以随便添加/删除/更改词库和词库内容,并且对词库进行了分类。如何给jcseg添加词库/新词
4。中文数字识别,例如:"四五十个人都来了,管他叁柒贰拾壹。"中的"四五十"和"叁柒贰拾壹"。(1.6.7版开始支持)
5。支持中英混合词的识别。例如:B超。
6。支持基本单字单位的识别,例如2012年。
7。智能圆角半角处理。
8。特殊字母识别:例如:Ⅰ,Ⅱ
9。特殊数字识别:例如:①,⑩
10。配对标点内容提取:例如:最好的Java书《java编程思想》,‘畅想杯黑客技术大赛’,被《,‘,“,『标点标记的内容。(1.6.8版开始支持)
11。智能中文人名识别。中文人名识别正确率达90%以上。(可以维护lex-lname.lex,lex-dname-1.lex,lex-dname-2.lex来去除歧义,提高准确率)。
jcseg目录结构:
src ----- jcseg源代码
classes ----- jcseg class文件
doc ----- jcseg开发文档
lib ------ lucene核心jar文件
build.xml ----- jcseg ant编译脚本文件
lexicon ----- jcseg词库文件 (可以在jcesg.properties中更改)
jcseg.design ----- jcseg设计文件
jcseg-core-{version} ----- jcseg jar文件
jcseg-kernel.jar ----- jcseg内核-jcseg是基于这个内核实现了,你可以基于这个内核写自己的实现。
jcseg-{version}-javadoc.jar ------ jcseg文档jar文件
jcseg.properties ----- jcseg配置文件
配置文件::参数说明
jcseg.icnname=1 #-开启中文人名识别 lexicon.prefix=lex #-词库文件前缀 jcseg.cnmaxlnadron=1 #-姓氏修饰词长度,例如:老陈 中的“陈” lexicon.suffix=lex #-词库文件后缀 jcseg.mixcnlen=2 #-中英混合词最大中文词数,例如:A计划 A后面有两个字“计划” jcseg.nsthreshold=1000000 #-姓名成词歧义阕值 lexicon.dir=lexicon #-词库目录,和以下的path加起来为jcseg词库绝对路径 lexicon.path=jar.dir #-词库存放路径(jar.dir为默认路径) jcseg.maxlen=5 #-正向最大化匹配数目(建议位于4-7之间) jcseg.pptmaxlen=15 #最大的配对标点内容长度。
word.type ----- jcseg word类别,每一个辞典文件都必须指定类别。请查看具体的词库文件。
二。分词速度:
测试环境:2.8GHZ/2G/Ubuntu
Simple 模式: 1366058字/秒 3774.5KB/秒
Complex 模式: 479338字/秒 1324.4KB/秒
分词正确率97%以上,请参考本算法的原作:http://technology.chtsai.org/mmseg/
测试文章,“世界与和平” 简易模式830msec,复杂模式2461msec。
三。分词结果演示:
文本一:
普通:研究生命起源,混合词: 做B超检查身体,本质是X射线,单位和全角: 2009年8月6日开始大学之旅,中文数字: 张三和李四都同意每个人交四十七块钱班费的建议,那是一九九八年前的事了,四川麻辣烫很好吃。人名识别: 我是陈鑫,也是jcesg的作者,三国时期的诸葛亮是个天才,我们一起给刘翔加油,罗志高兴奋极了因为老吴送了他一台笔记本。配对标点: 本次“畅想杯黑客技术大赛”的得主为‘电信09-2BF’的张三,奖励《C程序设计语言》一书和『畅想网络JAVA教程』一套。特殊字母: 【Ⅰ】(Ⅱ),英文: let's make miracle,特殊数字: ① ⑩ ⑽ ㈩.
jcseg分词结果:(标点符号可以滤掉,我这里都显示了)
普通|:|研究|生命|起源|混合|词|:|做|B超|检查|身体|本质|是|X射线|单位|和|全角|:|2009年|8月|6日|开始|大学|之旅|中文|数字|:|张三|和|李四|都|同意|每个人|交|四十七|块钱|班费|的|建议|那是|一九九八|年前|的|事|了|四川|麻辣烫|很|好吃|人名|识别|:|我|是|陈鑫|也|是|jcesg|的|作者|三国|时期|的|诸葛亮|是|个|天才|我们|一起|给|刘翔|加油|罗志高|兴奋|极了| 因为|老吴|送|了|他|一台|笔记本|配对|标点|:|本次|畅想杯黑客技术大赛|的|得主|为|电信09-2BF|的|张三|奖励|C程序设计语言| 一书|和|畅想网络JAVA教程|一套|特殊|字母|:|Ⅰ|Ⅱ|英文|:|let's|make|miracle|特殊|数字|:|①⑩|⑽|㈩|.
文本二:
陈书高自从担任班长以来,一直兢兢业业
jcseg切分结果:
陈书高|自从|担任|班长|以来|,|一直|兢兢业业
jcseg分词歧义:
例如: 一次性交一百元 结果: 一次|性交|一|百元 (该问题如果有必要,可以更改lex-chars.lex的单字语素自由度来达到正确的切分结果)
正确的结果应该为:一次性 交 一百元
例如: 长春市长春药店 结果: 长春市|长春|药店 (这个结果很准确)
淡疼的结果:长春|市长|春药|店。
四。使用方法:
请参考jcseg源码里面的Demo程序。 源码在Downloads中下载。
demo测试程序运行:
运行java -jar jcseg-core-{version}.jar即可。
lucene分词用法: //导入jcseg-core-{version}.jar //import com.webssky.jcseg.core.Config类 /* 1.Config.COMPLEX_MODE为复杂模式: 特点:四种过滤算法,中英混合词识别,中文姓名,姓氏昵称识别, 数字单位识别,特殊数字和字母识别。 */ /* 2.Config.SIMPLE_MODE为简易模式 特点:只使用了最大化过滤算法,其他的同复杂模式。 */ Analyzer analyzer = new JcsegAnalyzer(Config.COMPLEX_MODE);
详细了解地址:jcseg google code
下载地址:下载jcseg