上节课,我们学习了自然语言处理课程(一):自然语言处理在网文改编市场的应用,了解了相关的基础理论。接下来,我们将要了解一些具体的、可操作的技术方法。

作为小说爱好者的你,是否有设想过通过一些计算机工具对小说做一些有趣的事情呢?阅读本文,你可以了解到如何运用现在最流行、最容易运用的jieba分词包,统计一个段落的词频,然后来通过词频推断小说的关键情节、核心人物。

作为文本分析和情感分析最基础的工作就是对文本进行分词,后期的文本挖掘、情感分析、规律探寻等工作很大程度上取决于分词的精确度。在当代的中文自然语言分析领域,Jieba分词包因为它的简易性和高效性被广大工作者广泛的运用。

值得一提的是,小编在网上做了调查,想对Jieba分词包的作者SunJunyi做一个简单的介绍,但无奈信息太少,也源于他本人很低调,没有过多的信息,有兴趣的朋友可以在链接https://github.com/fxsjy?tab=repositories通过邮件联系到他本人(小编没有尝试过)。

本篇文章会在Jieba分词包的运用原理以及实际运用进行介绍,并会分享我们在文本分析用到的实例。

原理介绍

在介绍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模型和维特比算法以后,即使词典一个词都没有也能够进行大致的分词,只是准确率会有所降低。

实际运用

Jieba 分词细分为了三种,分为精确模式、全模式和搜索引擎模式(在实际运用会进行介绍),每一个模式都有着自己的特定用法,但大体差别不大,这里我们用Python为大家进行演示。

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

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

此外,我们还可以用load_userdict(file_name)添加自己想添加的字典,让判断变得更加的准确,示例如下:

当我们只用jieba的默认字典时,牛肉和饼干被默认为两个词语。然后我们在与程序文件相同目录的地方创建一个文本文档,将’牛肉饼干’输入进去,作为一个词组,得到的分词就不一样了。当然,我们也可以直接添加“牛肉饼干”这个词。

除此之外,Jieba分词包还支持一些其他的功能,我们在这里就不一一的介绍了,详情可以参考jieba在github上面README.txt的详细介绍。

实例分享

在进行了较为枯燥的介绍后,终于来到了好玩又令人激动地实例分享,我们这次对红楼梦的几个段落进行文本统计,所需要的工具包为jieba。

首先我们要做的是导出txt文件里红楼梦的文本,分割为短句,并对每个短句进行一定的处理,保证文本的整洁和规律。具体步骤为:

1. 依换行符,句号,逗号等分隔符将全文分为短句。

2. 删除每个短句前后的空格。

3. 剔除没有任何文字和数字的短句。

然后我们就可以进行分词了,这里的后半部分小编将字典进行了排序,不是本文的重点,重点是要知道怎么利用jieba进行分词。这里小编把每一个短句切分为词语,并把这个结果写入一个字典里。如果字典已经有这个词了,那么这个词对应的频数+1,如果没有,那么就添加这一个词,频数设置为1。

最后就是将结果持久化存储到本地了,这里就不做详细的介绍了,有兴趣的可以下去了解。

  • 发表于: 2018-05-22
  • 原文链接:https://kuaibao.qq.com/s/20180522G1FL4E00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。

自然语言处理课程(二):Jieba分词的原理及实例操作相关推荐

  1. jieba分词实现原理(C++版 + python篇)(二)

    目录 1. 基本概念 1.1 jieba功能介绍 1.2 结巴分词流程图 1.3 jieba实现算法 2. jieba分词流程详述

  2. python自然语言处理 分词_Python 自然语言处理(基于jieba分词和NLTK)

    Python 自然语言处理(基于jieba分词和NLTK) 发布时间:2018-05-11 11:39, 浏览次数:1038 , 标签: Python jieba NLTK ----------欢迎加 ...

  3. Python 自然语言处理(基于jieba分词和NLTK)

    ----------欢迎加入学习交流QQ群:657341423 自然语言处理是人工智能的类别之一.自然语言处理主要有那些功能?我们以百度AI为例 从上述的例子可以看到,自然语言处理最基本的功能是词法分 ...

  4. 映像劫持是什么?映像劫持原理及实例操作

    "映像劫持",也被称为"IFEO"(Image File Execution Options),在WindowsNT架构的系统里,IFEO的本意是为一些在默认系 ...

  5. python 自然语言处理(二) jieba 分词

    import jieba s ='我想和女朋友一起去北京故宫博物院参观和闲逛.' #精确模式 cut = jieba.cut(s) print (','.join(cut)) 我,想,和,女朋友,一起 ...

  6. 通道抠像原理和实例操作

    通道抠出来的头发才带感,一丝一丝的,下面就讲一下如何通道抠图. 下面这段通道抠像原理是转载: 本人学习ps已经有段时间了,根据自己对于通道及颜色的理解写了如下教程.如有错误,欢迎提醒纠正..      ...

  7. NLP之jieba分词原理简析

    一.jieba介绍 jieba库是一个简单实用的中文自然语言处理分词库. jieba分词属于概率语言模型分词.概率语言模型分词的任务是:在全切分所得的所有结果中求某个切分方案S,使得P(S)最大. j ...

  8. 基于Python的中英文分词基础:正则表达式和jieba分词器

    基于Python的中英文分词基础:正则表达式和jieba分词器 前言介绍 英文字符串处理 Python中的str 正则表达式 Python中的正则表达式模块 re 小练习 字符串中出现频次最多的字母 ...

  9. jieba分词错误_jieba中文分词

    在自然语言处理过程中,为了能更好地处理句子,往往需要把句子拆开分成一个一个的词语,这样能更好的分析句子的特性,这个过程叫做--分词. 我们来看看如何分词,嗯?别想多了,我不准备自己造轮子了,用别人的吧 ...

最新文章

  1. 自己做的一个小程序 可采集、导出、模板、配置
  2. PYTHON的函数对参数解析分析
  3. 通过修改注册表实现Windows 隐藏账户
  4. python拷贝文件函数_Python Set集合,函数,深入拷贝,浅入拷贝,文件处理
  5. 沃尔玛建立自家的人工智能网络,抗衡竞争对手亚马逊
  6. 画验证曲线_椭圆曲线加密算法(ECC)
  7. 大年初一,磊哥给大家发大红包啦!
  8. cf卡序列号修改工具_王者荣耀无需Root修改荣耀战区软件和方法分享 全国地区可任意修改...
  9. Blender相关的一些链接(持续更新)
  10. 机器学习算法-10贝叶斯信念网络、聚类算法、基于密度的方法DBSCAN
  11. 最新VSCode格式化代码不换行
  12. 用Python在地图上模拟疫情扩散
  13. DLS 深度受限搜索 狼羊 过河 问题 python 实现
  14. Taro小程序跨端开发入门实战
  15. 厦门大学计算机科学俞俊,厦门大学计算机学科距离进入ESI全球前1%的接近程度为66%-厦门大学计算机科学系...
  16. 人体的神经系统图 分布,神经系统分布图解析图
  17. 怎么用计算机管理你的外卖订单,外卖系统怎么确定收到订单 外卖接单软件怎么做...
  18. homeassistant mysql_给Homeassistant更换PostgreSQL数据库
  19. Python编程-从入门到实践 Chapter19 第19章 创建用户账户的坑
  20. 教你如何搭建人事OA-员工管理系统,demo可分享

热门文章

  1. 2022-2028年全球与中国生物质燃料粒行业市场智研瞻分析报告
  2. Go 中切片索引与 Python 中列表索引的差异
  3. Linux shell 学习笔记(10)— 处理用户输入(命令行读取参数、读取用户输入、超时处理)
  4. 3分钟4 步快速带你在win10电脑装上openCV3.4 (python使用)
  5. 力所能及的做些自己喜欢和有趣的事
  6. PLsql连接centos7上的Oracle的连接超时的解决方发
  7. 2020年人工智能汽车将出台多项标准
  8. 2021年大数据Flink(四十一):​​​​​​​Flink实现订单自动好评
  9. 2021年大数据Flink(十七):Flink四大基石
  10. Andriod TextView typeface