本文首先介绍下中文分词基本原理,然后介绍下国内比较流行的中文分词工具,如jiebaSnowNLPTHULACNLPIR,上述分词工具都已经在github上开源,后续也会附上github链接,以供参考。

1.中文分词原理介绍

1.1 中文分词概述

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

1.2 中文分词方法介绍

现有的分词方法可分为三大类:基于字符串匹配的分词方法基于理解的分词方法基于统计的分词方法

1.2.1 基于字符串匹配的分词方法

基于字符串匹配的分词方法又称机械分词方法,它是按照一定的策略待分析的汉字串与一个“充分大的”机器词典中的词条进行配,若在词典中找到某个字符串,则匹配成功(识别出一个词)。

按照扫描方向的不同,字符串匹配分词方法可以分为正向匹配逆向匹配;按照不同长度优先匹配的情况,可以分为最大(最长)匹配最小(最短)匹配;按照是否与词性标注过程相结合,可以分为单纯分词方法分词与词性标注相结合的一体化方法。常用的字符串匹配方法有如下几种:

(1)正向最大匹配法(从左到右的方向);

(2)逆向最大匹配法(从右到左的方向);

(3)最小切分(每一句中切出的词数最小);

(4)双向最大匹配(进行从左到右、从右到左两次扫描)

这类算法的优点是速度快,时间复杂度可以保持在O(n),实现简单,效果尚可;但对歧义未登录词处理效果不佳。

1.2.2 基于理解的分词方法

基于理解的分词方法通过让计算机模拟人对句子的理解,达到识别词的效果。其基本思想就是在分词的同时进行句法、语义分析,利用句法信息语义信息处理歧义现象。它通常包括三个部分:分词子系统句法语义子系统总控部分。在总控部分的协调下,分词子系统可以获得有关词、句子等的句法和语义信息来对分词歧义进行判断,即它模拟了人对句子的理解过程。这种分词方法需要使用大量的语言知识和信息。由于汉语语言知识的笼统、复杂性,难以将各种语言信息组织成机器可直接读取的形式,因此目前基于理解的分词系统还处在试验阶段

1.2.3 基于统计的分词方法

基于统计的分词方法是在给定大量已经分词的文本的前提下,利用统计机器学习模型学习词语切分的规律(称为训练),从而实现对未知文本的切分。例如最大概率分词方法最大熵分词方法等。随着大规模语料库的建立,统计机器学习方法的研究和发展,基于统计的中文分词方法渐渐成为了主流方法

主要的统计模型有:N元文法模型(N-gram),隐马尔可夫模型(Hidden Markov Model ,HMM),最大熵模型(ME),条件随机场模型(Conditional Random Fields,CRF)等。

在实际的应用中,基于统计的分词系统都需要使用分词词典进行字符串匹配分词,同时使用统计方法识别一些新词,即将字符串频率统计字符串匹配结合起来,既发挥匹配分词切分速度快、效率高的特点,又利用了无词典分词结合上下文识别生词、自动消除歧义的优点

2.中文分词工具介绍

2.1 jieba (github star数 9003)

jieba分词是国内使用人数最多的中文分词工具(github链接:https://github.com/fxsjy/jieba)。jieba分词支持三种模式

(1)精确模式:试图将句子最精确地切开,适合文本分析

(2)全模式:把句子中所有的可以成词的词语都扫描出来, 速度非常快,但是不能解决歧义

(3)搜索引擎模式:在精确模式的基础上,对长词再次切分,提高召回率适合用于搜索引擎分词

jieba分词过程中主要涉及如下几种算法:

(1)基于前缀词典实现高效的词图扫描,生成句子中汉字所有可能成词情况所构成的有向无环图 (DAG);

(2)采用了动态规划查找最大概率路径, 找出基于词频的最大切分组合

(3)对于未登录词,采用了基于汉字成词能力的 HMM 模型,采用Viterbi 算法进行计算;

(4)基于Viterbi算法做词性标注

(5)基于tf-idftextrank模型抽取关键词

测试代码如下所示:

# -*- coding: utf-8 -*-
"""
jieba分词测试
"""import jieba#全模式
test1 = jieba.cut("杭州西湖风景很好,是旅游胜地!", cut_all=True)
print("全模式: " + "| ".join(test1))#精确模式
test2 = jieba.cut("杭州西湖风景很好,是旅游胜地!", cut_all=False)
print("精确模式: " + "| ".join(test2))#搜索引擎模式
test3= jieba.cut_for_search("杭州西湖风景很好,是旅游胜地,每年吸引大量前来游玩的游客!")
print("搜索引擎模式:" + "| ".join(test3))
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20

测试结果如下图所示:

2.2 SnowNLP(github star数 2043)

SnowNLP是一个python写的类库(https://github.com/isnowfy/snownlp),可以方便的处理中文文本内容,是受到了TextBlob的启发而写的。SnowNLP主要包括如下几个功能:

(1)中文分词(Character-Based Generative Model);

(2)词性标注(3-gram HMM);

(3)情感分析(简单分析,如评价信息);

(4)文本分类(Naive Bayes)

(5)转换成拼音(Trie树实现的最大匹配)

(6)繁简转换(Trie树实现的最大匹配)

(7)文本关键词文本摘要提取(TextRank算法)

(8)计算文档词频TF,Term Frequency)和逆向文档频率IDF,Inverse Document Frequency)

(9)Tokenization(分割成句子)

(10)文本相似度计算(BM25)

SnowNLP的最大特点是特别容易上手,用其处理中文文本时能够得到不少有意思的结果,但不少功能比较简单,还有待进一步完善。

测试代码如下所示:

# -*- coding: utf-8 -*-
"""
SnowNLP测试
"""from snownlp import SnowNLPs = SnowNLP(u'杭州西湖风景很好,是旅游胜地,每年吸引大量前来游玩的游客!')#分词
print(s.words)#情感词性计算
print("该文本的情感词性为正的概率:" + str(s.sentiments))text = u'''
西湖,位于浙江省杭州市西面,是中国大陆首批国家重点风景名胜区和中国十大风景名胜之一。
它是中国大陆主要的观赏性淡水湖泊之一,也是现今《世界遗产名录》中少数几个和中国唯一一个湖泊类文化遗产。
西湖三面环山,面积约6.39平方千米,东西宽约2.8千米,南北长约3.2千米,绕湖一周近15千米。
湖中被孤山、白堤、苏堤、杨公堤分隔,按面积大小分别为外西湖、西里湖、北里湖、小南湖及岳湖等五片水面,
苏堤、白堤越过湖面,小瀛洲、湖心亭、阮公墩三个小岛鼎立于外西湖湖心,夕照山的雷峰塔与宝石山的保俶塔隔湖相映,
由此形成了“一山、二塔、三岛、三堤、五湖”的基本格局。
'''s2 = SnowNLP(text)#文本关键词提取
print(s2.keywords(10))
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30

测试结果如下图所示:

2.3 THULAC (github star数 311)

THULAC(THU Lexical Analyzer for Chinese)由清华大学自然语言处理与社会人文计算实验室研制推出的一套中文词法分析工具包(github链接:https://github.com/thunlp/THULAC-Python),具有中文分词词性标注功能。THULAC具有如下几个特点:

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

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

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

THU词性标记集(通用版)如下所示:

n/名词 np/人名 ns/地名 ni/机构名 nz/其它专名
m/数词 q/量词 mq/数量词 t/时间词 f/方位词 s/处所词
v/动词 a/形容词 d/副词 h/前接成分 k/后接成分 i/习语
j/简称 r/代词 c/连词 p/介词 u/助词 y/语气助词
e/叹词 o/拟声词 g/语素 w/标点 x/其它
  • 1
  • 2
  • 3
  • 4
  • 5

测试代码(python版)如下所示:

# -*- coding: utf-8 -*-
"""
THULAC 分词测试
"""import thulac   #默认模式,分词的同时进行词性标注
test1 = thulac.thulac()
text1 = test1.cut("杭州西湖风景很好,是旅游胜地!")
print(text1)#只进行分词
test2 = thulac.thulac(seg_only=True)
text2 = test2.cut("杭州西湖风景很好,是旅游胜地!")
print(text2)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17

测试结果如下图所示:

2.4 NLPIR (github star数 811)

NLPIR分词系统(前身为2000年发布的ICTCLAS词法分析系统,gtihub链接:https://github.com/NLPIR-team/NLPIR),是由北京理工大学张华平博士研发的中文分词系统,经过十余年的不断完善,拥有丰富的功能和强大的性能。NLPIR是一整套对原始文本集进行处理和加工的软件,提供了中间件处理效果的可视化展示,也可以作为小规模数据的处理加工工具。主要功能包括:中文分词词性标注命名实体识别用户词典新词发现关键词提取等功能。本文测试所采用的是PyNLPIRNLPIRPython版本,github链接:https://github.com/tsroten/pynlpir)

测试代码如下所示:

# -*- coding: utf-8 -*-
"""
PYNLPIR 分词测试
"""import pynlpir#打开分词器
pynlpir.open()text1 = "杭州西湖风景很好,是旅游胜地,每年吸引大量前来游玩的游客!" #分词,默认打开分词和词性标注功能
test1 = pynlpir.segment(text1)
#print(test1)
print('1.默认分词模式:\n' + str(test1))#将词性标注语言变更为汉语
test2 = pynlpir.segment(text1,pos_english=False)
print('2.汉语标注模式:\n' + str(test2))#关闭词性标注
test3 = pynlpir.segment(text1,pos_tagging=False)
print('3.无词性标注模式:\n' + str(test3))
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26

测试结果如下图所示:

常用的中文分词工具介绍相关推荐

  1. 开源中文切词工具介绍

    开源中文分词工具介绍 这里介绍常用的开源中文分词工具,大部分是java实现.如果是java生产环境,建议使用ansj.word或HanNlp. Bakeoff是一个国际中文处理比赛,有多个语料,所以每 ...

  2. NLP笔记:中文分词工具简介

    中文分词工具简介 0. 引言 1. jieba分词 1. jieba分词的基本用法 2. jieba分词的进阶版用法 1. 全模式的分词 2. 自定义领域词表加入 3. 使用jieba进行关键词抽取 ...

  3. 常用的开源中文分词工具

    转载自:  http://www.scholat.com/vpost.html?pid=4477 常用的开源中文分词工具 由于中文文本词与词之间没有像英文那样有空格分隔,因此很多时候中文文本操作都涉及 ...

  4. 中文分词原理及分词工具介绍

    中文分词学习记录 中文分词 实现方法 基于字符串匹配的分词方法 基于理解的分词方法 基于统计的分词方法 工具介绍 结巴分词 SnowNLP 北大PKUSEG 中文分词 首先,我们将介绍中文分词的思想和 ...

  5. jieba库 python2.7 安装_Python中文分词工具大合集:安装、使用和测试

    这篇文章事实上整合了前面两篇文章的相关介绍,同时添加一些其他的Python中文分词相关资源,甚至非Python的中文分词工具,仅供参考. 首先介绍之前测试过的8款中文分词工具,这几款工具可以直接在AI ...

  6. 零基础入门NLP之搭建中文分词工具

    1 文本分析的基本过程 分词就是中学学的断句: 举个例子来说明:假设我们输入一句话:北京欢迎你.则有可能的断句为: 北,京,欢,迎,你 北京,欢,迎,你 北京,欢迎,你  等等如果没有语料库的话就是这 ...

  7. ik分词和jieba分词哪个好_Pubseg:一种单双字串的BiLSTM中文分词工具

    中文分词是中文自然语言处理中的重要的步骤,有一个更高精度的中文分词模型会显著提升文档分类.情感预测.社交媒体处理等任务的效果[1]. Pubseg是基于BiLSTM中文分词工具,基于ICWS2005P ...

  8. 中文分词工具-IKAnalyzer下载及使用

    最近有个需求,需要对爬到的网页内容进行分词,以前没做过这个,随便找了找中文分词工具,貌似IKAnalyzer评价不错,因此就下来试试,在这里记录一下使用方法,备查. 关于IKAnalyzer的介绍,网 ...

  9. 基于java的中文分词工具ANSJ

    ANSJ 这是一个基于n-Gram+CRF+HMM的中文分词的java实现. 分词速度达到每秒钟大约200万字左右(mac air下测试),准确率能达到96%以上 目前实现了.中文分词. 中文姓名识别 ...

最新文章

  1. EJB-Java服务器端构件模型使用入门(2)
  2. Lua string库整理
  3. Vigenère密码
  4. 使用LSTM进行情感分析
  5. 剑指Offer - 面试题3. 数组中重复的数字(哈希)
  6. FastDFS学习笔记
  7. c语言插入排序算法_插入排序算法,流程图和C,C ++代码
  8. php异业联盟平台源码,基于ThinkPHP5.1框架开发的B2C在线商城系统PHP源码
  9. NUMA与英特尔下一代Xeon处理器学习心得(5)
  10. 使用Layered分层窗口实现视频会议中的桌面区域共享
  11. 机器学习笔记之二十一——基于统计的中文分词方法
  12. 作文素材:看完这23种蔬菜描写,恨不得穿过屏幕吃掉它们!
  13. win10无限重启服务器,win10系统更新kb4284835补丁失败无限重启的解决方法
  14. python软件长什么样子图片高清_手把手:扫描图片又大又不清晰?这个Python小程序帮你搞定!...
  15. 怎样选择适合您的EDI供应商?
  16. 是什么偷走了我们浓浓的年味?
  17. 认知科学期末复习笔记
  18. golang 中 signal 包的 Notify 函数用法介绍
  19. 基于异步多智能体强化学习的公交驻车控制方法
  20. 计算机如何思考与图灵完备

热门文章

  1. java pojo_java 什么是POJO
  2. IE-LAB网络实验室:什么是华为数通? 华为数通HCIE学些什么?
  3. Linux版本Kibana安装教程
  4. SpaceX大裁员!苹果道歉了!|一周硅谷热点新闻回顾
  5. C#文件创建和读取OpenFIleDialogSaveFileDialog用法
  6. 【计算机毕业文章】网上购物商城
  7. python mmap_python mmap对象
  8. ProxyPool 爬虫代理IP池(分享)
  9. 计算机网络技术及应用后答案郝兴伟,计算机网络技术及应用后答案郝兴伟
  10. 一文解读,网络安全行业人才需求情况