1、课程基本信息课题算法与程序综合应用 2算法与程序综合应用 2教科书书名:必修 1:数据与计算 出版社:人民教育出版社/中国地图出版社 出版日期:2019 年 6 月学生信息姓名学校班级学号学习目标解决一个文本数据处理的问题。经过本课的学习你将了解 Python 进行文本分析的一般思路,体验利用编程解决文本问题的全过程。课前学习任务复习列表类型、常用算法;下载资源包,安装 jieba 库;课上学习任务【学习任务一】读取文本数据:【学习任务一】读取文本数据:Python 可以通过读取文件的方式,批量获取数据。一般,通用 open 函数和对文件执行 read方法来实现。扩展阅读:1、open 函数:
2、在 Python 中,如果想要操作文件,首先需要创建或者打开指定的文件,并创建一个文件对象,而这些工作可以通过内置的 open()函数实现。open()函数用于创建或打开指定文件,该函数的常用语法格式如下:file=open(file_name,mode=r ,buffering=-1 ,encoding=None)此格式中,用 括起来的部分为可选参数,即可以使用也可以省略。其中,各个参数所代表的含义如下:file:表示要创建的文件对象。file_name:要创建或打开文件的文件名称,该名称要用引号(单引号或双引号都可以)括起来。需要注意的是,如果要打开的文件和当前执行的代码文件位于同一目录,
3、则直接写文件名即可;否则,此参数需要指定打开文件所在的完整路径。mode:可选参数,用于指定文件的打开模式。如果不写,则默认以只读(r)模式打开文件。r 模式:只读模式打开文件,读文件内容的指针会放在文件的开头。w 模式:以只写模式打开文件,若该文件存在,打开时会清空文件中原有的内容。a:以追加模式打开一个文件,对文件只有写入权限,如果文件已经存在,文件指针将放在文件的末尾(即新写入内容会位于已有内容之后);反之,则会创建新文件。buffering:可选参数,用于指定对文件做读写操作时,是否使用缓冲区(本节后续会详细介绍)。encoding:手动设定打开文件时所使用的编码格式,不同平台的 ec
4、oding 参数值也不同,以 Windows 为例,其默认为 cp936(实际上就是 GBK 编码)2、fileObject.read 方法:方法:用于从文件读取指定的字节数,如果未给定或为负则读取所有。fileObject.read(size)size 从文件中读取的字符数,包括 n 字符。【学习任务二】实现中文分词【学习任务二】实现中文分词拓展阅读:Jieba 分词模块的三种模式:1、lcut()精准模式:把文本精准地分开,不存在冗余例:jieba.lcut(中国是一个伟大的国家)结果是:中国,是,一个,伟大,的,国家2、cut()全模式:把文中所有可能的词语都扫描出来,存在冗余例:jie
5、ba.lcut(中国是一个伟大的国家,cut_all=True)结果是:中国,国是,一个,伟大,的,国家3、cut_for_search()搜索引擎模式:在精准模式的基础上,再次对长词进行切分 例:jieba.lcut_for_search(中华人民共和国是伟大的)结果是:中华,华人,人民,共和,共和国,中华人民共和国,是,伟大,的【学习任务三】统计中文词频(1、字典是 Python 提供的一种常用的数据结构,它用于存放具有映射关系的数据。由于字典中的 key 是非常关键的数据,而且程序需要通过 key 来访问 value,因此字典中的 key 不允许重复。2、字典的常用方法:除了 get()
6、之外,字典常用的方法还有(1)clear()方法clear()用于清空字典中所有的 key-value 对,对一个字典执行 clear()方法之后,该字典就会变成一个空字典。例:cars=BMW:8.5,BENS:8.3,AUDI:7.9print(cars)结果:BMW:8.5,BENS:8.3,AUDI:7.9cars.clear()#清空 cars 所有 key-value 对print(cars)结果:(2)tems()、keys()、values()items()、keys()、values()分别用于获取字典中的所有 key-value 对、所有 key、所有 value。Pyth
7、on 不希望用户直接操作这几个方法,但可通过 list()函数把它们转换成列表。例:cars=BMW:8.5,BENS:8.3,AUDI:7.9#获取字典所有的 key-value 对,返回一个 dict_items 对象ims=cars.items()print(type(ims)#将 dict_items 转换成列表print(list(ims)#(BMW,8.5),(BENS,8.3),(AUDI,7.9)【学习任务四】排序中文词频1、Lambda 函数在 Python 中有两种函数,一种是 def 定义的函数,另一种是 lambda 函数,也就是大家常说的匿名函数。lambda 用于定
8、义简单的,能够在一行内表示的函数。用法:=lambda:用 lambda 函数首先减少了代码的冗余,其次,用 lambda 函数,不用费神地去命名一个函数的名字,可以快速的实现某项功能,最后,lambda 函数使代码的可读性更强,程序看起来更加简洁。例 1:c=lambda x,y,z:x*y*zc(2,3,4):例 2:sentence=Welcome To Beijing!words=sentence.split()lengths =map(lambda x:len(x),words)print(list(lengths)7,2,82、列表的.sort 函数:sort()函数用于对原列表进
9、行排序,如果指定参数,则使用比较函数指定的比较函数。list.sort(key=None,reverse=False)key-主要是用来进行比较的元素,只有一个参数,具体的函数的参数就是取自于可迭代对象中,指定可迭代对象中的一个元素来进行排序。reverse-排序规则,reverse=True 降序,reverse=False 升序(默认)。推荐的学习资源1 中学生可以这样学 Python 清华大学出版社 董付国 应根球著2https:/ 1 和必修 2 模块配套资源内有本课及全书所有资源包。课程基本信息课题算法与程序综合应用 2教科书书名:信息技术必修 1 出版社:人民教育出版社;中国地图出
10、版社 出版日期:2019 年 6 月教学目标教学目标:了解文本分析的一般思路,体验解决文本问题的全过程;能利用读取文本文件的方式获取数据;认识字典数据类型,能利用字典存储和管理数据;知道 jieba 库的功能,能利用 jieba 库实现中文分词;能选择并利用已学算法,实现词频统计;学习程序调试方法,提高编程能力;教学重点:文本分析的思路;读取文件的方法;字典及其使用;jieba 库的功能及使用;教学难点:运用算法与编程知识来解决问题教学过程时间教学环节主要师生活动2 分钟情境引入利用 python 进行编程,我们不仅能处理数值数据、解决数学问题。它在处理文本数据,进行文本分析方面也颇具优势。比
11、如,我们看到的热词榜、词云图、舆情趋势、文本情感分析等,这些都是利用编程来对文本进行分析处理的结果。这节课,我们就一起来分析解决一个文本数据处理的问题。小明在阅读时萌生了利用编程分析文学作品的想法,来看看他具体的需求。小明在阅读三国演义时,为了分析这部文学作品的内容及其写作特色,想把作品中出现次数最多的 20 个词查找出来。如何利用编程来实现呢?3 分钟问题分解要解决的核心问题是查找文章的高频词已知条件是待处理的文本数据;编程实现时需要有读取模块。求解目标:输出高频词 20 个。编程时需要有显示输出模块。如何求解的呢?我们可以根据结果 逆推一下。求解过程分析:分析统计、输出的是词语。但原始文本
12、数据是整篇文章。人能识别提取文章中的词语,但计算机不行。因此,需要想办法将整篇文章切分或转换成相应的词语集合。这需要中文分词功能。需要统计每个词语的出现次数。这需要词频统计功能。根据词语的出现次数进行排序比较,选出符合要求的前 20 个词语。这需要词频排序功能。据前面的分析,我们可以将这个较为复杂的大问题分解为读取文件、中文分词、统计词频、词频排序和显示输出五个功能模块。16 分钟实践探究51、读取文件实践活动一:请同学们自行阅读任务单活动一学习材料。输入并尝试理解相关语句。代码分析:读取文件通过两条语句来完成。第一条语句,打开指定的文件,创建一个文件对象;第二条语句,读取文件中的全部内容。调
13、试方法及演示:一个非常简单但有效的调试程序方法,我们可以利用 print 函数随时输出变量的内容或类型,来观察程序的进展。程序演示与分析:见视频 2、中文分词实践探究(1)中文分词:读取文件输入数据已实现。下面我们来看看中文分词功能。文本数据已输入。我们需要将文本内容进行分词。问:什么是中文分词呢?中文分词就是将连续的字序列按照一定的规范重新组合成词序列的过程。问:为什么中文需要分词?中文是以字为基本书写单位,词语之间没有明显的区分标记,因此进行中文处理时通常先将文本字符串切分成合理的词语序列,然后再进行其它分析处理。(2)jieba 与模块Jieba 模块对中文有着强大的分词能力。Jieba
14、 模块是我们目前为止接触和使用的第一个第三方库。简要介绍下.Ptyhon 语言中模块可分为标准模块、第三方模块和自定义模块。标准库是默认自带,不需要下载安装的。如之前我们接触和使用过的 random 随机数库。第三方模块是需要下载安装的模块。Jieba 模块是使用前需要下载安装。(3)实践活动 2:下面请同学们参照任务单中说明完成 jieba 模块的安装。自学中文分词相关语句的基本使用方法。(4)代码分析与效果演示:中文分词功能通过两条语句实现。首先导入分词模块。接着利用模块中lcut 方法,将变量 txt 中的文本切分成词语后赋值给变量 words。老师来演示一下调试过程。仔细观察下。WOR
15、S 变量的内容是由中括号括起来,中间用逗号分开。表明它是列表类型。列表中的元素就是分好的词语。(视频)3、词频统计实践活动三:请同学们综合应用前面所学内容分析并确定算法。尝试绘制算法流程图。(1)算法的选择:解析算法需要找到已知条件与求解目标之间关系的表达式。统计每个词语的词频,能否找到这样的表达式呢?显然没有。枚举算法的思路是确定范围并逐一判断。显而易见,枚举算法适合解决统计词频这个问题。(2)算法的描述:利用枚举算法如何实现词频统计?我们一起梳理下词频统计的算法思实践探究路。从词语表中取一词,判断是否是单字词,如果是,忽略不计,能出本次循环。再到词语表中依序取一词,判断是否是单字词,如果不
16、是,判断是否统计过。如果是第一次统计,需要将词语加入统计表并记录其出现次数为 1;如果已经统计过,则原出现次数加 1。直到依序取完所有的词,统计结束。(结合流程图)(3)字典类型及使用 问题;需要统计出词语内容及其出现次数。你打算用什么方式来记录和存储呢?我们之前学过利用列表来存储一组数据集合。有的同学表示:利用两个列表分别记录词语内容及出现次数。还有的同学打算利用一个列表,单数索引值存内容,双数索引值存出现次数。两种方案都可以实现。但采用列表这种方式,一旦词语顺序发生调整,容易出现次数对应上的错误。字典类型:字典。它能较好地刚才出现的问题。字典的每个元素是个键值对,之间用冒号分隔。冒号左侧是
17、创建后不可变的数据,称为键;冒号右侧是可变数据,称为值。如水果价格数据,可采用字典来记录。字典是无序集合。字典类型用花括号括起其中的元素,键与值之间用冒号分隔。通常用键来访问值。(4)代码的分析与演示请同学们依据算法流程图编写词频统计相关代码。代码分析与演示。4、词频排序实践活动四:问题 1:字典中的元素能否进行排序呢?问题 2:如何实现按词语的出现次数进行排序?参看资源包中的导学资料。动手尝试编程实现。分析:问题 1:因为字典是无序集合,所以字典中的元素不能进行排序。怎么解决?需要将字典转换成有序集合。如转换成列表类型。列表类有排序函数可以实现快速排序。这样问题 2 迎刃而解。代码分析与演示
18、:第一条语句,用 list 方法字典转为列表;第二条语句,利用列表的排序函数,实现排序。排序规则为按出现次数降序排列。5、显示输出 实践活动:自己学一学试一试。代码分析及效果演示。实践探究利用 for 语句,输出列表中前 20 个元素即可。小结:经历了读取文件、显示输出 五个模块,查找文章高频词的问题得以解决。2 分钟知识扩展四、扩展通过分析前 20 个高频词,我们可以了解到作品的主要人物、地点及大体猜测作品的背景。(将军等说明有战争。)但同进也发现了不足,出现多词语指向同一人现象及包含意义不大的词语,需要我们进一步优化。同学们可以在此基础上继续研究分析数据,统计每个人物在全书总的出现次数,寻
19、找作品的核心人物。可以统计人物在全书各章回中的出现次数,总体进行分析人物在全书中的活动情况。如图中这一部分关羽有了密集出现,这是关羽过五关斩六将北上寻找刘备的精彩情节。再比如 80 回后,是诸葛亮接受先帝托孤,鞠躬尽瘁的具体表现。分析后利于我们对这部经典作品的深入理解1 分钟课堂小结与练习五、课堂小结:分治思想:用计算机解决复杂问题时,可以将大问题分解成若干个小的功能模块,然后逐一分析实现。算法与程序方面我们重温了枚举算法、学习了新的数据类型-字典,应用了一种简单有效的调试方法。文本数据的处理问题,我们了解了文本分析的一般思路,学习了文本数据处理的技巧和方法。六、课后练习:1.请同学们修改程序
20、,实现如下功能:查找出场次数最多的 5 个人物。2.尝试着分析其它作品如乡土中国老人与海,说一说你的发现。3利用思维导图工具,梳理本章核心内容与关键能力课程基本信息课题算法与程序综合应用 2教科书书名:高中信息技术必修 1数据与计算 出版社:人民教育出版社&中国地图出版社 出版日期:2019 年 6 月学生信息姓名学校班级学号课后练习1.请同学们修改程序,实现如下功能:查找出场次数最多的 5 个人物。提示:计算机如何识别和确认词语是人名。如果完全靠程序、靠机器识别较难。人机合作比较容易,可以计算机列出前 100 个高频词,人从中挑选出人名。2.尝试着分析其它作品如老人与海,说一说你的发现。算法
21、与程序综合应用2(第二十课时)高中信息技术引 入 编程解决问题文本数据 数值数据 高中信息技术文本分析 校园文化热词在路上在路上最美的遇见最美的遇见顶层设计顶层设计行为文化行为文化班级文化班级文化扣好人生第一粒扣子扣好人生第一粒扣子高中信息技术文本分析 老人与海词云图高中信息技术文本分析 某地区上半年舆情领域分布吏治反腐吏治反腐涉警涉法涉警涉法民生投诉民生投诉科教文卫科教文卫突发卫生突发卫生事件事件行业舆情行业舆情企业舆情企业舆情其他其他高中信息技术文本分析 情感分布文本情感分析高中信息技术问题呈现 学校开展经典诵读活动,小明在阅读三国演义时,为了分析该文学作品内容及其写作特色,想把小说中出现
22、次数最多的20个词查找出来。如何通过编写程序来实现呢?高中信息技术问题分析文本文件文本文件三国演义三国演义已知找出高频词找出高频词求解目标 求解过程读取文件读取文件中文分词中文分词词频统计词频统计词频排序词频排序显示输出显示输出词、词、出现次数、出现次数、前前2020高中信息技术问题分析读取文件读取文件中文分词中文分词统计词频统计词频词频排序词频排序显示输出显示输出查找文章高频词高中信息技术1.读取文件中文中文分词分词词频词频统计统计词频词频排序排序读取读取文件文件显示显示输出输出 高中信息技术1.读取文件实践活动一:读取文本数据 阅读任务单活动一的学习材料;输入并尝试理解相关语句。高中信息技
23、术1.读取文件f=open(“d:/三国演义.txt,r,encoding=utf-8)txt=f.read()#读取文件内容#打开指定文件,创建返回一个文件对象高中信息技术1.读取文件问题:运行代码,看不到效果。有什么办法可以观察和了解程序的进展呢?高中信息技术1.读取文件调试方法:函数print()/print(type()输出输出变量值或变量类型,观察观察程序的进展。高中信息技术1.读取文件f=open(d:/三国演义.txt,r,encoding=utf-8)txt=f.read()试一试:下面代码执行后的结果。print(txt)print(type(txt)高中信息技术1.读取文件
24、高中信息技术1.读取文件中文中文分词分词词频词频统计统计词频词频排序排序读取读取文件文件显示显示输出输出 open()read()高中信息技术2.中文分词中文中文分词分词词频词频统计统计词频词频排序排序读取读取文件文件显示显示输出输出 open()read()高中信息技术2.中文分词中文分词就是将连续的字序列按照一定的规范重新组合成词序列的过程。如:小明是一名学生。小明 是 一名 学生。.高中信息技术2.中文分词.jieba模块,对中文有着很强大的分词能力。由于它是第三方模块,使用前需要下载安装。高中信息技术2.中文分词实践活动二:请同学们参照任务单中说明完成jieba模块的安装。自学中文分词
25、相关内容。高中信息技术2.中文分词.importjieba.words=jieba.lcut(txt)#导入jieba模块#将txt中的中文拆分为词语保存到words中高中信息技术2.中文分词。import jieba。f=open(d:/三国演三国演义.txt,r,encoding=utf-8)。txt=f.read()。words=jieba.lcut(txt)高中信息技术2.中文分词试一试:利用前面用到的调试方法,观察程序的进展。高中信息技术2.中文分词高中信息技术2.中文分词中文中文分词分词词频词频统计统计词频词频排序排序读取读取文件文件显示显示输出输出 高中信息技术3.词频统计中文中
26、文分词分词词频词频统计统计词频词频排序排序读取读取文件文件显示显示输出输出 open()read().jiebalcut()高中信息技术3.词频统计解析算法:表达式枚举算法:逐一判断实践活动三:如何统计词语的出现次数呢?高中信息技术3.词频统计如何利用枚举算法来统计词频呢?提示:高频词应该是具有明确指向意义的词语,不包括单字的词。高中信息技术3.词频统计统计表中添加该词,次数为1统计开始False统计结束True是单字词FalseTrueFalseTrue统计表中已有该词统计表中该词次数+13.词频统计依序从词表中取一词高中信息技术3.词频统计想一想:如何记录词语内容及其出现次数呢?(假设词频
27、为:汉朝15次,建宁6次,英雄60次)汉朝汉朝建宁建宁英雄英雄15156 66060方案方案1 1A0A0 A1A1 A2A2 A3A3 B0B0 B1B1 B2B2 B3B3 汉朝汉朝1515建宁建宁6 6方案方案2 2A0A0 A1A1 A2A2 A3A3 这种记录方式,一旦词语顺序发生调整和变化,容易出现次数对应上的错误。高中信息技术3.词频统计 :6:新的数据类型字典香蕉 5字典是无序集合。,苹果:山楂2键值对(key-value)字典中键与值是一一对应的,数据没有先后顺序关系。高中信息技术3.词频统计活动:参考任务单活动三的材料,学习字典的相关内容。尝试编写相关代码,实现词频统计。高
28、中信息技术3.词频统计counts=#建立空字典,用于存储词和出现次数#单字的词语忽略不计for word in words:if len(word)=1:continue else:countsword=counts.get(word,0)+1高中信息技术3.词频统计试一试:利用前面用到的调试方法,观察程序的进展。高中信息技术3.词频统计高中信息技术3.词频统计中文中文分词分词词频词频统计统计词频词频排序排序读取读取文件文件显示显示输出输出 open()read().jiebalcut().枚举、字典枚举、字典高中信息技术4.词频排序中文中文分词分词词频词频统计统计词频词频排序排序读取读取文
29、件文件显示显示输出输出 open()read().jiebalcut().枚举、字典枚举、字典高中信息技术4.词频排序实践活动四:如何实现按词频排序?思考问题1:词频存储在字典中。字典中的元素能否进行排序呢?思考问题2:如何实现按词语的出现次数进行排序?参看任务单的学习材料。动手尝试编程实现。高中信息技术4.词频排序items=list(counts.items()#字典转化为列表items.sort()#按出现次数进行降序排列降序按出现次数排序reverse=Truekey=lambda x:x1,高中信息技术4.词频排序试一试:运行调试程序,观察程序进展。高中信息技术4.词频排序高中信息技
30、术4.词频排序中文中文分词分词词频词频统计统计词频词频排序排序读取读取文件文件显示显示输出输出 open()read().jiebalcut().字典、枚举字典、枚举list ()sort()高中信息技术5.显示输出中文中文分词分词词频词频统计统计词频词频排序排序读取读取文件文件显示显示输出输出 open()read().jiebalcut().字典、枚举字典、枚举list ()sort()高中信息技术5.显示输出实践:请同学们思考并自行完成显示输出功能。高中信息技术5.显示输出#输出前20个元素的值for i in range(20):print(itemsi0,itemsi1)高中信息技术
31、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.尝试着分析其它作品如乡土中国老人与海,说一说你的发现。
侵权处理QQ:3464097650--上传资料QQ:3464097650
【声明】本站为“文档C2C交易模式”,即用户上传的文档直接卖给(下载)用户,本站只是网络空间服务平台,本站所有原创文档下载所得归上传人所有,如您发现上传作品侵犯了您的版权,请立刻联系我们并提供证据,我们将在3个工作日内予以改正。