开源中文切词工具介绍

开源中文分词工具介绍

这里介绍常用的开源中文分词工具,大部分是java实现。如果是java生产环境,建议使用ansjwordHanNlp

Bakeoff是一个国际中文处理比赛,有多个语料,所以每个语料都有排名。

最后一小节介绍分词工具的性能比较

 

1     什么是中文分词

中文分词或中文切词(Chinese Word Segmentation) 指的是将一个汉字序列切分成一个一个单独的词。分词就是将连续的字序列按照一定的规范重新组合成词序列的过程。

中文分词是针对汉字的处理。英文是有空格分隔每一个词,而中文没有空格分隔,因此需要预先切词。

例如:“我今天去学习

中文:我今天去学习

切词后:我 今天 去 学习

英文:I'm going to study today

 

2  Ansj分词工具

项目网址:https://github.com/NLPchina/ansj_seg

使用文档:https://github.com/NLPchina/ansj_seg/wiki

在线体验:http://demo.nlpcn.org/demo.jsp

ansj是一个基于n-Gram+CRF+HMM的中文分词的java实现.

分词速度达到每秒钟大约200万字左右(mac air下测试),准确率能达到96%以上。

目前实现了.中文分词. 中文姓名识别 . 用户自定义词典,关键字提取,自动摘要,关键字标记等功能

可以应用到自然语言处理等方面,适用于对分词效果要求高的各种项目。

下载jar

访问 http://maven.nlpcn.org/org/ansj/ 最好下载最新版 ansj_seg/

同时下载nlp-lang.jar 需要和ansj_seg 配套。配套关系可以看jar包中的maven依赖,一般最新的ansj配最新的nlp-lang不会有错。

导入到eclipse ,开始你的程序吧

maven

        

           org.ansj

           ansj_seg

           5.1.1

       

   

 

3   Hanlp分词器

项目网址:https://github.com/hankcs/HanLP

使用文档:https://github.com/hankcs/HanLP/wiki 

HanLP下载地址:https://github.com/hankcs/HanLP/releases

SolrLucene插件:https://github.com/hankcs/hanlp-solr-plugin

 

HanLP是由一系列模型与算法组成的Java工具包,目标是普及自然语言处理在生产环境中的应用。HanLP具备功能完善、性能高效、架构清晰、语料时新、可自定义的特点。

HanLP提供下列功能:

  • 中文分词
  • 最短路分词
  • N-最短路分词
  • CRF分词
  • 索引分词
  • 极速词典分词
  • 用户自定义词典
  • 词性标注
  • 命名实体识别
  • 中国人名识别
  • 音译人名识别
  • 日本人名识别
  • 地名识别
  • 实体机构名识别
  • 关键词提取
  • TextRank关键词提取
  • 自动摘要
  • TextRank自动摘要
  • 短语提取
  • 基于互信息和左右信息熵的短语提取
  • 拼音转换
  • 多音字
  • 声母
  • 韵母
  • 声调
  • 简繁转换
  • 繁体中文分词
  • 简繁分歧词(简体、繁体、臺灣正體、香港繁體)
  • 文本推荐
  • 语义推荐
  • 拼音推荐
  • 字词推荐
  • 依存句法分析
  • 基于神经网络的高性能依存句法分析器
  • MaxEnt依存句法分析
  • CRF依存句法分析
  • 语料库工具
  • 分词语料预处理
  • 词频词性词典制作
  • BiGram统计
  • 词共现统计
  • CoNLL语料预处理
  • CoNLL UA/LA/DA评测工具

在提供丰富功能的同时,HanLP内部模块坚持低耦合、模型坚持惰性加载、服务坚持静态提供、词典坚持明文发布,使用非常方便,同时自带一些语料处理工具,帮助用户训练自己的模型。

Maven

为了方便用户,特提供内置了数据包的Portable版,只需在pom.xml加入:

    com.hankcs
    portable-1.3.4

 

4   word分词器

项目网址:https://github.com/ysc/word

word分词是一个Java实现的分布式的中文分词组件,提供了多种基于词典的分词算法,并利用ngram模型来消除歧义。

能准确识别英文、数字,以及日期、时间等数量词

能识别人名、地名、组织机构名等未登录词

能通过自定义配置文件来改变组件行为

能自定义用户词库、自动检测词库变化、支持大规模分布式环境

能灵活指定多种分词算法

能使用refine功能灵活控制分词结果

还能使用词频统计、词性标注、同义标注、反义标注、拼音标注等功能。

提供了10种分词算法,还提供了10种文本相似度算法,同时还无缝和LuceneSolrElasticSearchLuke集成。注意:word1.3需要JDK1.8

 

Maven

pom.xml中指定dependency,可用版本有1.01.11.21.31.3.1

   

        org.apdplat

        word

        1.3

   

 

 

5   IKAnalyzer

官网:http://code.google.com/p/ik-analyzer/

作者博客:http://linliangyi2007.iteye.com/

200612月推出1.0版开始。

开源轻量级的中文分词工具包

语言和平台:

基于java 语言开发, 最初,它是以开源项目Luence 为应用主体的,结合词典分词和文法分析算法的中文分词组件。新版本的 IKAnalyzer3.0 则发展为面向 Java 的公用分词组件,独立于 Lucene 项目,同时提供了对 Lucene 的默认优化实现。

算法:

采用了特有的正向迭代最细粒度切分算法。采用了多子处理器分析模式,支持:英文字母( IP 地址、 Email URL )、数字(日期,常用中文数量词,罗马数字,科学计数法),中文词汇(姓名、地名处理)等分词处理。优化的词典存储,更小的内存占用。支持用户词典扩展定义。针对 Lucene 全文检索优化的查询分析器 IKQueryParser ;采用歧义分析算法优化查询关键字的搜索排列组合,能极大的提高 Lucene 检索的命中率。

性能:

在系统环境:Core2 i7 3.4G双核,4G内存,window 7 64位, Sun JDK 1.6_29 64位 普通pc环境测试,IK2012具有160万字/秒(3000KB/S)的高速处理能力

 

6   盘古分词

官网:http://pangusegment.codeplex.com/

作者:eaglet

博客:http://www.cnblogs.com/eaglet/

项目描述

盘古分词是一个中英文分词组件。作者eaglet 曾经开发过KTDictSeg 中文分词组件,拥有大量用户。

作者基于之前分词组件的开发经验,结合最新的开发技术重新编写了盘古分词组件。

主要功能

中文分词功能

中文人名识别

自定义词典

其他功能

  停用词过滤

  设置分词权值

 

性能:

Core Duo 1.8 GHz  下单线程 分词速度为  390K  字符每秒, 2 线程分词速度为  690K  字符每秒。

算法:

盘古分词提供的字典包括17万个中文常用单词,但这个字典依然不够完整,如果要分词更准确,需要适当维护一下这个字典。中文人名的识别能力取决于  ChsSingleName.txt   ChsDoubleName1.txt   ChsDoubleName2.txt  这三个文件,它们分别表示单子人名,双字人名的首字和双字人名的尾字。 

 

最后一次更新是2010818(今天2017106日)

 

7  Stanford 汉语分词工具

Stanford 汉语分词工具的成绩:2005Bakeoff 2两个语料的测试第一。斯坦福自然语言小组直接使用CRF 的方法,特征窗口为5

官网:http://nlp.stanford.edu/software/segmenter.shtml

最后更新于2017-06-09(今天2017-10-06

一篇使用介绍:

Stanford CoreNLP 进行中文分词

 

点评:印象中Stanford 汉语分词工具需要2Gb的内存,不知道目前改进了没。at 2017-10-06

 

8   FudanNLP(复旦大学)

项目官网:https://github.com/FudanNLP/fnlp

使用文档:https://github.com/FudanNLP/fnlp/wiki

FudanNLP后来改名为FNLP

FNLP主要是为中文自然语言处理而开发的工具包,使用java实现,包含为实现这些任务的机器学习算法和数据集。本工具包及其包含数据集使用LGPL3.0许可证。

 

功能(Functions)

    信息检索: 文本分类 新闻聚类

    中文处理: 中文分词 词性标注 实体名识别 关键词抽取 依存句法分析 时间短语识别

    结构化学习: 在线学习 层次分类 聚类

 

9  庖丁解牛分词

官网:http://code.google.com/p/paoding/

 

语言和平台:

Java,提供lucence  3.0  接口,仅支持 Java 语言。

性能:

PIII 1G 内存个人机器上,1  可准确分词  100  汉字。

算法:

采用基于 不限制个数 的词典文件对文章进行有效切分

主要功能:

使能够将对词汇分类定义。能够对未知的词汇进行合理解析

 

 

 

10哈工大语言云LTP -cloud

项目网址:https://www.ltp-cloud.com/

文档说明:https://www.ltp-cloud.com/intro/#cws_how

在线演示:https://www.ltp-cloud.com/demo/

哈工大语言云是通过HTTP请求对外提供服务,也就是说需要联网。

HITITNLPLab, HIT Wei JIANGBakeoff 2005open语料MSR上获得测评第一名。不确定LTP–cloud是否是在Wei JIANG的工作基础上进行的开发。

语言云曾获CoNLL 2009七国语言句法语义分析评测总成绩第一名,

语言云(语言技术平台云LTP-Cloud)是由哈工大社会计算与信息检索研究中心研发的云端自然语言处理服务平台。 后端依托于语言技术平台,语言云为用户提供了包括分词、词性标注、依存句法分析、命名实体识别、语义角色标注在内的丰富高效的自然语言处理服务。

作为基于云端的服务,语言云具有如下一些优势:

  • 免安装:用户只需要下载语言云客户端源代码,编译执行后即可获得分析结果,无需调用静态库或下载模型文件。
  • 省硬件:语言云客户端几乎可以运行于任何硬件配置的计算机上,用户不需要购买高性能的机器,即可快捷的获得分析结果。
  • 跨平台:语言云客户端几乎可以运行于任何操作系统之上,无论是WindowsLinux各个发行版或者Mac OS
  • 跨编程语言:时至今日,语言云已经提供了包括C++JavaC#PythonRuby在内的客户端,其他编程语言的客户端也在开发之中。

在运算资源有限,编程语言受限的情况下,语言云无疑是用户进行语言分析更好的选择。

 

11ICTCLAS : 汉语词法分析系统

官网:http://ictclas.nlpir.org/newsdownloads?DocId=354

12   (之前在中科院,现在独立出来)

ICTCLAS(Institute of Computing Technology, Chinese Lexical Analysis System)

Bakeoff 1上两项第一。

  这是最早的中文开源分词项目之一,ICTCLAS在国内973专家组组织的评测中活动获得了第一名,在第一届2003国际中文处理研究机构SigHan组织的评测中都获得了多项第一名。

性能:

分词速度单机996KB/s API 不超过200KB ,各种词典数据压缩后不到 3M.

准确率:

分词精度98.45%

语言和平台:

ICTCLAS 全部采用C/C++ 编写,支持 Linux FreeBSD Windows 系列操作系统,支持 C/C++ C# Delphi Java 等主流的开发语言。

Author

中国科学院计算技术研究所

主要功能:

中文分词;词性标注;命名实体识别;新词识别;同时支持用户词典;支持繁体中文;支持GBK UTF-8 UTF-7 UNICODE 等多种编码格式。

算法:

完美PDAT 大规模知识库管理技术( 200510130690.3 ),在高速度与高精度之间取得了重大突破,该技术可以管理百万级别的词典知识库,单机每秒可以查询 100 万词条,而内存消耗不到知识库大小的 1.5 倍。层叠隐马尔可夫模型( Hierarchical Hidden Markov Model  ,该分词系统的主要是思想是先通过 CHMM( 层叠形马尔可夫模型 ) 进行分词 , 通过分层 , 既增加了分词的准确性 , 又保证了分词的效率 . 共分五层, 如下图所示。基本思路是进行原子切分 , 然后在此基础上进行N- 最短路径粗切分 , 找出前 N 个最符合的切分结果 , 生成二元分词表 , 然后生成分词结果 , 接着进行词性标注并完成主要分词步骤 .

 

 

13 CC-CEDICT

 

主要功能:

提供一份以汉语拼音为中文辅助的汉英辞典,截至2009 2 8 日,已收录 82712 个单词。其词典可以用于中文分词使用,而且不存在版权问题Chrome 中文版就是使用的这个词典进行中文分词的。

     亿思拓(ESTinside) 中文分词组件

  可以作为lucene的一个模块调用,作为二元分词方法的替代。该组件直接扩展org.apache.lucene.analysis.Tokenizer org.apache.lucene.analysis.Analyzer  类。

准确率 :

98%以上。

主要功能

同时支持分词和词性标注, 提供参数调节分词准确性和切分速度。针对多线程使用优化,占用内存少。

语言和平台:

100%采用 java 实现的分词组件,无内存泄漏问题。可长期不间断运行。

算法:

采用多种分词方法结合,包括基于概率的n 元切分方法,隐马尔科夫模型,未登录词识别算法,歧义识别算法和基于规则的方法  等。采用多个大规模语料库训练概率词库。

 

14 imdict-chinese-analyzer

官网:http://code.google.com/p/imdict-chinese-analyzer/

 

imdict 智能词典的智能中文分词模块。

算法 :

基于隐马尔科夫模型(Hidden Markov Model HMM) 是中国科学院计算技术研究所的 ictclas 中文分词程序的重新实现(基于 Java .

可以直接为lucene 搜索引擎提供简体中文分词支持 

主要功能:

1 完全 Unicode 支持

分词核心模块完全采用Unicode 编码,无须各种汉字编码的转换,极大的提升了分词的效率。

2. 提升搜索效率

根据imdict 智能词典的实践,在有智能中文分词的情况下,索引文件比没有中文分词的索引文件小 1/3

3. 提高搜索准确度

imdict-chinese-analyzer采用了 HHMM 分词模型,极大的提高了分词的准确率,在此基础上的搜索,比对汉字逐个切分要准确得多!

4. 更高效的数据结构

为了提高效率,针对常用中文检索的应用场景,imdict-chinese-analyzer 对一些不必要的功能进行了删减,例如词性标注、人名识别、时间识别等等。另外还修改了算法的数据结构,在内存占用量缩减到 1/3 的情况下把效率提升了数倍。

 

 

ictclas4j

imdict-chinese-analyzer

ICTCLAS 3.0

分词速度( 字节 / )

 13.86  

  483.64   

 678.15  

分词速度( 汉字 / )  

 7439  

  259517   

 363888  

测试环境为:酷睿E7200 双核,内存 2G JDK 参数为: "-Xms512m -Xmx1024m "

由此对比可以看出, imdict-chinese-analyzer 的分词效率与 C ++实现的 ICTCLAS 3.0 的分词效率在同一个数量级,是 ictclas4j    36  倍!

ictclas4j中文分词系统是sinboy 在中科院张华平和刘群老师的研制的 FreeICTCLAS 的基础上完成的一个 java 开源分词项目,简化了原分词程序的复杂度,旨在为广大的中文分词爱好者一个更好的学习机会。 

 

15 mmseg4j

项目网址:http://code.google.com/p/mmseg4j/

作者博客:

1http://blog.chenlb.com/

2http://chenlb.iteye.com/

 

算法:

 1mmseg4j Chih-HaoTsai MMSeg 算法(http://technology.chtsai.org/mmseg/ )实现的中文分词器,并实现 lucene analyzer solr TokenizerFactory 以方便在LuceneSolr中使用。

2MMSeg 算法有两种分词方法:SimpleComplex,都是基于正向最大匹配。Complex 加了四个规则过虑。官方(指mmseg论文的作者)说:词语的正确识别率达到了 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左右.
  • 1.8 ,增加 CutLetterDigitFilter过虑器,切分字母和数混在一起的过虑器。比如:mb991ch 切为 "mb 991 ch"

mmseg4j实现的功能详情请看:

  • http://mmseg4j.googlecode.com/svn/trunk/CHANGES.txt

3、在 com.chenlb.mmseg4j.example包里的类示例了三种分词效果。

 

 

16 Jcseg

官网:http://code.google.com/p/jcseg/

 

一、jcseg中文分词器

jcseg是使用Java开发的一个中文分词器,使用流行的mmseg算法实现。

1目前最高版本:jcseg 1.9.0兼容最高版本lucene-4.x和最高版本solr-4.x

2mmseg四种过滤算法,分词准确率达到了98.41%

3。支持自定义词库。在lexicon文件夹下,可以随便添加/删除/更改词库和词库内容,并且对词库进行了分类。如何给jcseg添加词库/新词

4。中英文同义词追加/同义词匹配 + 中文词条拼音追加.词库整合了《现代汉语词典》和cc-cedict辞典中的词条,并且依据cc-cedict词典为词条标上了拼音,依据《中华同义词词典》为词条标上了同义词(尚未完成)。更改jcseg.properties配置文档可以在分词的时候加入拼音和同义词到分词结果中。jcseg新版词库

5。中文数字和中文分数识别,例如:"一百五十个人都来了,四十分之一的人。"中的"一百五十""四十分之一"。并且jcseg会自动将其转换为阿拉伯数字加入到分词结果中。如:150 1/40

6。支持中英混合词和英中混合词的识别(维护词库可以识别任何一种组合)。例如:B, x射线, 卡拉ok, 奇都ktv, 哆啦a梦。

7。更好的英文支持,电子邮件,网址,小数,分数,百分数,字母和标点组合词(例如C++, c#)的识别。(这个对购物网址来说很重要)

8。支持阿拉伯数字/小数/中文数字基本单字单位的识别,例如2012年,1.75米,38.6℃,五折,并且jcseg会将其转换为“5加入分词结果中。

9。智能圆角半角, 英文大小写转换。

10。特殊字母识别:例如:

11。特殊数字识别:例如:

12。配对标点内容提取:例如:最好的Java书《java编程思想》,畅想杯黑客技术大赛,被《,‘,“,『标点标记的内容。(1.6.8版开始支持)

13。智能中文人名识别。中文人名识别正确率达94%以上。(可以维护lex-lname.lexlex-dname-1.lexlex-dname-2.lex来提高准确率),(引入规则和词性后会达到98%以上的识别正确率)

14。自动中英文停止词过滤功能(需要在jcseg.properties中开启该选项,lex-stopwords.lex为停止词词库)。

15。词库更新自动加载功能, 开启一个守护线程随时检测词库的更新并且加载。

16。自动词性标注。

17jcseg.properties ----- jcseg配置文件 如何配置jcseg

二、分词速度:

测试环境:2.8GHZ/2G/Ubuntu

Simple 模式: 1366058/ 3774.5KB/

Complex 模式: 479338/ 1324.4KB/

分词正确率98%以上,请参考本算法的原作:

http://technology.chtsai.org/mmseg/

测试文章,世界与和平简易模式830msec,复杂模式2461msec

 

17 THULAC(清华大学)

项目网址:https://github.com/thunlp/THULAC

THULACTHULexical Analyzer for Chinese)由清华大学自然语言处理与社会人文计算实验室研制推出的一套中文词法分析工具包,具有中文分词和词性标注功能。THULAC具有如下几个特点:

l  能力强。利用我们集成的目前世界上规模最大的人工分词和词性标注中文语料库(约含5800万字)训练而成,模型标注能力强大。

l  准确率高。该工具包在标准数据集Chinese TreebankCTB5)上分词的F1值可达97.3%,词性标注的F1值可达到92.9%,与该数据集上最好方法效果相当。

l  速度较快。同时进行分词和词性标注速度为300KB/s,每秒可处理约15万字。只进行分词速度可达到1.3MB/s

THULAC C++语言实现。

其他语言实现

THULACJava版)https://github.com/thunlp/THULAC-Java

THULACPython版)https://github.com/thunlp/THULAC-Python

THULACso版)https://github.com/thunlp/THULAC.so

 

作者

Maosong Sun (孙茂松,导师), Xinxiong Chen(陈新雄,博士生), Kaixu Zhang (张开旭,硕士生), Zhipeng Guo(郭志芃,本科生), Zhiyuan Liu(刘知远,助理教授).

 

18Isan

项目网址:http://zhangkaixu.github.io/isan/

作者:张开旭(清华2012届博士毕业生,毕业论文)。

 

张开旭老师获得CLPS-SIGHAN2012微博分词评测第一名,系统是清华大学中文分词和词性标注系统演示(THULAC,作者:张开旭,孙茂松)不开源,系统评测报告PPT,可以管中窥豹: sighan12-slides.pdf ),演示地址:

http://nlp.csai.tsinghua.edu.cn/thulac/

 

 

 

性能,用Bakeoff2005的测试工具,测试结果能有0.99以上的F1值。

源码是python

一个数据驱动的中文处理**实验环境**,可进行*中文分词**依存句法分析*等任务。作者张开旭

特点

  • 速度****不为速度牺牲性能,同时保证算法的各个组件的代码容易修改,但理论上保持O(n)的时间复杂度。
  • 效果****,本系统专为实验使用,目标并非实用分词工具,处理真实文本效果并不理想。但可用于设计实用分词系统。
  • 使用****,虽然不太实用,但有很多手动功能,可以通过理解并修改源代码来完成算法和设置的充分修改。

 

19 perminusminus

项目网址:http://code.google.com/p/perminusminus/

作者:张开旭(清华2012届博士毕业生,毕业论文,现在厦大)。

 

个人主页:http://nlp.csai.tsinghua.edu.cn/~zkx/

 

源码是python算法原理是感知器模型

 

Introduction

Per-- is a toolkit of Averaged Perceptron (Freund and Schapire, 1999) for path Labeling under the KISSprinciple(Keep It Simple and Stupid).

Features

  • Simple and efficient
  • Multiple usage: path labeling, path finding, sequence labeling and classification
  • Can provide n-best outputs
  • Can provide "marginal score"
  • Can provide alpha (forward) values and beta (backward) values using forward-backward algorithm
  • Open source

 

 

20 SCWS

   Author Hightman

C语言编写。

算法:

基于词频词典的机械中文分词引擎,采用的是采集的词频词典,并辅以一定的专有名称,人名,地名,数字年代等规则识别来达到基本分词

准确率:

经小范围测试大概准确率在 90% ~ 95%  之间,已能基本满足一些小型搜索引擎、关键字提取等场合运用。

性能:

45Kb 左右的文本切词时间是 0.026 秒,大概是 1.5MB 文本 /

语言和平台

SCWS 采用  C  代码开发,以 Unix-Like OS  为主要平台环境,提供共享函数库,方便植入各种现有软件系统。此外它支持  GBK UTF-8 BIG5  等汉字编码。支持 PHP4 PHP 5

版本列表

版本

类型

平台

性能

SCWS-1.1.x

代码

*Unix*/*PHP*

准确: 95%,  召回 : 91%,  速度 : 1.2MB/sec 

PHP扩展分词速度 : 250KB/sec

php_scws.dll(1)

PHP扩展库

Windows/PHP 4.4.x

准确: 95%,  召回 : 91%,  速度 : 40KB/sec

php_scws.dll(2)

PHP扩展库

Windows/PHP 5.2.x

准确: 95%,  召回 : 91%,  速度 : 40KB/sec

php_scws.dll(3)

PHP扩展库

Windows/PHP 5.3.x

准确: 95%,  召回 : 91%,  速度 : 40KB/sec

PSCWS23

PHP源代码

不限  (不支持 UTF-8)

准确: 93%,  召回 : 89%,  速度 : 960KB/min

PSCWS4

PHP源代码

不限

准确: 95%,  召回 : 91%,  速度 : 160KB/min

 

 

21 Friso

官网http://code.google.com/p/friso/

 

friso是使用c语言开发的一个中文分词器,使用mmseg算法实现。完全基于模块化设计和实现,可以很方便的植入到其他程序中,例如:MySQLPHP等。并且提供了一个php中文分词扩展robbe

1。只支持UTF-8编码。【源码无需修改就能在各种平台下编译使用,加载完20万的词条,内存占用稳定为14M。】。

2mmseg四种过滤算法,分词准确率达到了98.41%

3。支持自定义词库。在dict文件夹下,可以随便添加/删除/更改词库和词库词条,并且对词库进行了分类。

4。词库使用了frisoJava版本jcseg的简化词库。

5。支持中英混合词的识别。例如:c语言,IC卡。

7。很好的英文支持,电子邮件,网址,小数,分数,百分数。

8。支持阿拉伯数字基本单字单位的识别,例如2012年,5吨,120斤。

9。自动英文圆角/半角,大写/小写转换。

并且具有很高的分词速度:简单模式:3.7M/秒,复杂模式:1.8M/秒。[3]

 

 

 

 

22 HTTPCWS  

基于HTTP 协议的开源中文分词系统,

语言和平台:目前仅支持Linux 系统

算法:HTTPCWS  使用“ICTCLAS 3.0 2009 共享版中文分词算法 API 进行分词处理,得出分词结果。 HTTPCWS  将取代之前的  PHPCWS 中文分词扩展 。

PHPCWS PHP 中文分词扩展)

author :张宴

   语言和平台:

PHPCWS 是一款开源的PHP 中文分词扩展,目前仅支持 Linux/Unix 系统。

   算法: PHPCWS 先使用 “ICTCLAS 3.0  共享版中文分词算法 API 进行初次分词处理,再使用自行编写的逆向最大匹配算法对分词和进行词语合并处理,并增加标点符号过滤功能,得出分词结果。 ICTCLAS 3.0  商业版是收费的,而免费提供的 ICTCLAS 3.0  共享版不开源,词库是根据人民日报一个月的语料得出的,很多词语不存在。所以本人对 ICTCLAS 分词后的结果,再采用逆向最大匹配算法,根据自己补充的一个 9 万条词语的自定义词库(与 ICTCLAS 词库中的词语不重复),对 ICTCLAS 分词结果进行合并处理,输出最终分词结果。由于 ICTCLAS 3.0  共享版只支持 GBK 编码,因此,如果是 UTF-8 编码的字符串,可以先用 PHP iconv 函数转换成 GBK 编码,再用 phpcws_split 函数进行分词处理,最后转换回 UTF-8 编码。

     性能:5 8字节的一句话 ——“2009 年 2 13 日,我编写了一款PHP 中文分词扩展: PHPCWS 1.0.0,分词速度只需 0.0003 秒。对于那些采用二元交叉切分的搜索引擎, PHPCWS 用在前端搜索层对用户输入的搜索关键字、短语进行分词处理,同样适合。 PHPCWS 开发的目的正在于此,对于短句、小文本中文分词切分,速度非常之快。

 

23 libmmseg

Author: 李沫南

语言和平台:

C++ 编写的开源的中文分词软件, libmmseg 主要被作者用来实现 Sphinx 全文检索软件的中文分词功能,因此作者给 Sphinx 提供了一个补丁文件,可以让 Sphinx 集成 libmmseg ,从而支持对于中文文章的全文检索功能。 libmmseg 0.7.2 版本开始,作者提供了 ruby 调用的接口,所以我们可以直接在 ruby 程序里面调用 libmmseg 进行分词了。特别是我们可以用 ferret 去调用 libmmseg 分词功能,从而让 ruby 原生支持中文的全文检索。 

算法 :

基于词库的最大匹配算法

性能:

分词速度为每秒300KB 左右。 

 

24 OpenCLAS

是一个开源的中文词法分析库。

主要功能:

其中包括了中文分词、词性标注等功能。系统使用基于概率的多层HMM 。可以对已登录词和未登录词进行识别分析。

OpenCLAS是对原有的 ICTCLAS ( 中科院中文词法分析系统 ) 进行的重写OpenCLAS将不包含任何 ICTCLAS 中的源代码,并且以 BSD 协议发布。因此其代码可以在满足 BSD 协议的前提下,用于包括商用在内的各种场合。

OpenCLAS将包含三个语言分支, C++, Java C# ( 目前只实现了 C++ 的版本 )

 

25CRF++(上海交大)

项目网址http://code.google.com/p/crfpp/

详细介绍http://crfpp.googlecode.com/svn/trunk/doc/index.html

作者:上海交大 赵海

个人主页http://bcmi.sjtu.edu.cn/~zhaohai/index.ch.html

 

成绩

[2007] Bakeoff-4

第一届中国中文信息学会汉语处理评测暨第四届国际中文自然语言处理Bakeoff (Bakeoff-4, Bakeoff-2007, 2008)

       28个研究团队提交的166个分词结果中赢得本届Bakeoff分词的封闭评测的所有五项第一名

       33个命名实体识别结果中赢得三个第二名,一个第三名

Bakeoff-4的正式结果在 我们的系统报告在

[2006] Bakeoff-3

第三届国际中文分词竞赛 (Bakeoff-3, Bakeoff-2006)

       29个研究团队提交的101个分词结果中赢得四项第一、两项第三

Bakeoff-3的正式结果在 我们的系统报告在

 

 

CRF++ is a simple,customizable, and open source implementation of Conditional Random Fields(CRFs) for segmenting/labeling sequential data. CRF++ is designed for genericpurpose and will be applied to a variety of NLP tasks, such as Named EntityRecognition, Information Extraction and Text Chunking.

 

26各分词工具的性能比较

github上有个开源项目对java版的中文分词工具做了测评:

https://github.com/ysc/cws_evaluation

测评结果来自https://github.com/ysc/cws_evaluation

评估报告

1word分词最大Ngram分值算法:

分词速度:370.9714 字符/毫秒

行数完美率:66.55%  行数错误率:33.44%  总的行数:2533709  完美行数:1686210  错误行数:847499

字数完美率:60.94% 字数错误率:39.05% 总的字数:28374490 完美字数:17293964 错误字数:11080526

      

2word分词最少词数算法:

分词速度:330.1586 字符/毫秒

行数完美率:65.67%  行数错误率:34.32%  总的行数:2533709  完美行数:1663958  错误行数:869751

字数完美率:60.12% 字数错误率:39.87% 总的字数:28374490 完美字数:17059641 错误字数:11314849

 

3HanLP分词器标准分词:

分词速度:935.7724 字符/毫秒

行数完美率:58.31%  行数错误率:41.68%  总的行数:2533709  完美行数:1477422  错误行数:1056287

字数完美率:50.43% 字数错误率:49.56% 总的字数:28374490 完美字数:14311008 错误字数:14063482

 

4word分词全切分算法:

分词速度:62.960262 字符/毫秒

行数完美率:57.2%  行数错误率:42.79%  总的行数:2533709  完美行数:1449288  错误行数:1084421

字数完美率:47.95% 字数错误率:52.04% 总的字数:28374490 完美字数:13605742 错误字数:14768748

 

5AnsjBaseAnalysis 基本分词:

分词速度:1295.5205 字符/毫秒

行数完美率:55.36%  行数错误率:44.63%  总的行数:2533709  完美行数:1402905  错误行数:1130804

字数完美率:48.18% 字数错误率:51.81% 总的字数:28374490 完美字数:13672441 错误字数:14702049

 

6smartcn

分词速度:611.1504 字符/毫秒

行数完美率:55.29%  行数错误率:44.7%  总的行数:2533690  完美行数:1401069  错误行数:1132621

字数完美率:48.03% 字数错误率:51.96% 总的字数:28374433 完美字数:13628910 错误字数:14745523

 

7AnsjToAnalysis 精准分词:

分词速度:759.40717 字符/毫秒

行数完美率:54.72%  行数错误率:45.27%  总的行数:2533709  完美行数:1386683  错误行数:1147026

字数完美率:44.99% 字数错误率:55.0% 总的字数:28374490 完美字数:12768426 错误字数:15606064

 

8HanLP分词器极速词典分词:

分词速度:6015.3677 字符/毫秒

行数完美率:54.25%  行数错误率:45.74%  总的行数:2533709  完美行数:1374736  错误行数:1158973

字数完美率:46.12% 字数错误率:53.87% 总的字数:28374490 完美字数:13088320 错误字数:15286170

 

9word分词双向最大最小匹配算法:

分词速度:462.87158 字符/毫秒

行数完美率:53.06%  行数错误率:46.93%  总的行数:2533709  完美行数:1344624  错误行数:1189085

字数完美率:43.07% 字数错误率:56.92% 总的字数:28374490 完美字数:12221610 错误字数:16152880

 

10HanLP分词器 N-最短路径分词:

分词速度:77.89775 字符/毫秒

行数完美率:53.01%  行数错误率:46.98%  总的行数:2533709  完美行数:1343252  错误行数:1190457

字数完美率:44.42% 字数错误率:55.57% 总的字数:28374490 完美字数:12604878 错误字数:15769612

 

11HanLP分词器最短路径分词:

分词速度:384.70233 字符/毫秒

行数完美率:52.94%  行数错误率:47.05%  总的行数:2533709  完美行数:1341450  错误行数:1192259

字数完美率:43.76% 字数错误率:56.23% 总的字数:28374490 完美字数:12417741 错误字数:15956749

 

12AnsjNlpAnalysis NLP分词:

分词速度:172.19516 字符/毫秒

行数完美率:52.66%  行数错误率:47.33%  总的行数:2533709  完美行数:1334314  错误行数:1199395

字数完美率:42.66% 字数错误率:57.33% 总的字数:28374490 完美字数:12105808 错误字数:16268682

 

13HanLP分词器 NLP分词:

分词速度:408.2249 字符/毫秒

行数完美率:52.18%  行数错误率:47.81%  总的行数:2533709  完美行数:1322216  错误行数:1211493

字数完美率:43.03% 字数错误率:56.96% 总的字数:28374490 完美字数:12211399 错误字数:16163091

 

14FudanNLP

分词速度:123.456985 字符/毫秒

行数完美率:51.48%  行数错误率:48.51%  总的行数:2533709  完美行数:1304371  错误行数:1229338

字数完美率:43.22% 字数错误率:56.77% 总的字数:28374490 完美字数:12265742 错误字数:16108748

 

15JiebaSEARCH

分词速度:993.435 字符/毫秒

行数完美率:50.84%  行数错误率:49.15%  总的行数:2533709  完美行数:1288237  错误行数:1245472

字数完美率:41.54% 字数错误率:58.45% 总的字数:28374490 完美字数:11789036 错误字数:16585454

 

16Jcseg复杂模式:

分词速度:561.55975 字符/毫秒

行数完美率:47.96%  行数错误率:52.03%  总的行数:2533709  完美行数:1215171  错误行数:1318538

字数完美率:38.84% 字数错误率:61.15% 总的字数:28374490 完美字数:11021588 错误字数:17352902

 

17word分词双向最小匹配算法:

分词速度:967.68604 字符/毫秒

行数完美率:46.34%  行数错误率:53.65%  总的行数:2533709  完美行数:1174276  错误行数:1359433

字数完美率:36.07% 字数错误率:63.92% 总的字数:28374490 完美字数:10236574 错误字数:18137916

 

18word分词双向最大匹配算法:

分词速度:661.148 字符/毫秒

行数完美率:46.18%  行数错误率:53.81%  总的行数:2533709  完美行数:1170075  错误行数:1363634

字数完美率:35.65% 字数错误率:64.34% 总的字数:28374490 完美字数:10117122 错误字数:18257368

 

19HanLP分词器索引分词:

分词速度:942.4862 字符/毫秒

行数完美率:45.44%  行数错误率:54.55%  总的行数:2533709  完美行数:1151473  错误行数:1382236

字数完美率:35.48% 字数错误率:64.51% 总的字数:28374490 完美字数:10068062 错误字数:18306428

 

20Jcseg简易模式:

分词速度:1193.3085 字符/毫秒

行数完美率:44.59%  行数错误率:55.4%  总的行数:2533709  完美行数:1130000  错误行数:1403709

字数完美率:35.78% 字数错误率:64.21% 总的字数:28374490 完美字数:10155059 错误字数:18219431

 

21word分词正向最大匹配算法:

分词速度:1567.1318 字符/毫秒

行数完美率:41.88%  行数错误率:58.11%  总的行数:2533709  完美行数:1061189  错误行数:1472520

字数完美率:31.35% 字数错误率:68.64% 总的字数:28374490 完美字数:8896173 错误字数:19478317

 

22word分词逆向最大匹配算法:

分词速度:1232.6017 字符/毫秒

行数完美率:41.69%  行数错误率:58.3%  总的行数:2533709  完美行数:1056515  错误行数:1477194

字数完美率:30.98% 字数错误率:69.01% 总的字数:28374490 完美字数:8792532 错误字数:19581958

 

23word分词逆向最小匹配算法:

分词速度:1936.9575 字符/毫秒

行数完美率:41.42%  行数错误率:58.57%  总的行数:2533709  完美行数:1049673  错误行数:1484036

字数完美率:31.34% 字数错误率:68.65% 总的字数:28374490 完美字数:8893622 错误字数:19480868

 

24AnsjIndexAnalysis 面向索引的分词:

分词速度:677.1308 字符/毫秒

行数完美率:40.66%  行数错误率:59.33%  总的行数:2533709  完美行数:1030336  错误行数:1503373

字数完美率:29.81% 字数错误率:70.18% 总的字数:28374490 完美字数:8459997 错误字数:19914493

 

25MMSeg4jComplexSeg

分词速度:1699.5801 字符/毫秒

行数完美率:38.81%  行数错误率:61.18%  总的行数:2533688  完美行数:983517  错误行数:1550171

字数完美率:29.6% 字数错误率:70.39% 总的字数:28374428 完美字数:8400089 错误字数:19974339

 

26MMSeg4jSimpleSeg

分词速度:2355.5115 字符/毫秒

行数完美率:37.57%  行数错误率:62.42%  总的行数:2533688  完美行数:951909  错误行数:1581779

字数完美率:28.45% 字数错误率:71.54% 总的字数:28374428 完美字数:8074021 错误字数:20300407

 

27IKAnalyzer智能切分:

分词速度:319.28085 字符/毫秒

行数完美率:37.55%  行数错误率:62.44%  总的行数:2533686  完美行数:951638  错误行数:1582048

字数完美率:27.97% 字数错误率:72.02% 总的字数:28374416 完美字数:7938726 错误字数:20435690

 

28word分词正向最小匹配算法:

分词速度:2228.9465 字符/毫秒

行数完美率:36.7%  行数错误率:63.29%  总的行数:2533709  完美行数:930069  错误行数:1603640

字数完美率:26.72% 字数错误率:73.27% 总的字数:28374490 完美字数:7583741 错误字数:20790749

 

29JiebaINDEX

分词速度:861.55615 字符/毫秒

行数完美率:36.02%  行数错误率:63.97%  总的行数:2533709  完美行数:912771  错误行数:1620938

字数完美率:25.9% 字数错误率:74.09% 总的字数:28374490 完美字数:7351689 错误字数:21022801

 

30MMSeg4jMaxWordSeg

分词速度:1737.2491 字符/毫秒

行数完美率:34.27%  行数错误率:65.72%  总的行数:2533688  完美行数:868440  错误行数:1665248

字数完美率:25.2% 字数错误率:74.79% 总的字数:28374428 完美字数:7152898 错误字数:21221530

 

31IKAnalyzer细粒度切分:

分词速度:323.76926 字符/毫秒

行数完美率:18.87%  行数错误率:81.12%  总的行数:2533686  完美行数:478176  错误行数:2055510

字数完美率:10.93% 字数错误率:89.06% 总的字数:28374416 完美字数:3103178 错误字数:25271238

 

评估耗时:41分钟,42,725毫秒

 

重点说明:

       关于分词速度,这个不是绝对的,每次测试都会有些差距,而完美率是固定的,所以按行数完美率排名

       上面的评估报告中没有包括Stanford分词器和Paoding分词器

       当前代码已经移除了Paoding分词器,因为Paoding分词器已经7年没有维护了

       当前代码升级Stanford分词器到3.5.2,速度慢的无法等待评估完成,仅用于交互式效果对比

       下面是之前代码对 Paoding分词器2.0.4-beta Stanford分词器 3.3.1 的评估数据

 

Stanford Beijing Universitysegmentation

分词速度:14.4612055 字符/毫秒

行数完美率:58.29%  行数错误率:41.7%  总的行数:2533709  完美行数:1477034  错误行数:1056675

字数完美率:51.36% 字数错误率:48.63% 总的字数:28374490 完美字数:14574120 错误字数:13800370

 

Stanford Chinese Treebanksegmentation

分词速度:13.723294 字符/毫秒

行数完美率:55.45%  行数错误率:44.54%  总的行数:2533709  完美行数:1404968  错误行数:1128741

字数完美率:47.27% 字数错误率:52.72% 总的字数:28374490 完美字数:13414926 错误字数:14959564

 

Paoding MAX_WORD_LENGTH_MODE

分词速度:1343.1075 字符/毫秒

行数完美率:14.19%  行数错误率:85.8%  总的行数:2533158  完美行数:359637  错误行数:2173521

字数完美率:7.72% 字数错误率:92.27% 总的字数:28373102 完美字数:2191349 错误字数:26181753

 

Paoding MOST_WORDS_MODE

分词速度:1338.9246 字符/毫秒

行数完美率:11.6%  行数错误率:88.39%  总的行数:2533158  完美行数:294011  错误行数:2239147

字数完美率:5.92% 字数错误率:94.07% 总的字数:28373102 完美字数:1680261 错误字数:26692841

 

效果对比

1、以 我爱楚离陌 为例子:

word分词器 的分词结果:

    1、【全切分算法】 我 爱 楚离陌

    2、【双向最大最小匹配算法】 我 爱 楚离陌

    3、【最大Ngram分值算法】   我 爱 楚离陌

    4、【正向最大匹配算法】  我 爱 楚离陌

    5、【双向最大匹配算法】  我 爱 楚离陌

    6、【最少词数算法】  我 爱 楚离陌

    7、【逆向最大匹配算法】  我 爱 楚离陌

    8、【正向最小匹配算法】  我 爱 楚离陌

    9、【双向最小匹配算法】  我 爱 楚离陌

    10、【逆向最小匹配算法】 我 爱 楚离陌

Stanford分词器 的分词结果:

    1、【Stanford Chinese Treebanksegmentation 我爱 楚离陌

    2、【Stanford Beijing Universitysegmentation  我爱 楚 离陌

Ansj分词器 的分词结果:

    1、【BaseAnalysis  我 爱 楚 离 陌

    2、【IndexAnalysis 我 爱 楚 离 陌

    3、【ToAnalysis 我 爱 楚 离 陌

    4、【NlpAnalysis   我 爱 楚离 陌

HanLP分词器 的分词结果:

    1、【NLP分词】 我 爱 楚 离 陌

    2、【标准分词】  我 爱 楚 离 陌

    3、【N-最短路径分词】  我 爱 楚 离 陌

    4、【索引分词】  我 爱 楚 离 陌

    5、【最短路径分词】    我 爱 楚 离 陌

    6、【极速词典分词】    我 爱 楚 离 陌

smartcn分词器 的分词结果:

    1、【smartcn    我 爱 楚 离 陌

FudanNLP分词器 的分词结果:

    1、【FudanNLP   我 爱楚离陌

Jieba分词器 的分词结果:

    1、【SEARCH 我爱楚 离 陌

    2、【INDEX  我爱楚 离 陌

Jcseg分词器 的分词结果:

    1、【简易模式】   我 爱 楚 离 陌

    2、【复杂模式】   我 爱 楚 离 陌

MMSeg4j分词器 的分词结果:

    1、【SimpleSeg  我爱 楚 离 陌

    2、【ComplexSeg 我爱 楚 离 陌

    3、【MaxWordSeg 我爱 楚 离 陌

IKAnalyzer分词器 的分词结果:

    1、【智能切分】   我 爱 楚 离 陌

    2、【细粒度切分】 我 爱 楚 离 陌

2、以 结合成分子 为例子:

word分词器 的分词结果:

    1、【全切分算法】 结合 成 分子

    2、【双向最大最小匹配算法】 结 合成 分子

    3、【最大Ngram分值算法】   结合 成 分子

    4、【正向最大匹配算法】  结合 成分 子

    5、【双向最大匹配算法】  结 合成 分子

    6、【最少词数算法】  结合 成 分子

    7、【逆向最大匹配算法】  结 合成 分子

    8、【正向最小匹配算法】  结合 成分 子

    9、【双向最小匹配算法】  结 合成 分子

    10、【逆向最小匹配算法】 结 合成 分子

Stanford分词器 的分词结果:

    1、【Stanford Chinese Treebanksegmentation 结合成 分子

    2、【Stanford Beijing Universitysegmentation  结合成 分子

Ansj分词器 的分词结果:

    1、【BaseAnalysis  结合 成 分子

    2、【IndexAnalysis 结合 成 分子

    3、【ToAnalysis 结合 成 分子

    4、【NlpAnalysis   结合 成 分子

HanLP分词器 的分词结果:

    1、【NLP分词】   结合 成 分子

    2、【标准分词】   结合 成 分子

    3、【N-最短路径分词】    结合 成 分子

    4、【索引分词】   结合 成 分子

    5、【最短路径分词】  结合 成 分子

    6、【极速词典分词】  结合 成分 子

smartcn分词器 的分词结果:

    1、【smartcn    结合 成 分子

FudanNLP分词器 的分词结果:

    1、【FudanNLP   结合 成 分子

Jieba分词器 的分词结果:

    1、【SEARCH 结合 成 分子

    2、【INDEX  结合 成 分子

Jcseg分词器 的分词结果:

    1、【简易模式】   结合 成分 子

    2、【复杂模式】   结合 成 分子

MMSeg4j分词器 的分词结果:

    1、【SimpleSeg  结合 成分 子

    2、【ComplexSeg 结合 成分 子

    3、【MaxWordSeg 结合 成分 子

IKAnalyzer分词器 的分词结果:

    1、【智能切分】   结合 成 分子

    2、【细粒度切分】 结合 合成 成分 分子

速度对比

1HanLP分词器极速词典分词:

分词速度:5030.1978 字符/毫秒

 

2MMSeg4jMaxWordSeg

分词速度:2454.494 字符/毫秒

 

3MMSeg4jSimpleSeg

分词速度:2184.697 字符/毫秒

 

4word分词逆向最小匹配算法:

分词速度:1407.4127 字符/毫秒

 

5word分词正向最小匹配算法:

分词速度:1234.6848 字符/毫秒

 

6MMSeg4jComplexSeg

分词速度:1184.436 字符/毫秒

 

7Jcseg简易模式:

分词速度:1023.73364 字符/毫秒

 

8AnsjBaseAnalysis 基本分词:

分词速度:906.4427 字符/毫秒

 

9word分词双向最小匹配算法:

分词速度:833.2229 字符/毫秒

 

10JiebaSEARCH

分词速度:831.52246 字符/毫秒

 

11word分词逆向最大匹配算法:

分词速度:808.4246 字符/毫秒

 

12IKAnalyzer细粒度切分:

分词速度:735.4621 字符/毫秒

 

13HanLP分词器索引分词:

分词速度:664.67535 字符/毫秒

 

14word分词正向最大匹配算法:

分词速度:573.46375 字符/毫秒

 

15word分词双向最大匹配算法:

分词速度:539.6636 字符/毫秒

 

16JiebaINDEX

分词速度:507.40472 字符/毫秒

 

17word分词双向最大最小匹配算法:

分词速度:505.20273 字符/毫秒

 

18IKAnalyzer智能切分:

分词速度:483.90262 字符/毫秒

 

19HanLP分词器标准分词:

分词速度:461.43375 字符/毫秒

 

20AnsjIndexAnalysis 面向索引的分词:

分词速度:446.76096 字符/毫秒

 

21word分词最少词数算法:

分词速度:444.56738 字符/毫秒

 

22AnsjToAnalysis 精准分词:

分词速度:440.2442 字符/毫秒

 

23word分词最大Ngram分值算法:

分词速度:419.61484 字符/毫秒

 

24smartcn

分词速度:419.39886 字符/毫秒

 

25Jcseg复杂模式:

分词速度:391.21075 字符/毫秒

 

26HanLP分词器最短路径分词:

分词速度:288.55948 字符/毫秒

 

27HanLP分词器 NLP分词:

分词速度:251.66522 字符/毫秒

 

28AnsjNlpAnalysis NLP分词:

分词速度:174.01068 字符/毫秒

 

29word分词全切分算法:

分词速度:146.16898 字符/毫秒

 

30FudanNLP

分词速度:111.7975 字符/毫秒

 

31HanLP分词器 N-最短路径分词:

分词速度:67.67644 字符/毫秒

支持的分词器有:

1word分词器

2ansj分词器

3mmseg4j分词器

4ik-analyzer分词器

5jcseg分词器

6fudannlp分词器

7smartcn分词器

8jieba分词器

9stanford分词器

10hanlp分词器

 

 

 

参考文献:

[1]ansj分词工具https://github.com/NLPchina/ansj_seg 

[2] HanLP自然语言处理工具包https://github.com/hankcs/HanLP

[3] word分词工具https://github.com/ysc/word

[4] THULAC:一个高效的中文词法分析工具包https://github.com/thunlp/THULAC

[5] 盘古分词-开源中文分词组件 http://pangusegment.codeplex.com/

[6] Stanford汉语分词工具https://nlp.stanford.edu/software/segmenter.shtml

[7] 哈工大语言云 https://www.ltp-cloud.com/

[8] 中文分词器分词效果评估对比 https://github.com/ysc/cws_evaluation

 

 

 

 

你可能感兴趣的:(java,NLP)