内容正文:
任务4.4 字典
英文文章词频统计
乔布斯演讲视频视频https://www.bilibili.com/video/BV1oW411h7Ea/?buvid=XYCD883C82C8FF6C8D7E17FA4E282A15D85E0&is_story_h5=false&mid=CaOiyKrXdDTI6%2F1JhrWrFQ%3D%3D&p=1&plat_id=114&share_from=ugc&share_medium=android&share_plat=android&share_session_id=1a8c3ce5-5c2f-4227-9589-ae80d909f4c7&share_source=WEIXIN&share_tag=s_i×tamp=1678182661&unique_k=mDzFCco&up_id=29958079
4.4 字典——英文文章词频统计
4.4 字典——英文文章词频统计
【任务描述】
词频统计有助于我们从大量的文本中获得主旨,这是机器学习处理自然语言文本的一种基础手段。小T为快速解读出乔布斯在斯坦福大学的英文演讲稿的关键内容,他通过统计该演讲稿中出现频率较高的词语来确定演讲稿主要内容。
在英文文本中,单词间用空格或者标点符号进行分隔,其词频的统计较容易实现。由于统计时需要明确词及词频二者的映射关系,因此可以利用Python组合数据类型中的字典数据类型来实现。
4.4 字典——英文文章词频统计
如何快速解读文章?
如何统计词频?
词和词频用什么数据类型表示?
the:103,life:17
4.4 字典——英文文章词频统计
【任务分析】
对要分析的演讲稿需要逐个读出其中的单词,并利用Python中的字典、列表等数据类型对单词进行标识和统计,整体思路的框架如下:
(1)定义字符串,存储英文演讲稿。
(2)对字符串进行分词,遍历所有单词,进行词频统计。
(3)输出文章中出现频率最高的前50个单词及词频。
4.4.1 字典的基本操作:创建、访问、添加/删除元素
4.4.2 字典的遍历
4.4.3 字典任务实现——英文文章词频统计
4.4 字典——英文文章词频统计
4.4.2 字典的遍历
4.4.2 字典的遍历
字典的几种遍历方式
如何实现遍历?
可以用for…in…来遍历字典元素,遍历的对象包括“键”与“值”。
1.通过键遍历字典
for key in 字典.keys():
访问字典键
可以先通过keys()属性获取字典的键,再用for语句遍历字典的键,其访问方法如下:
4.4.2 字典的遍历
4.4.2 字典的遍历
dictHan = {"name":"韩梅梅","address":"杭州","age":19}
for key in dictHan.keys():
print("键%s的值是:%s"%(key,dictHan[key]))
【例4-52】通过键遍历字典。
键name的值是: 韩梅梅
键address的值是: 杭州
键age的值是: 19
2.通过值遍历字典
for value in 字典.values():
访问字典值
可以通过values()属性获取字典的值,并用for语句进行字典值的遍历,相关的用法如下:
4.4.2 字典的遍历
4.4.2 字典的遍历
dictHan = {"name":"韩梅梅","address":"杭州","age":19}
for value in dictHan.values():
print("字典中有值是:%s"%(value))
【例4-53】通过值遍历字典。
字典中有值是:韩梅梅
字典中有值是:杭州
字典中有值是:19
注意:通过值遍历字典有一个缺陷,就是无法获取字典的键,所以字典的遍历需要根据实际应用的需要来确定遍历方法。
3.通过键值对遍历字典
for key, vaule in 字典.items():
访问字典键值对
可以通过dict.items()属性获取字典的键-值对,并返回可遍历的(键,值)元组。items() 方法把字典中每对key和value组成一个元组,由此结合items的特性,我们同样可以用for语句,并结合key、value进行字典键-值对的遍历,相关的用法如下:
4.4.2 字典的遍历
4.4.2 字典的遍历
【例4-54】通过items()遍历字典。
('name', '韩梅梅') ('address', '杭州') ('age', 19)
键name的值是:韩梅梅
键address的值是:杭州
键age的值是:19
dictHan = {"name":"韩梅梅","address":"杭州","age":19}
for item in dictHan.items():
print(item, end=' ') # 返回字典中键-值对元组
print('
')
for key,value in dictHan.items():
print("键%s的值是:%s"%(key,value)) # 返回字典中的键、值
4.4.2 字典的遍历
边学边练:
定义一个字典,取班级前3学号同学,把学号和姓名定义成字典的键值对。
(1)遍历字典,打印出字典的键和值。
(2)对学号为“3”的同学改名为“张无忌”,添加学号为“4”的同学“令狐冲”,删除学号为“1”的同学。
(3)再次打印出字典中所有的键和值。
4.4.3 字典任务实现——英文文章词频统计
4.4.3 字典任务实现——英文文章词频统计
【任务描述】
小T要快速解读出乔布斯的演讲稿“4-55.txt”的关键内容,通过学过的列表、字典等数据类型的相关知识就可以实现。
4.4.3 字典任务实现——英文文章词频统计
如何快速解读文章?
如何统计词频?
词和词频用什么数据类型表示?
the:103,life:17
4.4.3 字典任务实现——英文文章词频统计
【任务分析】
先读入演讲稿,因为英文句子中的首个单词需要大写,所以为防止相同单词统计到不同单词中,小T将演讲稿中所有字符都转换成小写;同时,句子间有很多的标点符号,不利于后续的单词分割,统一替换成空格作为分隔符,这样整篇演讲稿就成了词间以空格分隔的字符串;然后将这个字符串切分成列表,对列表中每个单词出现的频次进行统计,单词和词频以字典形式存储。编程思路如下:
4.4.3 字典任务实现——英文文章词频统计
【任务分析】
(1)定义字符串,读入演讲稿。
(2)对字符串转换成小写、处理标点符号成空格。
(3)定义一个字典,保存词频,该字典以词为键,以频次为值。
(4)对(2)中得到的字符串进行切分,切分成列表。
(5)遍历列表,记录出现的词。若该词第一次出现,则设置以其为键的值;若非第一次出现,则其值加1。
(6)将字典按词频从高到低进行排序,并输出频次最高的50个词和词频。
4.4.3 字典任务实现——英文文章词频统计
读入演讲稿到字符串
键值=1
该词第一次出现
N
N
定义字典存储词频
访问列表完成
键值+1
排序输出词频
(1)定义字符串,读入演讲稿
(4)遍历列表,单词第一次出现,则将其键的值设为1;若非第一次出现,则其值加 1
处理字符串(大小写、标点等)
切分成列表
(2)处理字符串大小写、标点符号等,切分成列表
(3)定义字典存储词频,字典以词为键,以频次为值
Y
Y
(5)将词频排序输出
4.4.3 字典任务实现——英文文章词频统计
f=open('4-55.txt')
strWord=f.read()
f.close()
(1)定义字符串,读入演讲稿
4.4.3 字典任务实现——英文文章词频统计
for ts in '",-.:;?!\'':
strWord = strWord.replace(ts," ") # 把特殊字符给替换成空格
lstWord=strWord.replace('
',' ').lower().split() # 把所有单词转换成小写,并切分成列表
print(lstWord)
(2)处理字符串大小写、标点符号等,切分成列表
['thank', 'you', 'i', 'm', 'honored', 'to', 'be', 'with', 'you', 'today', 'for', 'your', 'commencement', 'from', 'one', 'of', 'the', 'finest', 'universities', ......
运行结果
4.4.3 字典任务实现——英文文章词频统计
dicWordcount={}
(3)定义字典存储词频,字典以词为键,以频次为值
for word in lstWord:
if word in dicWordcount.keys():
dicWordcount[word]=dicWordcount[word]+1
else:
dicWordcount[word]=1
(4)遍历列表,单词第一次出现,则将其键的值设为1;若非第一次出现,则其值加 1。
知识补充
sorted(iterable[, key[, reverse]])
(1)iterable指定要排序的对象,可以是列表、字符串、字典、集合等;
(2)key为函数,指定取待排序元素的哪一项进行排序
(3)reverse是一个bool变量,默认为false(升序排列),定义为True时将按降序排列。
lstResult=sorted(dicWordcount.items(),key=lambda x:x[1], reverse=True)
4.4.3 字典任务实现——英文文章词频统计
知识补充
Lambda函数又称匿名函数,匿名函数就是没有名字的函数,基本语法格式
lambda 形式参数 : 函数表达式
例子 lambda arg1, arg2: arg1 + arg2
lstResult=sorted(dicWordcount.items(),key=lambda x:x[1], reverse=True)
4.4.3 字典任务实现——英文文章词频统计
4.4.3 字典任务实现——英文文章词频统计
lstResult=sorted(dicWordcount.items(),key=lambda x:x[1],reverse=True) # 按字典的值排序
print(lstResult[0:50])
(5)将词频排序输出
[('the', 103), ('i', 94), ('to', 71), ('and', 69), ('it', 52), ('was', 49), ('a', 46), ('that', 43), ('of', 41), ('you', 36), ('in', 36), ('my', 30), ('is', 27), ('out', 20), ('with', 19), ('had', 19), ('t', 19), ('for', 18), ('life', 17), ('so', 17), ('me', 17), ('your', 15), ('as', 15), ('all', 15), ('on', 15), ('what', 15), ('have', 15), ('be', 14), ('but', 14), ('from', 13), ('college', 13), ('when', 13), ('s', 11), ('do', 11), ('about', 10), ('at', 10), ('we', 10), ('one', 9), ('this', 9), ('no', 9), ('they', 9), ('would', 9), ('years', 9), ('apple', 9), ('just', 8), ('very', 8), ('if', 8), ('never', 7), ('dropped', 7), ('months', 7)]
运行结果
life
college
years、months
apple
dropped
4.4.3 字典任务实现——英文文章词频统计
英文文章解读
$$