前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >7个优秀的开源中文分词库推荐,实用性强!

7个优秀的开源中文分词库推荐,实用性强!

作者头像
一墨编程学习
发布2018-12-17 10:57:45
11.6K0
发布2018-12-17 10:57:45
举报
文章被收录于专栏:程序员的知识天地

纵观整个开源领域,陆陆续续做中文分词的也有不少,不过目前仍在维护的且质量较高的并不多。下面整理了一些个人认为比较优秀的中文分词库,以供大家参考使用。

1、jieba —— Python 中文分词组件

“结巴”中文分词,做最好的 Python 中文分词组件。

特性

  • 支持三种分词模式:
    • 精确模式,试图将句子最精确地切开,适合文本分析;
    • 全模式,把句子中所有的可以成词的词语都扫描出来, 速度非常快,但是不能解决歧义;
    • 搜索引擎模式,在精确模式的基础上,对长词再次切分,提高召回率,适合用于搜索引擎分词。

  • 支持繁体分词
  • 支持自定义词典

算法

  • 基于前缀词典实现高效的词图扫描,生成句子中汉字所有可能成词情况所构成的有向无环图 (DAG)
  • 采用了动态规划查找最大概率路径, 找出基于词频的最大切分组合
  • 对于未登录词,采用了基于汉字成词能力的 HMM 模型,使用了 Viterbi 算法

代码示例

代码语言:javascript
复制
# encoding=utf-8 import 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))

输出:

代码语言:javascript
复制
【全模式】: 我/ 来到/ 北京/ 清华/ 清华大学/ 华大/ 大学

【精确模式】: 我/ 来到/ 北京/ 清华大学

【新词识别】:他, 来到, 了, 网易, 杭研, 大厦    (此处,“杭研”并没有在词典中,但是也被Viterbi算法识别出来了)

【搜索引擎模式】: 小明, 硕士, 毕业, 于, 中国, 科学, 学院, 科学院, 中国科学院, 计算, 计算所, 后, 在, 日本, 京都, 大学, 日本京都大学, 深造

2、HanLP —— 汉语言处理包

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

HanLP提供下列功能:

  • 中文分词
    • HMM-Bigram(速度与精度最佳平衡;一百兆内存)
      • 最短路分词、N-最短路分词

    • 由字构词(侧重精度,可识别新词;适合NLP任务)
      • 感知机分词、CRF分词

    • 词典分词(侧重速度,每秒数千万字符;省内存)
      • 极速词典分词

    • 所有分词器都支持:
      • 索引全切分模式
      • 用户自定义词典
      • 兼容繁体中文
      • 训练用户自己的领域模型

  • 词性标注
    • HMM词性标注(速度快)
    • 感知机词性标注、CRF词性标注(精度高)

  • 命名实体识别
    • 基于HMM角色标注的命名实体识别 (速度快)
      • 中国人名识别、音译人名识别、日本人名识别、地名识别、实体机构名识别

    • 基于线性模型的命名实体识别(精度高)
      • 感知机命名实体识别、CRF命名实体识别

  • 关键词提取
    • TextRank关键词提取

  • 自动摘要
    • TextRank自动摘要

  • 短语提取
    • 基于互信息和左右信息熵的短语提取

  • 拼音转换
    • 多音字、声母、韵母、声调

  • 简繁转换
    • 简繁分歧词(简体、繁体、臺灣正體、中国香港繁體)

  • 文本推荐
    • 语义推荐、拼音推荐、字词推荐

  • 依存句法分析
    • 基于神经网络的高性能依存句法分析器
    • MaxEnt依存句法分析

  • 文本分类
    • 情感分析

  • word2vec
    • 词向量训练、加载、词语相似度计算、语义运算、查询、KMeans聚类
    • 文档语义相似度计算

  • 语料库工具
    • 默认模型训练自小型语料库,鼓励用户自行训练。所有模块提供训练接口,语料可参考OpenCorpus

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

2、HanLP —— 汉语言处理包

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

HanLP提供下列功能:

  • 中文分词
    • HMM-Bigram(速度与精度最佳平衡;一百兆内存)
      • 最短路分词、N-最短路分词

    • 由字构词(侧重精度,可识别新词;适合NLP任务)
      • 感知机分词、CRF分词

    • 词典分词(侧重速度,每秒数千万字符;省内存)
      • 极速词典分词

    • 所有分词器都支持:
      • 索引全切分模式
      • 用户自定义词典
      • 兼容繁体中文
      • 训练用户自己的领域模型

  • 词性标注
    • HMM词性标注(速度快)
    • 感知机词性标注、CRF词性标注(精度高)

  • 命名实体识别
    • 基于HMM角色标注的命名实体识别 (速度快)
      • 中国人名识别、音译人名识别、日本人名识别、地名识别、实体机构名识别

    • 基于线性模型的命名实体识别(精度高)
      • 感知机命名实体识别、CRF命名实体识别

  • 关键词提取
    • TextRank关键词提取

  • 自动摘要
    • TextRank自动摘要

  • 短语提取
    • 基于互信息和左右信息熵的短语提取

  • 拼音转换
    • 多音字、声母、韵母、声调

  • 简繁转换
    • 简繁分歧词(简体、繁体、臺灣正體、中国香港繁體)

  • 文本推荐
    • 语义推荐、拼音推荐、字词推荐

  • 依存句法分析
    • 基于神经网络的高性能依存句法分析器
    • MaxEnt依存句法分析

  • 文本分类
    • 情感分析

  • word2vec
    • 词向量训练、加载、词语相似度计算、语义运算、查询、KMeans聚类
    • 文档语义相似度计算

  • 语料库工具
    • 默认模型训练自小型语料库,鼓励用户自行训练。所有模块提供训练接口,语料可参考OpenCorpus

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

3、Jcseg —— 轻量级 Java 中文分词器

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 模式:继承自复杂模式,更改了数字,单位等词条的组合方式,增加电子邮件,大陆手机号码,网址,人名,地名,货币等以及无限种自定义实体的识别与返回。

4、sego —— Go 中文分词

sego 是一个 Go 中文分词库,词典用双数组 trie(Double-Array Trie)实现, 分词器算法为基于词频的最短路径加动态规划。

支持普通和搜索引擎两种分词模式,支持用户词典、词性标注,可运行 JSON RPC 服务

分词速度单线程 9MB/s,goroutines 并发 42MB/s(8核 Macbook Pro)。

示例代码:

代码语言:javascript
复制
package main import ( "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)) 
}

5、 FoolNLTK —— 可能是最准的开源中文分词

中文处理工具包

特点

  • 可能不是最快的开源中文分词,但很可能是最准的开源中文分词
  • 基于 BiLSTM 模型训练而成
  • 包含分词,词性标注,实体识别, 都有比较高的准确率
  • 用户自定义词典
  • 可训练自己的模型
  • 批量处理

定制自己的模型

代码语言:javascript
复制
get clone https://github.com/rockyzhengwu/FoolNLTK.git cd FoolNLTK/train

分词

代码语言:javascript
复制
import fool

text = "一个傻子在北京" print(fool.cut(text)) # ['一个', '傻子', '在', '北京']

6、Ansj 中文分词 —— 基于 n-Gram+CRF+HMM 的中文分词的 Java 实现

Ansj 中文分词是一个基于 n-Gram+CRF+HMM 的中文分词的 java 实现。分词速度达到每秒钟大约200万字左右(mac air下测试),准确率能达到96%以上。目前实现了中文分词、中文姓名识别、用户自定义词典、关键字提取、自动摘要、关键字标记等功能,可以应用到自然语言处理等方面,适用于对分词效果要求高的各种项目。

下面是一个简单的分词效果,仅做参考:

代码语言:javascript
复制
[脚下/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]

7、word 分词 —— Java 分布式中文分词组件

word 分词是一个 Java 实现的分布式的中文分词组件,提供了多种基于词典的分词算法,并利用 ngram 模型来消除歧义。能准确识别英文、数字,以及日期、时间等数量词,能识别人名、地名、组织机构名等未登录词。能通过自定义配置文件来改变组件行为,能自定义用户词库、自动检测词库变化、支持大规模分布式环境,能灵活指定多种分词算法,能使用refine功能灵活控制分词结果,还能使用词频统计、词性标注、同义标注、反义标注、拼音标注等功能。提供了10种分词算法,还提供了10种文本相似度算法,同时还无缝和 Lucene、Solr、ElasticSearch、Luke 集成。注意:word1.3 需要 JDK1.8 。

分词算法效果评估:

代码语言:javascript
复制
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
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2018.11.23 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1、jieba —— Python 中文分词组件
  • 2、HanLP —— 汉语言处理包
  • 2、HanLP —— 汉语言处理包
  • 3、Jcseg —— 轻量级 Java 中文分词器
  • 4、sego —— Go 中文分词
  • 5、 FoolNLTK —— 可能是最准的开源中文分词
  • 6、Ansj 中文分词 —— 基于 n-Gram+CRF+HMM 的中文分词的 Java 实现
  • 7、word 分词 —— Java 分布式中文分词组件
相关产品与服务
NLP 服务
NLP 服务(Natural Language Process,NLP)深度整合了腾讯内部的 NLP 技术,提供多项智能文本处理和文本生成能力,包括词法分析、相似词召回、词相似度、句子相似度、文本润色、句子纠错、文本补全、句子生成等。满足各行业的文本智能需求。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档