中文分词—Jieba 是一款Python 中文分词组件

“Jieba” (Chinese for “to stutter”) Chinese text segmentation: built to be the best Python Chinese word segmentation module.

特点

支持三种分词模式:

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

安装方法

代码对 Python 2/3 均兼容

全自动安装: easy_install jieba / pip install jieba / pip3 install jieba 均可
半自动安装:先下载 https://pypi.python.org/pypi/jieba/ ,解压后运行 python setup.py install
手动安装:将 jieba 目录放置于当前目录或者 site-packages 目录

原理介绍

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

在介绍Jieba分词原理之前,我们人类最直接的思维角度如何去分词?

举个简单的例子,我们有一句话是“我现在去公司开会“,人类最直观的想法就是从左向右扫描此句,然后分词成“我/现在/去/公司/开会”。但作为计算机机器,我们能做的、可能就是给计算机一本词典,让它根据词典中已经标定的字或词来分词。这样的方法可以应用于大部分句子,但当遇到一词多义、或者有双重理解词语组合的情况时,分析就变得不那么容易了。

例如‘今天去长安大学城花店‘,正确的分词方法应该是’今天/去/长安/大学城/花店‘,但由于词典里有大学这个词但却没有大学城这个词语的缘故,计算机会把词分成’今天/去/长安/大学/城/花店’,这样的分词就是错误的,对于语义的理解就不是很准确。Jieba分词包针对这一类的问题,运用有效的统计模型与中文语言的特性相结合,将分词的效果提升了很多档次。

Jieba分词包的高效首先离不开对语料库的精心选择。在作者SunJunyi通过大量的训练之后,在名为dict.txt的文件里录入了两万多条词作为参考,进行最基本的布局但是大家可以设想,假设我们是什么都不知道、只能通过查找这个字典来进行词语归类的机器人,我们每一次分句都要基本上阅读上万条词语 ,我们的眼睛和大脑都会受不了。虽然计算机比人的效率高了数个数量级,但每一次进行如此大规模的查找也会非常的耗时

Jieba分词包在这里运用到了数据结构里的trie(前缀树或字典树)对词语进行高效的分类,便于查找。

如上图所示,这就是最简单的trie的原理在分词上的运用:我们有Johnny、Joe、Jane和Jack四个名字,假设我们要让计算机查找名字Jack是否存在,普通的方法来说,计算机可能会扫描所有的字符串,非常耗时低效,但trie的从上至下搜索、每一次只判定一个字母、如果某个特定的节点(node)的下一个节点(child node)不再符合搜索要求,那么搜索就会停止,这样效率就会大大的提高。

此外,trie也结合了计算机领域另一个知识,名为有向无环图(DAG)trie与有向无环图的结合很高效的解决了第一段所提到的双重理解词语组合的问题。举个例子:

通过设定,计算机自动识别出了两种分词方法,分别为’有/意见/分歧/’ 和 ‘有意/见/分歧’,这就是trie和DAG的最基本应用。

那么如何从这两个切分组合中筛选出一个更优的呢?这里就要用到一点点统计学的知识,既然一个句子有多个分词方式,那么我们就应该选择使得这个句子出现概率最大的切分组合。学过概率论与数理统计的同学可以很容易得把这个思想同极大似然估计(Maximum Likelihood Estimation)联系起来。

在制定了切分方案的评价准则后, jieba分词包运用了动态规划来找出词频最大切分组合。动态规划涉及到很多内容,我们就不做详细的介绍,但它在这里起到的效果很通俗易懂。举个例子:假设一个句子K,它可以被计算机随机分为a,b,c三种分词形式,那么计算机就通过大量的运算,在标准正确的情况下取概率最大的一种分词形式。在这里,动态规划法对分词分好之后每个词语出现的频率进行了统计(频率=次数/总数),得到最大的概率切分组合从而完成分词。

可能还有的疑问,那么如果有没有录入字典的词该怎么办呢?这里Jieba分词包用到了HMM模型和经典的维特比(Viterbi)算法,将未登录词  (词典中未收录/训练词典之外的词)  分为开始、中间、结束和单独成词四种分类来自动分词。总的来说,Jieba分词包在拥有HMM模型和维特比算法以后,即使词典一个词都没有也能够进行大致的分词,只是准确率会有所降低。

代码实例

其中word1为全模式,word2为精确模式,word3为搜索引擎模式,在这个例子里面,全模式和搜索引擎模式是差不多的,都将所有的词组展示了出来,但顺序有所不同,精确模式只输出了句子分词最大可能性的一组。

这里需要注意的一点:所有的word1,word2,word3并不是一个字符串,而是一个迭代器(iterator),要通过print(‘ ‘.join(word1))的方式正常输出中文字符,否则直接print只会出现对象的地址。如果嫌这个很麻烦,也可以直接使用lcut()或lcut_for_search()直接将分词放进一个list,直接运用。

参考:https://github.com/fxsjy/jieba

中文分词工具—Jieba相关推荐

  1. NLP算法-中文分词工具-Jieba

    中文分词工具-Jieba 什么是Jieba? 1.Jieba 的特点 2.Jieba 分词的原理 3.Jieba 分词的三种模式 使用 Jieba 库进行分词 代码示例 测试说明 demo 什么是Ji ...

  2. 中文分词工具jieba分词器的使用

    1.常见的中文分词工具 中科院计算所的NLPIR 哈工大LTP 清华大学THULAC 斯坦福分词器 Hanlp分词器 jieba分词 IKAnalyzer 2.jieba分词算法主要有以下三种: 1. ...

  3. 【数据平台】python中文分词工具jieba

    1.官网: https://pypi.python.org/pypi/jieba/ https://github.com/fxsjy/jieba 自动安装:pip install jieba 2.特点 ...

  4. 中文分词工具jieba中的词性类型(转载)

    jieba为自然语言语言中常用工具包,jieba具有对分词的词性进行标注的功能,词性类别如下: Ag 形语素 形容词性语素.形容词代码为 a,语素代码g前面置以A. a 形容词 取英语形容词 adje ...

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

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

  6. python 中文分词工具

    python 中文分词工具 jieba,https://github.com/fxsjy/jieba jieba_fast,https://github.com/deepcs233/jieba_fas ...

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

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

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

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

  9. jieba textrank关键词提取 python_五款中文分词工具在线PK: Jieba, SnowNLP, PkuSeg,THULAC, HanLP...

    最近玩公众号会话停不下来:玩转腾讯词向量:Game of Words(词语的加减游戏),准备把NLP相关的模块搬到线上,准确的说,搬到AINLP公众号后台对话,所以,趁着劳动节假期,给AINLP公众号 ...

最新文章

  1. 爬虫笔记|r.text-r.request.headers|修改,头
  2. Python 常用代码片段
  3. pytorch维度统计
  4. 《C与指针》第七章练习
  5. 虚函数(virtual)可以是内联函数(inline)吗?
  6. vue 3.4x以上如何改变项目运行端口号
  7. submlime text写java_在Sublime Text 3中配置编译和运行Java程序
  8. 一个堆排我竟弄了 4 个动画
  9. ajax escape用法,ie11下ajax用escape发送中文参数失败
  10. sqluldr2 配置
  11. HTML布局之grid布局
  12. scons 自定义命令行参数传递
  13. 3D游戏编程与设计——粒子系统
  14. ubuntu 环境搭建问题归纳
  15. 自动正则表达式生成网站
  16. 同步任务和异步任务执行过程
  17. matlab描述统计分析步骤,MATLAB实现描述性统计分析的例子例题
  18. 投了几百份简历都没人回?兄弟,你的简历真的有问题啊!
  19. 去O渐成过去式,Cloud进入现在时-2015 Oracle技术嘉年华精彩回放
  20. Netty中重连可能出现 is not a @Sharable handler 报错的处理方法

热门文章

  1. mcl计算matlab代码,matlab练习程序(马尔可夫聚类MCL)
  2. 【数学建模】马氏链模型(基本概念+正则链+吸收链)
  3. 基于php的人事档案管理系统——计算机毕业设计
  4. ACE中的设计模式,入门
  5. 【洛谷p1605】迷宫
  6. linux 解压缩后没权限,Linux的权限管理及基础常用命令
  7. 了解Hybird和小程序和react-native的技术架构
  8. 【STM32WLE5之lora:6、易智联LM40评估板ADC定时采集上报低功耗处理】
  9. 计算机病毒的清除及防范摘要,计算机病毒防范论文病毒防范论文:计算机病毒及其防范措施探讨...
  10. python爬虫 出现built in method strip of str object at ox000002268861D480