人教_中图版(2019)高中信息技术必修1课件:2.4.3算法与程序实现的综合应用(14张幻灯片)

文档属性

名称 人教_中图版(2019)高中信息技术必修1课件:2.4.3算法与程序实现的综合应用(14张幻灯片)
格式 pptx
文件大小 4.2MB
资源类型 教案
版本资源 中图版(2019)
科目 信息技术(信息科技)
更新时间 2020-07-22 07:57:59

图片预览

文档简介

算法与程序实现的综合应用
“查找文稿中的高频词汇”的问题
问题:学校开展经典诵读活动。小明在阅读《三国演义》时,为了分析小说的写作特色,想把小说中出现次数最多的20个词查找出来。想一想小明如何通过编写程序来实现呢?
分析问题
设计算法
编程实现与调试
保存文件,调试运行程序
分析问题:
已知条件:文本文件《三国演义);
求解目标:《三国演义》中的高频词(以出现次数最多的20个词为例);
已知与未知的关系:统计《三国演义》文本中词频,找出出现次数最多的20个词。
要解决《三国演义》小说中高频词的查找问题,使用手工方式逐一查找统计,不仅费时费力,而且任务完成难度也非常大,此时,我们可以对问题进行抽象处理,确定出能用计算机解决的任务,将其转化为可计算问题,通过编程实现问题的高效求解
设计算法:
在查找文稿中高频词的问题求解中,除了要完成读取文件和显示输出内容,还要重点实现分词、词频统计和排序等功能,因此,该问题可以分解为如图所示的5个功能
查找文稿中高频词
读取文件
中文分词
词频排序
词频统计
显示输出
1)读取文件
提前准备好《三国演义》文本文件。打开并阅读文件内容。
2)中文分词
中文分词处理(如jieba分词)
待处理的中文字符串
分词后的中文“词汇表”
3)词频统计
词频统计的过程主要应用了枚举算法,对于“词汇表”中的每一个词,依次计算出各自的出现次数,生成一个包含词和次数的“统计表”。需要注意的是,?在算法设计时还要考虑问题求解的“高频词”应是具有明确指向意义的词语,不包括单个字的词。
词汇表读完了
是否为单字的词
统计表中已有该词
统计结束
统计开始
读取一个词
统计表中该词次数+1
统计表中添加该词,次数为1
true
false
false
true
false
true
4)词频排序:
要找到出现次数最多的20个词,需要对统计出来的词语按次数从大到小进行排序。排序的算法有很多,我们可以自己设计排序算法,也可以调用已有的排序算法功能,如在Python语言中直接调用内置的排序函数快速实现序列排序
5)显示输出
降序排序后,序列中的前20个元素可认为是《三国演义》小说中出现次数最多的20个词。此时,只需要显示输出序列中这前20个元素的值(包括词和对应次数)即可。
#打开"三国演义,txt"文件,读取文件内容
import?jieba #导入jieba分词
f?=?open("三国演义.txt",?"r",?encoding="utf-8") #打开文件
txt?=?f.read() #读取文件内容
#分词 #将中文文本拆分为词语保存到列表中
words?=?jieba?.1cut(txt)
#统计
counts={} #建立空字典,用于存储词和出现次数
for?word?in?words?:
if?len(word)?== 1: #单字的词语忽略不计
continue
else:
counts[word]?=?counts.get(word,?0)?+?1 #出现次数+1
#排序
items?=?list(counts.items()) #字典转换为列表后才可以排序
items.?sort(key=lambda?x:x[1],?reverse=True) #对列表items按"次数”降序排序
#输出前20个元素的值
for?i?in?range(20):
print(items[i][0],items[i][1]) #输出词和出现次数
3.编程实现与调试
分析《三国演义》小说高频词查找程序的运行结果,会发现其中“诸葛亮”“孔明曰”“孔明”在小说中其实指向同一人物,“关羽”“关公”“云长”是同人物称谓,?同理,“刘备”“玄德”“玄德日”及“曹操”“孟德”“丞相”等也都是多个词语指向同一人物。此时,需要修改算法,利用选择结构将这些词语进行合并处理
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
4.保存文件,调试运行程序
较简单的调试方法是通过函数print()直接输出程序执行过程中的变量值。
断点调试是一种较为直观的程序调试方式,它通过设置断点跟踪变量的取值,观察运行结果,进行程序调试。断点调试的基本方法为:
■进入调试状态:
■设置断点;
■检查运行状态下各个变量的值,确定错误的位置,并进行修改:
■反复调试直至程序运行正确
实践活动
编程查找小说中的主要人物
修改前面编写的《三国演义》小说高频词查找程序,实现功能:找出小说中出场次数最多的10位人物。
1,在前面已经查找到的20个高频词中,包含有“却说”“二人”“不能”等与人名无关的词语。想一想如何去除这些词语,只显示10位出场次数最多的主要人物的人名?试着修改程序。
2,统计小说中的高频词,不仅可以帮助我们了解其中的主要人物,还可以用来分析人物的主要活动地点及人物间的关系等。试着编程分析自己感兴趣的一本小说,说一说你的发现。
感谢聆听