中文分词器:jcseg

jopen 11年前

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