2.4.3 算法与程序实现的综合应用 课件(23张ppt)+教案

文档属性

名称 2.4.3 算法与程序实现的综合应用 课件(23张ppt)+教案
格式 zip
文件大小 3.0MB
资源类型 教案
版本资源 中图版(2019)
科目 信息技术(信息科技)
更新时间 2020-12-09 11:01:45

文档简介

(共23张PPT)
2.4.3算法与程序实现的综合应用
《中共中央关于制定国民经济和社会发展第十四个五年规划和二〇三五年远景目标的建议》
十九大报告
  “词云”就是对网络文本中出现频率较高的“关键词”予以视觉上的突出,形成“关键词云层”或“关键词渲染”,从而过滤掉大量的文本信息,使浏览网页者只要一眼扫过文本就可以领略文本的主旨。
项目描述:
  学校开展经典诵读活动,小明在阅读《三国演义》时,为了分析小说的写作特色,想把小说中出现次数最多的20个词查找出来。想一想,小明是否能从纸质小说中找出这20个高频词?如果用计算机解决该问题,又应如何实现?
分析问题
设计算法
保存文件,调试运行
编程实现与调试
1.分析问题
  小明在阅读《三国演义》时,为了分析小说的写作特色,想把小说中出现次数最多的20个词查找出来。使用手工方式逐一查找统计,费时费力而且任务难度大,此时,我们可以将其转化为可计算问题,通过编程实现问题的高效求解。
已知条件:文本文件《三国演义);
求解目标:《三国演义》中的高频词(以出现次数最多的20个词为例);
已知与未知的关系:统计《三国演义》文本中词频,
找出出现次数最
多的20个词。
2.设计算法
  在问题求解中,除了要完成读取文件和显示输出内容,还要重点实现分词、词频统计和排序等功能。如图所示:
  由于中文文本是由连续的字序列构成,没有明显的词语界限,因此分词处理的算法比较复杂。有同学知道分词的算法吗?
  jieba
是目前最好的
Python
中文分词组件,它主要有以下特性:支持3种分词模式,支持繁体分词,支持自定义词典。
  通过jieba的分词功能,我们可以将《三国演义》中的汉字字符序列切分成一个个单独的词,组合成一个“词汇表”。
  如何进行词频统计?大家是否还记得之前解决票据中模糊数字推断问题?
  在词频统计的过程中主要应用了枚举算法,对于“词汇表”中的每一个词,依次计算出各自的出现次数,生成一个包含词和次数的“统计表”。
  请同学们将这个算法的流程补充完整。
词汇表读完了
是否为单字的词
统计表中已有该词
统计结束
统计开始
读取一个词
统计表中该词次数+1
统计表中添加该词,次数为1
true
false
false
true
false
true
读取文件实现
f
=
open("三国演义.txt",
"r",
encoding="utf-8")
#
打开文件
txt
=
f.read()
           
#
读取文件内容
  
注意:打开文件时要注意编码格式,待分词的字符串可以是
unicode

UTF-8
字符串、GBK
字符串。注意:不建议直接输入
GBK
字符串,可能无法预料地错误解码成
UTF-8。
3.编程实现与调试
中文分词实现
import
jieba
#
导入jieba分词
words
=
jieba.lcut(txt)
#
将句子拆分为词语保存到列表中
函数
描述
jieba.cut(s)
精确模式,返回一个可迭代的数据类型
jieba.cut(s,
cut_all=True)
全模式,输出文本s中所有可能单词
jieba.cut_for_search(s)
搜索引擎模式,适合搜索引擎建立索引的分词结果
jieba.lcut(s)
精确模式,返回一个列表类型,建议使用
jieba.lcut(s,
cut_all=True)
全模式,返回一个列表类型,建议使用
jieba.lcut_for_search(s)
搜索引擎模式,返回一个列表类型,建议使用
jieba.add_word(w)
向分词词典中增加新词w
jieba库
词频统计实现
  统计结果保存到哪里?这里我们需要使用Python中一个特殊的数据类型,字典。
counts
=
{}
#
建立空字典,用于存储词和出现次数
for
word
in
words:
if
len(word)
==
1:
#
单字的词语忽略不计
continue
else:
counts[word]
=
counts.get(word,
0)
+
1
#
出现次数+1
lambda函数
用于定义一种特殊的函数——匿名函数,又称lambda函数。
匿名函数并非没有名字,而是将函数名作为函数结果返回,如下:
<函数名>
=
lambda
<参数列表>:
<表达式>
lambda函数与正常函数一样,等价于下面形式:
def
<函数名>(<参数列表>):
return
<表达式>
lambda函数作为参数
counts
=
{"Apple":25,
"Orange":40,
"Green
tea":28,
"Coffee":15}
L
=
list(counts.items())
L.sort(key=lambda
x:x[1],
reverse=True)
则排序后列表L的值为:[("Orange",
40),
("Green
tea",
28),
("Apple",
25),("Coffee",
15)]。
显示输出实现
for
i
in
range(20):
print(items[i][0],
items[i][1])
   #
输出词和出现次数
  编程解决问题不是一蹴而就的。通常,我们要根据程序运行结果,围绕求解目标,改进算法、优化程序,以实现问题的最终有效解决。
  我们目前的程序运行得到的结果是什么?有什么问题吗?
  我们可以利用Python语言中的if语句将这些词语进行合并处理,具体编码实现如下:
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
import
jieba
f=open("三国演义.txt","r",encoding="utf-8")
txt=f.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(20):
print(items[i][0],items[i][1])
优化前代码:
import
jieba
f=open("三国演义.txt","r",encoding="utf-8")
txt=f.read()
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(20):
print(items[i][0],items[i][1])
优化后代码:
4.保存文件,调试运行程序
  为了更有效地查找、修改程序中存在的错误,需要仔细阅读和分析程序语句,掌握必要的调试方法。断点调试是一种较为直观的程序调试方式,其基本方法为:
  进入调试状态;
  设置断点;
  检查运行状态下各个变量的值,确定错误的位置,并进行修改;
  反复调试直至程序运行正确。
修改前面编写的《三国演义》小说高频词查找程序,实现功能:找出小说中出场次数最多的10位人物。
1.在前面已经查找到的20个高频词中,包含有“却说”“二人”“不能”等与人名无关的词语。想一想如何去除这些词语,只显示10位出场次数最多的主要人物的人名?试着修改程序。
2.统计小说中的高频词,不仅可以帮助我们了解其中的主要人物,还可以用来分析人物的主要活动地点及人物间的关系等。试着编程分析自己感兴趣的一本小说,说一说你的发现。
课后作业:(


线
)课

2.4.3
算法与程序实现的综合应用
课型
新授课
课时安排
1




(
授课教师

授课班级

)教学目标
深入理解计算机解决问题的基本过程
认识算法效率,能结合程序运行结果对算法进行行完善和优化,进行创造性探索
掌握调试运行程序的基本方法
一、情景导入:以“十九大报告”和《中共中央关于制定国民经济和社会发展第十四个五年规划和二〇三五年远景目标的建议》、《三国演义》的词云图片,导入本节课题,给出本节课项目——查找文稿中的高频词
二、项目探究:
1.
项目描述:
学校开展经典诵读活动,小明在阅读《三国演义》时,为了分析小说的写作特色,想把小说中出现次数最多的20个词查找出来。想一想,小明是否能从纸质小说中找出这20个高频词?如果用计算机解决该问题,又应如何实现?
分析问题:
已知条件:文本文件《三国演义);
求解目标:《三国演义》中的高频词(以出现次数最多的20个词为例);
已知与未知的关系:统计《三国演义》文本中词频,
找出出现次数最多的20个词。
设计算法:
在问题求解中,除了要完成读取文件和显示输出内容,还要重点实现分词、词频统计和排序等功能。如图所示:
教学难点
教学重点
重点:能根据程序运行结果对算法优化
难点:调试运行程序的基本方法
教学
方法
讲授法、、项目探究法、讨论交流法、云课堂演示等
板书设计
2.4.1基于解析算法的问题解决
分析问题——设计算法——编码调试
完善、优化
读取文件:
变量名=open(文件路径及文件名,打开模式)
Jieba:第三方中文分词函数库
教学反思
本节课对无编程基础的学生来说有点难,因此应该多讲解,然后在展开讨论探索等环节。程序语句要一句一句解释,加强学生对代码的理解,为深入学习python语言打下基础。
分组探究:请同学们完善这个算法的流程图。(教师引导)
编程实现与调试(教师利用云课堂展示程序代码并讲解)
1.
读取文件实现
f
=
open("三国演义.txt",
"r",
encoding="utf-8")
#
打开文件
txt
=
f.read()
           
#
读取文件内容
2.
中文分词实现
import
jieba
#
导入jieba分词
words
=
jieba.lcut(txt)
#
将句子拆分为词语保存到列表中
3.
词频统计实现
  统计结果保存到哪里?这里我们需要使用Python中一个特殊的数据类型,字典。
counts
=
{}
#
建立空字典,用于存储词和出现次数
for
word
in
words:
if
len(word)
==
1:
#
单字的词语忽略不计
continue
else:
counts[word]
=
counts.get(word,
0)
+
1
#
出现次数+1
or
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
lambda函数:
<函数名>
=
lambda
<参数列表>:
<表达式>
等价于下面形式:
def
<函数名>(<参数列表>):
4.
显示输出实现
for
i
in
range(20):
print(items[i][0],
items[i][1])
   #
输出词和出现次数
三.讨论交流:
编程解决问题不是一蹴而就的。通常,我们要根据程序运行结果,围绕求解目标,改进算法、优化程序,以实现问题的最终有效解决。
我们目前的程序运行得到的结果是什么?有什么问题吗?
教师给出利用if语句将这些词语进行合并处理的编码:
四、学生调试运行优化后的程序代码,反复调试直至程序运行正确,体验python程序运行的过程。
五、作业:修改前面编写的《三国演义》小说高频词查找程序,实现功能:找出小说中出场次数最多的10位人物。
1.在前面已经查找到的20个高频词中,包含有“却说”“二人”“不能”等与人名无关的词语。想一想如何去除这些词语,只显示10位出场次数最多的主要人物的人名?试着修改程序。
2.统计小说中的高频词,不仅可以帮助我们了解其中的主要人物,还可以用来分析人物的主要活动地点及人物间的关系等。试着编程分析自己感兴趣的一本小说,说一说你的发现。
六、课外拓展:
安装python第三方库jieba库的方法:
Python快捷方式图标——右击“属性”——“打开文件所在位置”——scripts——pip
复制路径后按cmd——cd+我们复制的地址后按Enter,
然后在输入:pip
install
jieba
即可。