目前优秀的开源中文分词库你知道几个?
Posted 模板家
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了目前优秀的开源中文分词库你知道几个?相关的知识,希望对你有一定的参考价值。
中文分词是中文文本处理的基础步骤,也是中文人机自然语言交互的基础模块。由于中文句子中没有词的界限,因此在进行中文自然语言处理时,通常需要先进行分词。
纵观整个开源领域,陆陆续续做中文分词的也有不少,不过目前仍在维护的且质量较高的并不多。下面整理了一些个人认为比较优秀的中文分词库,以供大家参考使用。
“结巴”中文分词,做最好的 Python 中文分词组件。
特性
支持三种分词模式:
精确模式,试图将句子最精确地切开,适合文本分析;
全模式,把句子中所有的可以成词的词语都扫描出来, 速度非常快,但是不能解决歧义;
搜索引擎模式,在精确模式的基础上,对长词再次切分,提高召回率,适合用于搜索引擎分词。
支持繁体分词
支持自定义词典
算法
基于前缀词典实现高效的词图扫描,生成句子中汉字所有可能成词情况所构成的有向无环图 (DAG)
采用了动态规划查找最大概率路径, 找出基于词频的最大切分组合
对于未登录词,采用了基于汉字成词能力的 HMM 模型,使用了 Viterbi 算法
代码示例
# encoding=utf-8import jieba
seg_list = jieba.cut("我来到北京清华大学", cut_all=True)
print("Full Mode: " + "/ ".join(seg_list)) # 全模式seg_list = jieba.cut("我来到北京清华大学", cut_all=False)
print("Default Mode: " + "/ ".join(seg_list)) # 精确模式seg_list = jieba.cut("他来到了网易杭研大厦") # 默认是精确模式print(", ".join(seg_list))
seg_list = jieba.cut_for_search("小明硕士毕业于中国科学院计算所,后在日本京都大学深造") # 搜索引擎模式print(", ".join(seg_list))
输出:
【全模式】: 我/ 来到/ 北京/ 清华/ 清华大学/ 华大/ 大学
【精确模式】: 我/ 来到/ 北京/ 清华大学
【新词识别】:他, 来到, 了, 网易, 杭研, 大厦 (此处,“杭研”并没有在词典中,但是也被Viterbi算法识别出来了)
【搜索引擎模式】: 小明, 硕士, 毕业, 于, 中国, 科学, 学院, 科学院, 中国科学院, 计算, 计算所, 后, 在, 日本, 京都, 大学, 日本京都大学, 深造
HanLP是一系列模型与算法组成的NLP工具包,由大快搜索主导并完全开源,目标是普及自然语言处理在生产环境中的应用。HanLP具备功能完善、性能高效、架构清晰、语料时新、可自定义的特点。
HanLP提供下列功能:
中文分词
索引全切分模式
用户自定义词典
兼容繁体中文
训练用户自己的领域模型
极速词典分词
感知机分词、CRF分词
最短路分词、N-最短路分词
HMM-Bigram(速度与精度最佳平衡;一百兆内存)
由字构词(侧重精度,可识别新词;适合NLP任务)
词典分词(侧重速度,每秒数千万字符;省内存)
所有分词器都支持:
词性标注
HMM词性标注(速度快)
感知机词性标注、CRF词性标注(精度高)
命名实体识别
感知机命名实体识别、CRF命名实体识别
中国人名识别、音译人名识别、日本人名识别、地名识别、实体机构名识别
基于HMM角色标注的命名实体识别 (速度快)
基于线性模型的命名实体识别(精度高)
关键词提取
TextRank关键词提取
自动摘要
TextRank自动摘要
短语提取
基于互信息和左右信息熵的短语提取
拼音转换
多音字、声母、韵母、声调
简繁转换
简繁分歧词(简体、繁体、臺灣正體、香港繁體)
文本推荐
语义推荐、拼音推荐、字词推荐
依存句法分析
基于神经网络的高性能依存句法分析器
MaxEnt依存句法分析
文本分类
情感分析
word2vec
词向量训练、加载、词语相似度计算、语义运算、查询、KMeans聚类
文档语义相似度计算
语料库工具
默认模型训练自小型语料库,鼓励用户自行训练。所有模块提供训练接口,语料可参考OpenCorpus。
在提供丰富功能的同时,HanLP内部模块坚持低耦合、模型坚持惰性加载、服务坚持静态提供、词典坚持明文发布,使用非常方便,同时自带一些语料处理工具,帮助用户训练自己的模型。
Jcseg 是基于 mmseg 算法的一个轻量级中文分词器,同时集成了关键字提取,关键短语提取,关键句子提取和文章自动摘要等功能,并且提供了一个基于 Jetty 的 web 服务器,方便各大语言直接 http 调用,同时提供了最新版本的 lucene, solr, elasticsearch 的分词接口!Jcseg 自带了一个 jcseg.properties 文件用于快速配置而得到适合不同场合的分词应用,例如:最大匹配词长,是否开启中文人名识别,是否追加拼音,是否追加同义词等!
核心功能:
中文分词:mmseg 算法 + Jcseg 独创的优化算法,四种切分模式。
关键字提取:基于 textRank 算法。
关键短语提取:基于 textRank 算法。
关键句子提取:基于 textRank 算法。
文章自动摘要:基于 BM25+textRank 算法。
自动词性标注:基于词库+(统计歧义去除计划),目前效果不是很理想,对词性标注结果要求较高的应用不建议使用。
命名实体标注:基于词库+(统计歧义去除计划),电子邮件,网址,大陆手机号码,地名,人名,货币,datetime 时间,长度,面积,距离单位等。
Restful api:嵌入 jetty 提供了一个绝对高性能的 server 模块,包含全部功能的http接口,标准化 json 输出格式,方便各种语言客户端直接调用。
中文分词模式:
六种切分模式
(1).简易模式:FMM 算法,适合速度要求场合。
(2).复杂模式:MMSEG 四种过滤算法,具有较高的歧义去除,分词准确率达到了 98.41%。
(3).检测模式:只返回词库中已有的词条,很适合某些应用场合。
(4).检索模式:细粒度切分,专为检索而生,除了中文处理外(不具备中文的人名,数字识别等智能功能)其他与复杂模式一致(英文,组合词等)。
(5).分隔符模式:按照给定的字符切分词条,默认是空格,特定场合的应用。
(6).NLP 模式:继承自复杂模式,更改了数字,单位等词条的组合方式,增加电子邮件,大陆手机号码,网址,人名,地名,货币等以及无限种自定义实体的识别与返回。
sego 是一个 Go 中文分词库,词典用双数组 trie(Double-Array Trie)实现, 分词器算法为基于词频的最短路径加动态规划。
支持普通和搜索引擎两种分词模式,支持用户词典、词性标注,可运行 JSON RPC 服务。
分词速度单线程 9MB/s,goroutines 并发 42MB/s(8核 Macbook Pro)。
示例代码:
package mainimport ( "fmt"
"github.com/huichen/sego")func main() { // 载入词典
var segmenter sego.Segmenter
segmenter.LoadDictionary("github.com/huichen/sego/data/dictionary.txt") // 分词
text := []byte("中华人民共和国中央人民政府")
segments := segmenter.Segment(text) // 处理分词结果
// 支持普通模式和搜索模式两种分词,见代码中SegmentsToString函数的注释。
fmt.Println(sego.SegmentsToString(segments, false))
}
中文处理工具包
特点
可能不是最快的开源中文分词,但很可能是最准的开源中文分词
基于 BiLSTM 模型训练而成
包含分词,词性标注,实体识别, 都有比较高的准确率
用户自定义词典
可训练自己的模型
批量处理
定制自己的模型
get clone https://github.com/rockyzhengwu/FoolNLTK.gitcd FoolNLTK/train
分词
import fool
text = "一个傻子在北京"print(fool.cut(text))# ['一个', '傻子', '在', '北京']
Ansj 中文分词是一个基于 n-Gram+CRF+HMM 的中文分词的 java 实现。分词速度达到每秒钟大约200万字左右(mac air下测试),准确率能达到96%以上。目前实现了中文分词、中文姓名识别、用户自定义词典、关键字提取、自动摘要、关键字标记等功能,可以应用到自然语言处理等方面,适用于对分词效果要求高的各种项目。
下面是一个简单的分词效果,仅做参考:
[脚下/f, 的/uj, 一大/j, 块/q, 方砖/n, 地面/n]
[长春/ns, 市长/n, 春节/t, 讲话/n]
[结婚/v, 的/uj, 和/c, 尚未/d, 结婚/v, 的/uj]
[结合/v, 成/v, 分子/n, 时/ng]
[旅游/vn, 和/c, 服务/vn, 是/v, 最/d, 好/a, 的/uj]
[邓颖/nr, 超生/v, 前/f, 最/d, 喜欢/v, 的/uj, 一个/m, 东西/n]
[中国/ns, 航天/n, 官员/n, 应邀/v, 到/v, 美国/ns, 与/p, 太空/s, 总署/n, 官员/n, 开会/v]
[上海/ns, 大学城/n, 书店/n]
[北京/ns, 大/a, 学生/n, 前来/v, 应聘/v]
[中外/j, 科学/n, 名著/n]
[为/p, 人民/n, 服务/vn]
[独立自主/i, 和/c, 平等互利/l, 的/uj, 原则/n]
[为/p, 人民/n, 办/v, 公益/n]
[这/r, 事/n, 的/uj, 确定/v, 不/d, 下来/v]
[费孝/nr, 通向/v, 人大常委会/nt, 提交/v, 书面/b, 报告/n]
[aaa/en, 分/q, 事实上/l, 发货/v, 丨/null, 和/c, 无/v, 哦/e, 喝/vg, 完/v, 酒/n]
[不好意思/a, 清清爽爽/z]
[长春市/ns, 春节/t, 讲话/n]
[中华人民共和国/ns, 万岁/n, 万岁/n, 万万岁/n]
[检察院/n, 鲍绍/nr, 检察长/n, 就是/d, 在/p, 世/ng, 诸葛/nr, ./m, 像/v, 诸葛亮/nr, 一样/u, 聪明/a]
[长春市/ns, 长春/ns, 药店/n]
[乒乓球拍/n, 卖/v, 完/v, 了/ul]
[计算机/n, 网络管理员/n, 用/p, 虚拟机/userDefine, 实现/v, 了/ul, 手机/n, 游戏/n, 下载/v, 和/c, 开源/v, 项目/n, 的/uj, 管理/vn, 金山/nz, 毒霸/nz]
[长春市/ns, 长春/ns, 药店/n]
[胡锦涛/nr, 与/p, 神/n, 九/m, 航天员/n, 首次/m, 实现/v, 天地/n, 双向/d, 视频/n, 通话/v]
[mysql/en, 不/d, 支持/v, /null, 同台/v, 机器/n, 两个/m, mysql/en, 数据库/n, 之间/f, 做/v, 触发器/n]
[孙建/nr, 是/v, 一个/m, 好/a, 人/n, ./m, 他/r, 和/c, 蔡晴/nr, 是/v, 夫妻/n, 两/m, /null, ,/null, 对于/p, 每/r, 一本/m, 好书/n, 他/r, 都/d, 原意/n, 一一/d, 读取/v, ../m, 他们/r, 都/d, 很/d, 喜欢/v, 元宵/n, ./m, 康燕/nr, 和/c, 他们/r, 住/v, 在/p, 一起/s, ./m, 我/r, 和/c, 马春亮/nr, ,/null, 韩鹏飞/nr, 都/d, 是/v, 好/a, 朋友/n, ,/null, 不/d, 知道/v, 什么/r, 原因/n]
[一年/m, 有/v, 三百六十五个/m, 日出/v, /null, 我/r, 送/v, 你/r, 三百六十五个/m, 祝福/vn, /null, 时钟/n, 每天/r, 转/v, 了/ul, 一千四百四十圈/m, 我/r, 的/uj, 心/n, 每天/r, 都/d, 藏/v, 着/uz, /null, 一千四百四十多个/m, 思念/v, /null, 每/r, 一天/m, 都/d, 要/v, 祝/v, 你/r, 快快乐乐/z, /null, /null, 每/r, 一分钟/m, 都/d, 盼望/v, 你/r, 平平安安/z, /null, 吉祥/n, 的/uj, 光/n, 永远/d, 环绕/v, 着/uz, 你/r, /null, 像/v, 那/r, 旭日东升/l, 灿烂/a, 无比/z, /null]
[学校/n, 学费/n, 要/v, 一次性/d, 交/v, 一千元/m]
[发展/vn, 中国/ns, 家庭/n, 养猪/v, 事业/n]
[安徽省/ns, 是/v, 一个/m, 发展/vn, 中/f, 的/uj, 省/n]
[北京理工大学/nt, 办事处/n]
word 分词是一个 Java 实现的分布式的中文分词组件,提供了多种基于词典的分词算法,并利用 ngram 模型来消除歧义。能准确识别英文、数字,以及日期、时间等数量词,能识别人名、地名、组织机构名等未登录词。能通过自定义配置文件来改变组件行为,能自定义用户词库、自动检测词库变化、支持大规模分布式环境,能灵活指定多种分词算法,能使用refine功能灵活控制分词结果,还能使用词频统计、词性标注、同义标注、反义标注、拼音标注等功能。提供了10种分词算法,还提供了10种文本相似度算法,同时还无缝和 Lucene、Solr、ElasticSearch、Luke 集成。注意:word1.3 需要 JDK1.8 。
分词算法效果评估:
1、word分词 最大Ngram分值算法:
分词速度:370.9714 字符/毫秒
行数完美率:66.55% 行数错误率:33.44% 总的行数:2533709 完美行数:1686210 错误行数:847499
字数完美率:60.94% 字数错误率:39.05% 总的字数:28374490 完美字数:17293964 错误字数:11080526
2、word分词 最少词数算法:
分词速度:330.1586 字符/毫秒
行数完美率:65.67% 行数错误率:34.32% 总的行数:2533709 完美行数:1663958 错误行数:869751
字数完美率:60.12% 字数错误率:39.87% 总的字数:28374490 完美字数:17059641 错误字数:11314849
3、word分词 全切分算法:
分词速度:62.960262 字符/毫秒
行数完美率:57.2% 行数错误率:42.79% 总的行数:2533709 完美行数:1449288 错误行数:1084421
字数完美率:47.95% 字数错误率:52.04% 总的字数:28374490 完美字数:13605742 错误字数:14768748
4、word分词 双向最大最小匹配算法:
分词速度:462.87158 字符/毫秒
行数完美率:53.06% 行数错误率:46.93% 总的行数:2533709 完美行数:1344624 错误行数:1189085
字数完美率:43.07% 字数错误率:56.92% 总的字数:28374490 完美字数:12221610 错误字数:16152880
5、word分词 双向最小匹配算法:
分词速度:967.68604 字符/毫秒
行数完美率:46.34% 行数错误率:53.65% 总的行数:2533709 完美行数:1174276 错误行数:1359433
字数完美率:36.07% 字数错误率:63.92% 总的字数:28374490 完美字数:10236574 错误字数:18137916
6、word分词 双向最大匹配算法:
分词速度:661.148 字符/毫秒
行数完美率:46.18% 行数错误率:53.81% 总的行数:2533709 完美行数:1170075 错误行数:1363634
字数完美率:35.65% 字数错误率:64.34% 总的字数:28374490 完美字数:10117122 错误字数:18257368
7、word分词 正向最大匹配算法:
分词速度:1567.1318 字符/毫秒
行数完美率:41.88% 行数错误率:58.11% 总的行数:2533709 完美行数:1061189 错误行数:1472520
字数完美率:31.35% 字数错误率:68.64% 总的字数:28374490 完美字数:8896173 错误字数:19478317
8、word分词 逆向最大匹配算法:
分词速度:1232.6017 字符/毫秒
行数完美率:41.69% 行数错误率:58.3% 总的行数:2533709 完美行数:1056515 错误行数:1477194
字数完美率:30.98% 字数错误率:69.01% 总的字数:28374490 完美字数:8792532 错误字数:19581958
9、word分词 逆向最小匹配算法:
分词速度:1936.9575 字符/毫秒
行数完美率:41.42% 行数错误率:58.57% 总的行数:2533709 完美行数:1049673 错误行数:1484036
字数完美率:31.34% 字数错误率:68.65% 总的字数:28374490 完美字数:8893622 错误字数:19480868
10、word分词 正向最小匹配算法:
分词速度:2228.9465 字符/毫秒
行数完美率:36.7% 行数错误率:63.29% 总的行数:2533709 完美行数:930069 错误行数:1603640
字数完美率:26.72% 字数错误率:73.27% 总的字数:28374490 完美字数:7583741 错误字数:20790749
以上是关于目前优秀的开源中文分词库你知道几个?的主要内容,如果未能解决你的问题,请参考以下文章
GitHub上有38.8K 的stars Android 开源库你知道是那个吗?