中文分词方法和软件工具汇总笔记

中文分词方法和软件工具汇总笔记

本文与前一篇文章《自然语言处理NLP知识和产品的笔记》属于同一个系列,前文已经提到,这是GooSeeker团队在开发中文文本分析软件新版本过程中的学习笔记,所以,再次提醒,下面所整理的内容,尤其是概念间的关系,可能是不严谨的。整个内容肯定是不完备的,只是共享给大家作为探索的线索。

在中文文本分析领域我已经工作了10多年,结合公司的网络爬虫产品,完成了一系列解决方案,比如,舆情分析、消费者心理行为分析(消费者洞察)、法规和政策分析、智慧城市数据平台建设等等。在这10多年来,如果不断给中文分词工具做排行榜的话,发现位次变化很快。所以,在软件工程项目实施中,要不断观察新方法、新软件。在某个时期最优秀的软件很快就被其他软件超越了,超越和前进是好的,但是,有时候是很遗憾的,因为往往是那个分词工具的发布者不再持续维护了。

文章最后还整理汇总了一些常用的词云图工具,觉得有用的可以收藏一下。

1,分词难点

1.1,分词算法

有多种分词算法,会得到不同的分词结果,会对下游的软件产生影响

1.2,未登录词识别

如何识别未登录词 OOV

1.3,歧义

  • 组合型歧义;
  • 交集型歧义;
  • 真歧义;

2,分词方法

2.1,基于词典

(1)正向最大匹配法 FMM:对文本从左至右切出最长的词

(2)逆向最大匹配法 BMM:对文本从右至左切出最长的词

(3)N-最短路径方法

(4)双向匹配分词法:由左到右、由右到左两次扫描

缺点:对歧义和未登录词处理不好。

2.2,机器学习

(1)隐马尔科夫模型 HMM

(2)条件随机场模型 CRF

(3)最大熵模型 ME

(4)N元文法模型 N-gram

(5)支持向量机 SVM

(6)深度学习

  • 基于神经网络的分词器
  • textCNN
  • 序列到序列模型 seq2seq
  • 注意力机制 Attention Mechanism
  • BERT模型

缺点:训练集需要大量人工标注语料、整理统计特征。

优点:不仅考虑词频,还考虑上下文,可有效消除歧义、识别未登录词。

2.3,其他相关知识

(1)词向量转换/特征降维

  • 词嵌入 Word2Vec
  • 连续词袋模型 CBOW
  • Skip-gram
  • 子词嵌入 FastText
  • 全局向量词嵌入 GloVe

(2)TF-IDF

TF 表示某个词语在一个语料中出现的频次;DF 表示在全部语料中,共有多少个语料出现了这个词,IDF 是DF的倒数(取log);TF- IDF 越大,表示这个词越重要。

常用于关键词提取。

(3)TextRank

根据词语之间的邻近关系构建网络,通过PageRank迭代计算出词语的排名;

常用于关键词提取、自动摘要提取。

3,分词软件和云服务

3.1,开源或者免费

(1)Hanlp分词器

hankcs/HanLPgithub.com

最短路径分词,有中文分词、词性标注、新词识别、命名实体识别、自动摘要、文本聚类、情感分析、词向量word2vec等功能,支持自定义词典;

采用HMM、CRF、TextRank、word2vec、聚类、神经网络等算法;

支持Java,C++,Python语言;

(2)结巴分词

yanyiwu/cppjiebagithub.com图标

找出基于词频的最大切分组合,有中文分词、关键词提取、词性标注功能,支持自定义词典;

采用HMM模型、 Viterbi算法;

支持Java,C++,Python语言;

(3)哈工大的LTP

HIT-SCIR/ltpgithub.com图标

有中文分词、词性标注、句法分析等功能;

商用需付费;调用接口,每秒请求的次数有限制;

编写语言有C++、Python、Java版;

(4)清华大学THULAC

thunlp/THULACgithub.com图标

有中文分词、词性标注功能;

有Java、Python和C++版本;

(5)北京大学 pkuseg

lancopku/pkuseg-pythongithub.com图标

支持按领域分词、有词性标注功能、支持用户自训练模型;

基于CRF模型、自研的ADF训练方法;

有python版本;

(6)斯坦福分词器

The Stanford Natural Language Processing Groupnlp.stanford.edu

支持多语言分词包括中英文,提供训练模型接口,也可用已有模型,但速度较慢;

Java实现的CRF算法;

(7)KCWS分词器

koth/kcwsgithub.com图标

有中文分词、词性标注功能,支持自定义词典;

采用word2vec、Bi-LSTM、CRF算法;

(8)ZPar

frcchang/zpargithub.com图标

有中文、英文、西班牙语分词、词性标注;

C++语言编写;

(9)IKAnalyzer

wks/ik-analyzergithub.com图标

有中文分词功能,支持自定义词典;

(10)Jcseg

狮子的魂/jcseggitee.com

有中文分词、关键词提取、自动摘要、词性标注、实体识别等功能,支持自定义词典;

基于mmseg、textRank、BM25等算法;

(11)FudanNLP

FudanNLP/fnlpgithub.com图标

中文分词 词性标注 实体名识别 关键词抽取等;

(12)SnowNLP

isnowfy/snownlpgithub.com图标

有中文分词、词性标注、情感分析、文本分类、提取关键词等功能;

基于HMM、Naive Bayes、TextRank、tf-idf等算法;

Python类库;

(13)ansj分词器

NLPchina/ansj_seggithub.com图标

有中文分词、人名识别、词性标注、用户自定义词典等功能;

基于n-Gram+CRF+HMM算法;

(14)NLTK

nltk/nltkgithub.com图标

擅长英文分词,也支持中文分词处理,但建议先用其他分词工具对中文语料分词,再用它的处理功能;

python库;

(15)庖丁解牛

https://code.google.com/p/paodingcode.google.com

3.2,其他

(1)中科院计算所NLPIR

具有分词、词性标注、新词识别、命名实体识别、情感分析、关键词提取等功能,支持自定义词典;

(2)腾讯文智

(3)BosonNLP

(4)百度NLP

(5)阿里云NLP

(6)新浪云

(7)盘古分词

具有中英文分词功能,支持自定义词典;

4,词云图制作工具

(1)Wordart

(2)Tagul

(3)Wordle

(4)WordItOut

(5)Tagxedo

(6)Tocloud

(7)图悦

(8)office的PPT插件Pro Word Cloud

(9)BDP个人版

参考资料:

有哪些比较好的中文分词方案?

Pan Yang:五款中文分词工具在线PK: Jieba, SnowNLP, PkuSeg,THULAC, HanLP

无猫之徒:中文分词算法简介

湖心小笨酸:中文分词(CWS)综述

灰灰:干货 | 史上最全中文分词工具整理

老宋的茶书会:深度学习时代,分词真的有必要吗

如何生成关键词云图?

编辑于 2019-10-12

文章被以下专栏收录

    太多人在探索网络爬虫了,而且一波接一波采用多种主流编程语言,投入总量是巨大的,我们要探索一条经济有效的路线,让更多的开发者把时间节省下来,放在数据清洗、数据建模、数据可视化展现上,以及更尖端的知识管理和人工智能实践。目前将专注于智慧城市的时空分析数据库