python jieba库的基本使用
作者:狸帅 发布时间:2022-10-15 23:01:16
目录
一、jieba库概述
二、jieba库安装
三、jieba分词的原理
四、jieba分词的3种模式
五、jieba库常用函数
六、文本词频示例
七、文本词频统计问题举一反三
一、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
来源:https://www.cnblogs.com/keepcode/p/14436010.html
猜你喜欢
- Dreamweaver一直是不少网友钟情的网页设计工具,除了它强大的动态效果制作能力外,方便简洁的操作界面更是独具特色,下面我们将以最新版本
- 具体代码如下所示:import osfrom PIL import ImageUNIT_SIZE = 220 # the size of i
- 我们知道在超级链接的title属性中,是不支持html代码的,我们只能使用文本来处理提示信息。当然借助js可以做出很好的效果。这里讲一下如何
- 不错,这个是一个文章详细页,没有左右两栏布局,不过这里我重点要讲的是合理的布局,在稍后的文章中我会详细的介绍浮动元素。好,回到刚才的话题,大
- 本文中介绍的主要是SQL语句,请大家不要在Access中使用。SQL的分类:DDL—数据定义语言(CREATE,ALTE
- 前言在我们的日常开发中, 常用的中间件有很多, 今天来讲一下怎么集成限流中间件, 它可以很好地用限制并发访问数来保护系统服务, 避免系统服务
- 1、pip下载安装1.1 pip下载进入https://pypi.python.org/pypi/pip,下载 .tar.gz压缩包1.2&
- 在了解XHTML代码规范后,我们就要进行CSS布局。首先先介绍一些CSS的入门知识。如果你已经很熟悉了,可以跳过这一节。CSS是Cascad
- 看看这个logo,有些像python的小蛇吧 。这次介绍的数据库codernityDB是纯python开发的。先前用了下tinyDB这个本地
- 控制资源访问前文提到threading库在多线程时,对同一资源的访问容易导致破坏与丢失数据。为了保证安全的访问一个资源对象,我们需要创建锁。
- 在项目中遇到需要支持上传gif图片,并把其分解的帧图片一次展示给用户。话不多说直接上代码分解gif图片需要使用libgif-js这个库!1.
- 本文实例讲述了Python基类函数的重载与调用方法。分享给大家供大家参考。具体分析如下:刚接触Python语言的时间不长,对于这个语言的很多
- 简介Go的标准包Container中包含了常用的容器类型,包括conatiner/list,container/heap,container
- 使用Python3和Opencv识别一张标准的答题卡。大致的过程如下:1.读取图片2.利用霍夫圆检测,检测出四个角的黑圆位置,从确定四个角的
- <?php $monthoneday=date("Ym")."01"; $oneweekday
- 一、安装MySQL 目前web服务器已经很少有跑静态页面
- 一、加载库首先加载torch库,进入python后加载库使用import导入【import 库名】二、sin值计算方法pytorch中的si
- 大家好,我是丁小杰。上次和大家分享了Python定时爬取微博热搜示例介绍,堪称摸鱼神器,一个热榜不够看?今天我们再来爬取一下抖音热搜榜,感兴
- 前言:👉对于新手来说,库的安装是遇到的第一个挑战,我也入了很多坑,所以想出一期安装库的步骤,由于博主水平限制,博客难免会有错误和不准之处,我
- 等间距取值a = np.linspace(float(-pi), float(pi), 100)从-pi到pi取100个值对区间进行等间距取