Python入门实例验证及结果之实例11 文本词频统计 ## 字典类型 ## jieba库的使用

2020年2月26日星期三
今天介绍组合数据类型的最后一个类型字典类型以及jieba库的应用并且验证实例11文本词频统计

字典类型

字典类型定义
首先理解一夏映射的定义
在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述
生成一个字典d,有三个元素,每个元素都是一个键值对,可用d[“中国”]来获得在字典d中,由中国作为索引的数据值‘北京’
其实这种形式跟在序列类型中通过一个列表“[ ]”输入一个序号获得值是一样的,只不过在字典类型中,序号是由用户来直接定义的,可以定义为像字符串这样的非可变类型;可以使用大括号{ }来生成一个空字典,如果想生成空的集合,不能使用空{ }的方式,只能用set(),,用type(x)返回变量x的类型
字典处理函数及方法
在这里插入图片描述在这里插入图片描述d.keys和d.values并不返回列表类型,它返回的是一种字典的key类型或字典的values类型,这些类型可以用for in 的方式做遍历但是不能当做列表类型来操作
在这里插入图片描述d.pop取出之后要删除字典中对应的键值对
在这里插入图片描述在这里插入图片描述

因为北京在字典d中所以返回它对应的值北京,由于巴基斯坦是字典d中的索引所以它返回伊斯兰堡,可以用d.popitem()从字典d中随机获取一个键值对出来,用元组的形式来表达
在这里插入图片描述

字典类型的应用场景
字典类型是映射的一种衍生形式,所以字典类型最主要的应用场景就是对映射的表达
在这里插入图片描述
例如:元素遍历
for k in d :
<语句块>
由键来逐一的索引字典中的对应值,并且进行相关操作

jieba库的使用

中文文本需要通过分词获得单个的词语
jieba是优秀的中文分词第三方库,需要额外安装
jieba库提供三种分词模式,最简单只需掌握一个函数
jieba库的安装
直接在命令行输入 pip install jieba
在这里插入图片描述在这里插入图片描述
jieba库是通过中文词库的方式来识别分词的,利用一个中文词库,确定汉字之间的关联概率,通过汉字间概率大的组成词组,形成分词结果,除了分词,用户还可以添加自定义的词组,从而使jieba的分词更适应
某些具体领域的使用
jieba分词的三种模式
在这里插入图片描述jieba库常用函数
在这里插入图片描述在这里插入图片描述
最常用的就是jieba.lcut(s)它能够将字符串s进行精确的分词处理并且返回一个列表类型

文本词频统计实例验证

实例一:英文文本harmlet.txt词频统计
代码一;

#CalHamletV1.py
def getText():
    txt=open("hamlet.txt","r").read()#打开hamlet.txt文件
    txt=txt.lower()#将所有的英文字符变成小写
    for ch in '`~!@#$%^&*()-_+=[]{}\\|;:",.<>/?': #去掉文本中的各种符号
        txt=txt.replace(ch," ")#将每一个特殊符号替换成空格
    return txt
harmletTxt=getText()#对文本进行归一化
words=harmletTxt.split()#用空格分隔它们 变成一个列表
counts={}#空字典
for word in words:#从wods中取出每一个元素,判断这个元素是否在counts中
    counts[word]=counts.get(word,0)+1#用当前的某一个英文单词作为键索引字典,如果它在里面,就返回它的次数,后面再加1,如果不在字典中,将它加入字典中,并且赋给当前值0
items=list(counts.items())#将字典类型变为列表类型
items.sort(key=lambda x:x[1],reverse=True)#对列表按照键值对的2个元素的第二个元素进行排序,排序的方式是从大到小
for i in range(10):#打印出现最多的前十个词以及它对应的次数
    word,count=items[i]
    print("{0:<10}{1:>5}".format(word,count))#参数word的序号为0,左对齐,宽度为10,参数count的序号为1,右对齐,宽度为5

结果一:
在这里插入图片描述
疑问:例子上输出是右对齐的,代码设置也是右对齐,我自己输出的结果不知道为什么不是右对齐

实例二:《三国演义》人物出场统计(上)
代码二:

#CalThreeKindom.py
import jieba
txt = open("threekingdoms.txt", "r", encoding='ansi').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):
    words,counts=items[i]
    print("{0:<10}{1:>5}".format(words,counts))

结果二:
在这里插入图片描述
注:python的open()函数中的encoding参数的问题
https://blog.csdn.net/qq_42804736/article/details/89576446
实例三:《三国演义》人物出场统计(下)
代码三:
#CalThreeKindomsV2.py
import jieba
txt = open(“threekingdoms.txt”, “r”, encoding=‘ansi’).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
for word in excludes:
del counts[word]
items=list(counts.items())
items.sort(key=lambda x:x[1] ,reverse=True)
for i in range(10):
words,counts=items[i]
print("{0:<10}{1:>5}".format(words,counts))
结果三:
在这里插入图片描述

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值