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