python jieba库的基本使用

 更新时间:2021年3月5日 20:48  点击:2233

一、jieba库概述

jieba是优秀的中文分词第三方库

  • 中文文本需要通过分词获得单个的词语
  • jieba是优秀的中文分词第三方库,需要额外安装
  • jieba库提供三种分词模式,最简单只需要掌握一个函数

二、jieba库安装

pip install jieba

三、jieba分词的原理

jieba分词依靠中文词库

  • 利用一个中文词库,确定汉字之间的关联概率
  • 汉字间概率大的组成词组,形成分词结果

四、jieba分词的3种模式

  • 精确模式:把文本精确地切分开,不存在冗余单词(最常用)
  • 全模式:把文本中所有可能的词语都扫描出来,有冗余
  • 搜索引擎模式:在精确模式的基础上,对长词再次切分

五、jieba库常用函数

函数 描述
jieba.lcut(s) 精确模式,返回一个列表类型的分词结果
jieba.lcut(s,cut_all=True) 全模式,返回一个列表类型的分词结果,存在冗余
jieba.lcut_for_search(s) 搜索引擎模式,返回一个列表类型的分词结果,存在冗余
jieba.lcut(s) 精确模式,返回一个列表类型的分词结果
jieba.add_word(s) 向分词词典增加新词w

例子:

>>> jieba.lcut("中国是一个伟大的国家")
['中国', '是', '一个', '伟大', '的', '国家']

>>> jieba.lcut("中国是一个伟大的国家", cut_all=True)
['中国', '国是', '一个', '伟大', '的', '国家']

>>> jieba.lcut_for_search("中华人民共和国是伟大的")
['中华', '华人', '人民', '共和', '共和国', '中华人民共和国', '是', '伟大', '的']

六、文本词频示例

问题分析

  • 英文文本: Hamlet 分析词频

https://python123.io/resources/pye/hamlet.txt

  • 中文文本: 《三国演义》 分析人物

https://python123.io/resources/pye/threekingdoms.txt

代码如下:

def getText():
 # 打开 hamlet.txt 这个文件
 txt = open("hamlet.txt", "r").read()
 # 避免大小写对词频统计的干扰,将所有单词转换为小写
 txt = txt.lower()
 # 将文中出现的所有特殊字符替换为空格
 for ch in '|"#$%^&*()_+-=\\`~{}[];:<>?/':
 txt = txt.replace(ch, " ")
 # 返回一个所以后单词都是小写的,单词间以空格间隔的文本
 return txt

hamletTxt = getText()
# split() 默认使用空格作为分隔符
words = hamletTxt.split()
counts = {}
for word in words:
 counts[word] = counts.get(word,0) + 1
items = list(counts.items())
items.sort(key=lambda x:x[1], reverse=True)
for i in range(10):
 word, count = items[i]
 print("{0:<10}{1:>5}".format(word,count))

上面代码中的

items.sort(key=lambda x:x[1], reverse=True)

是根据单词出现的次数进行排序,其中使用了 lambda 函数。更多解释请看:
https://www.runoob.com/python/att-list-sort.html

下面使用 jieba 库来统计《三国演义》中任务出场的次数:

import jieba
txt = open("threekingdoms.txt","r",encoding="utf-8").read()
words = jieba.lcut(txt)
counts = {}
for word in words:
 if len(word) == 1:
 continue
 else:
 counts[word] = counts.get(word, 0) + 1

items = list(counts.items())
items.sort(key=lambda x:x[1], reverse=True)
for i in range(15):
 word, count = items[i]
 print("{0:<10}{1:>5}".format(word,count))

运行结果:

曹操  953
孔明  836
将军  772
却说  656
玄德  585
关公  510
丞相  491
二人  469
不可  440
荆州  425
玄德曰  390
孔明曰  390
不能  384
如此  378
张飞  358

我们可以看到得出的结果与我们想象的有些差异,比如

  • “却说”、“二人”等与人名无关
  • “诸葛亮”、“孔明”都是同一个人
  • “孔明”和“孔明曰”分词不符合我们的需求

所以我们需要对上面代码进行优化,在词频统计的基础上,面向问题改造我们的程序。

下面是《三国演义》人物数量统计代码的升级版,升级版中对于某些确定不是人名的词,即使做了词频统计,也要将它删除掉。使用寄一个集合excludes来接收一些确定不是人名但是又排序比较靠前的单词列进去。

import jieba
txt = open("threekingdoms.txt","r",encoding="utf-8").read()
excludes = {"将军","却说","荆州","二人","不可","不能","如此"}
words = jieba.lcut(txt)
counts = {}
for word in words:
 if len(word) == 1:
 continue
 elif word == "诸葛亮" or word == "孔明曰":
 rword == "孔明"
 elif word == "关公" or word == "云长":
 rword == "关羽"
 elif word == "玄德" or word == "玄德曰":
 rword == "刘备"
 elif word == "孟德" or word == "丞相":
 rword == "曹操"
 else:
 rword = word
 counts[rword] = counts.get(rword, 0) + 1

items = list(counts.items())
items.sort(key=lambda x:x[1], reverse=True)
for i in range(15):
 word, count = items[i]
 print("{0:<10}{1:>5}".format(word,count))

运行结果:

曹操  963
孔明  847
张飞  366
商议  359
如何  352
主公  340
军士  320
吕布  303
左右  298
军马  297
赵云  283
刘备  282
引兵  279
次日  278
大喜  274

可以看出还是有像“商议”、“如何”等不是人物的词出现在统计结果,我们将这些词加入到 excludes 中,多次运行程序后最后得到《三国演义》任务出场顺序前20:

七、文本词频统计问题举一反三

应用问题扩展

  • 《红楼梦》、《西游记》、《水浒传》...等名著都可以统计它的任务出场次数
  • 政府工作报告、科研论文、新闻报道...中出现的大量的词频进行分析,进而找到每篇文章的重点内容
  • 进一步,对文本的词语或词汇绘制成词云,使其展示的效果更加直观

以上内容资料均来源于中国大学MOOC网-北京理工大学Python语言程序设计课程
课程地址:https://www.icourse163.org/course/BIT-268001

以上就是python jieba库的基本使用的详细内容,更多关于python jieba库的资料请关注猪先飞其它相关文章!

[!--infotagslink--]

相关文章

  • python opencv 画外接矩形框的完整代码

    这篇文章主要介绍了python-opencv-画外接矩形框的实例代码,代码简单易懂,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下...2021-09-04
  • PHP 数据库缓存Memcache操作类

    操作类就是把一些常用的一系列的数据库或相关操作写在一个类中,这样调用时我们只要调用类文件,如果要执行相关操作就直接调用类文件中的方法函数就可以实现了,下面整理了...2016-11-25
  • C#连接SQL数据库和查询数据功能的操作技巧

    本文给大家分享C#连接SQL数据库和查询数据功能的操作技巧,本文通过图文并茂的形式给大家介绍的非常详细,需要的朋友参考下吧...2021-05-17
  • Python astype(np.float)函数使用方法解析

    这篇文章主要介绍了Python astype(np.float)函数使用方法解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下...2020-06-08
  • 最炫Python烟花代码全解析

    2022虎年新年即将来临,小编为大家带来了一个利用Python编写的虎年烟花特效,堪称全网最绚烂,文中的示例代码简洁易懂,感兴趣的同学可以动手试一试...2022-02-14
  • python中numpy.empty()函数实例讲解

    在本篇文章里小编给大家分享的是一篇关于python中numpy.empty()函数实例讲解内容,对此有兴趣的朋友们可以学习下。...2021-02-06
  • C#从数据库读取图片并保存的两种方法

    这篇文章主要介绍了C#从数据库读取图片并保存的方法,帮助大家更好的理解和使用c#,感兴趣的朋友可以了解下...2021-01-16
  • python-for x in range的用法(注意要点、细节)

    这篇文章主要介绍了python-for x in range的用法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2021-05-10
  • Python 图片转数组,二进制互转操作

    这篇文章主要介绍了Python 图片转数组,二进制互转操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2021-03-09
  • Python中的imread()函数用法说明

    这篇文章主要介绍了Python中的imread()函数用法说明,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2021-03-16
  • python实现b站直播自动发送弹幕功能

    这篇文章主要介绍了python如何实现b站直播自动发送弹幕,帮助大家更好的理解和学习使用python,感兴趣的朋友可以了解下...2021-02-20
  • Intellij IDEA连接Navicat数据库的方法

    这篇文章主要介绍了Intellij IDEA连接Navicat数据库的方法,本文通过图文并茂的形式给大家介绍的非常详细,对大家的学习或工作具有一定的参考借价值,需要的朋友可以参考下...2021-03-25
  • 在数据库里将毫秒转换成date格式的方法

    在开发过程中,我们经常会将日期时间的毫秒数存放到数据库,但是它对应的时间看起来就十分不方便,我们可以使用一些函数将毫秒转换成date格式。 一、 在MySQL中,有内置的函数from_unixtime()来做相应的转换,使用如下: 复制...2014-05-31
  • python Matplotlib基础--如何添加文本和标注

    这篇文章主要介绍了python Matplotlib基础--如何添加文本和标注,帮助大家更好的利用Matplotlib绘制图表,感兴趣的朋友可以了解下...2021-01-26
  • C#操作本地文件及保存文件到数据库的基本方法总结

    C#使用System.IO中的文件操作方法在Windows系统中处理本地文件相当顺手,这里我们还总结了在Oracle中保存文件的方法,嗯,接下来就来看看整理的C#操作本地文件及保存文件到数据库的基本方法总结...2020-06-25
  • 解决python 使用openpyxl读写大文件的坑

    这篇文章主要介绍了解决python 使用openpyxl读写大文件的坑,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2021-03-13
  • 如何解决局域网内mysql数据库连接慢

    通过内网连另外一台机器的mysql服务, 确发现速度N慢! 等了大约几十秒才等到提示输入密码。 但是ping mysql所在服务器却很快! 想到很久之前有过类似的经验, telnet等一些服务在连接请求的时候,会做一些反向域名解析(如果...2015-10-21
  • python 计算方位角实例(根据两点的坐标计算)

    今天小编就为大家分享一篇python 计算方位角实例(根据两点的坐标计算),具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2020-04-27
  • MySQL快速复制数据库数据表的方法

    某些时候,例如为了搭建一个测试环境,或者克隆一个网站,需要复制一个已存在的mysql数据库。使用以下方法,可以非常简单地实现。假设已经存在的数据库名字叫db1,想要复制一份,命名为newdb。步骤如下:1. 首先创建新的数据库newd...2015-10-21
  • 使用Python的pencolor函数实现渐变色功能

    这篇文章主要介绍了使用Python的pencolor函数实现渐变色功能,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下...2021-03-09