1、算法与程序综合应用2(第二 十 课 时)引 入 编程解决问题文本数据 数值数据 文本分析 校园文化热词71315232533051015202530351在路上最美的遇见顶层设计行为文化班级文化扣好人生第一粒扣子文本分析 老人与海词云图文本分析 某地区上半年舆情领域分布吏治反腐吏治反腐涉警涉法涉警涉法民生投诉民生投诉科教文卫科教文卫突发卫生突发卫生事件事件行业舆情行业舆情企业舆情企业舆情其他其他文本分析 情感分布文本情感分析问题呈现 学校开展经典诵读活动,小明在阅读三国演义时,为了分析该文学作品内容及其写作特色,想把小说中出现次数最多的20个词查找出来。如何通过编写程序来实现呢?问题分析文本文
2、件文本文件三国演义三国演义已知找出高频词找出高频词求解目标 求解过程读取文件读取文件中文分词中文分词词频统计词频统计词频排序词频排序显示输出显示输出词、词、出现次数、出现次数、前前2020问题分析读取文件读取文件中文分词中文分词统计词频统计词频词频排序词频排序显示输出显示输出查找文章高频词1.读取文件中文中文分词分词词频词频统计统计词频词频排序排序读取读取文件文件显示显示输出输出 1.读取文件实践活动一:读取文本数据 阅读任务单活动一的学习材料;输入并尝试理解相关语句。1.读取文件f=open(“d:/三国演义.txt,r,encoding=utf-8)txt=f.read()#读取文件内容#
3、打开指定文件,创建返回一个文件对象1.读取文件问题:运行代码,看不到效果。有什么办法可以观察和了解程序的进展呢?1.读取文件调试方法:函数print()/print(type()输出输出变量值或变量类型,观察观察程序的进展。1.读取文件f=open(d:/三国演义.txt,r,encoding=utf-8)txt=f.read()试一试:下面代码执行后的结果。print(txt)print(type(txt)1.读取文件1.读取文件中文中文分词分词词频词频统计统计词频词频排序排序读取读取文件文件显示显示输出输出 open()read()2.中文分词中文中文分词分词词频词频统计统计词频词频排序排
4、序读取读取文件文件显示显示输出输出 open()read()2.中文分词中文分词就是将连续的字序列按照一定的规范重新组合成词序列的过程。如:小明是一名学生。小明 是 一名 学生。.2.中文分词.jieba模块,对中文有着很强大的分词能力。由于它是第三方模块,使用前需要下载安装。2.中文分词实践活动二:请同学们参照任务单中说明完成jieba模块的安装。自学中文分词相关内容。2.中文分词.import jieba.words=jieba.lcut(txt)#导入jieba模块#将txt中的中文拆分为词语保存到words中2.中文分词。import jieba。f=open(d:/三国演义义.txt
5、,r,encoding=utf-8)。txt=f.read()。words=jieba.lcut(txt)2.中文分词试一试:利用前面用到的调试方法,观察程序的进展。2.中文分词2.中文分词中文中文分词分词词频词频统计统计词频词频排序排序读取读取文件文件显示显示输出输出 3.词频统计中文中文分词分词词频词频统计统计词频词频排序排序读取读取文件文件显示显示输出输出 open()read().jiebalcut()3.词频统计解析算法:表达式枚举算法:逐一判断实践活动三:如何统计词语的出现次数呢?3.词频统计如何利用枚举算法来统计词频呢?提示:高频词应该是具有明确指向意义的词语,不包括单字的词。3
6、.词频统计统计表中添加该词,次数为1统计开始False统计结束True是单字词FalseTrueFalseTrue统计表中已有该词统计表中该词次数+13.词频统计依序从词表中取一词3.词频统计想一想:如何记录词语内容及其出现次数呢?(假设词频为:汉朝15次,建宁6次,英雄60次)汉朝汉朝 建宁建宁 英雄英雄 1515 6 6 6060 方案方案1 1A0A0A1A1A2A2A3A3B0B0B1B1B2B2B3B3 汉朝汉朝 1515 建宁建宁 6 6 方案方案2 2A0A0A1A1A2A2A3A3这种记录方式,一旦词语顺序发生调整和变化,容易出现次数对应上的错误。3.词频统计 :6:新的数据类
7、型字典香蕉5字典是无序集合。,苹果:山楂2键值对(key-value)字典中键与值是一一对应的,数据没有先后顺序关系。3.词频统计活动:参考任务单活动三的材料,学习字典的相关内容。尝试编写相关代码,实现词频统计。3.词频统计counts=#建立空字典,用于存储词和出现次数#单字的词语忽略不计for word in words:if len(word)=1:continue else:countsword=counts.get(word,0)+13.词频统计试一试:利用前面用到的调试方法,观察程序的进展。3.词频统计3.词频统计中文中文分词分词词频词频统计统计词频词频排序排序读取读取文件文件显示
8、显示输出输出 open()read().jiebalcut().枚举、字典枚举、字典4.词频排序中文中文分词分词词频词频统计统计词频词频排序排序读取读取文件文件显示显示输出输出 open()read().jiebalcut().枚举、字典枚举、字典4.词频排序实践活动四:如何实现按词频排序?思考问题1:词频存储在字典中。字典中的元素能否进行排序呢?思考问题2:如何实现按词语的出现次数进行排序?参看任务单的学习材料。动手尝试编程实现。4.词频排序items=list(counts.items()#字典转化为列表items.sort()#按出现次数进行降序排列降序按出现次数排序reverse=Tr
9、uekey=lambda x:x1,4.词频排序试一试:运行调试程序,观察程序进展。4.词频排序4.词频排序中文中文分词分词词频词频统计统计词频词频排序排序读取读取文件文件显示显示输出输出 open()read().jiebalcut().字典、枚举字典、枚举list ()sort()5.显示输出中文中文分词分词词频词频统计统计词频词频排序排序读取读取文件文件显示显示输出输出 open()read().jiebalcut().字典、枚举字典、枚举list ()sort()5.显示输出实践:请同学们思考并自行完成显示输出功能。5.显示输出#输出前20个元素的值for i in range(20)
10、:print(itemsi0,itemsi1)5.显示输出查找文章高频词中文中文分词分词词频词频统计统计词频词频排序排序读取读取文件文件显示显示输出输出 open()read().jiebalcut().字典、枚举字典、枚举list ()sort()循环循环结构结构小明的收获曹操 595孔明 534将军 508却说 446玄德 396丞相 323关公 320二人 307荆州 297玄德曰 275不可 272不能 262如此 252孔明曰 247张飞 228主公 223商议 217刘备 196引兵 190军士 184拓 展刘备曹操诸葛亮关羽张飞赵云吕布司马懿孙权周瑜三国演义三国演义作品核心人物作品核心人物拓 展蜀国主要人物在全书活动分布情况蜀国主要人物在全书活动分布情况5.显示输出查找文章高频词的问题复杂问题解决分解算法与程序 枚举算法字典类型调试程序文本分析一般思路技巧方法课后练习 1.请同学们修改程序,实现如下功能:查找出场次数最多的5个人物。2.尝试着分析其它作品如乡土中国老人与海,说一说你的发现。