(
课件网) 2.4.3 算法与程序实现的综合应用 单位:来宾市第四中学 2.4.3 算法与程序实现的综合应用 十九大报告的“亮点”,一个“新”字贯穿整个报告。通过分析得到词云图。 醒目的“新时代”三个字以强烈的视觉冲击效果呈现在我们眼前, 该词在全文中出现36次,高居榜首。其他还有“新格局”“新形势”“新征程”“新成果”“新发展理念”等词汇也频频出现。 ———词云”就是对网络文本中出现频率较高的“关键词”予以视觉上的突出,从而过滤掉大量的文本信息,使浏览网页者只要一眼扫过文本就可以领略文本的主旨。 2.4.3 算法与程序实现的综合应用 问题提出:如何选取文章中出现次数最多的词呢? 学校开展经典诵读活动,小明在阅读《三国演义》时,为了分析小说的写作特色,想把小说中出现次数最多的20个词查找出来。 2.4.3 算法与程序实现的综合应用 实践探索 想一想,小明是否能从纸质小说中找出这20个高频词?如果用计算机解决该问题,又应如何实现? 学校开展经典诵读活动,小明在阅读《三国演义》时,为了分析小说的写作特色,想把小说中出现次数最多的20个词查找出来。 计算机解决:已知条件为文本文件《三国演义》,求解目标为《三国演义》中出现次数最多的20个词。 2.4.3 算法与程序实现的综合应用 分析问题 手工方法:费时费力,难度很大。 回忆:使用计算机解决问题的步骤 2.4.3 算法与程序实现的综合应用 在问题求解中,除了要完成读取文件和显示输出内容,还要重点实现分词、词频统计和排序等功能。如图所示: 2.4.3 算法与程序实现的综合应用 设计算法 由于中文文本是由连续的字序列构成,没有明显的词语界限,因此分词处理的算法比较复杂。 2.4.3 算法与程序实现的综合应用 设计算法—中文分词 jieba(结巴) 是目前使用最广泛的 Python 中文分词模块,它主要有以下特性:支持3种分词模式,支持繁体分词,支持自定义词典。 通过jieba的分词功能,我们可以将《三国演义》中的汉字字符序列切分成一个个单独的词,组合成一个“词汇表”。 在词频统计的过程中主要应用了枚举算法,对于“词汇表”中的每一个词,依次计算出各自的出现次数,生成一个包含词和次数的“统计表”。 设计算法—词频统计 2.4.3 算法与程序实现的综合应用 要找到出现次数最多的20个词,需要对“统计表”中的词语按次数从大到小进行排序。 2.4.3 算法与程序实现的综合应用 设计算法—词频排序 可以自己设计排序算法,也可以调用Python语言中可以直接调用内置的排序函数快速实现序列排序。 设计算法—显示输出 使用print语句可以显示前20个词及它的次数。 # 打开文件python中使用open函数(参数1为打开的文件,参数2为打开方式,参数3为文件存储方式)。 f = open("三国演义.txt", "r", encoding="utf-8") # 读取文件内容 txt = f.read() 注意:打开文件时要注意编码格式,待分词的字符串可以是 unicode 或 UTF-8 字符串、GBK 字符串。注意:不建议直接输入 GBK 字符串,可能无法预料地错误解码成 UTF-8。 2.4.3 算法与程序实现的综合应用 程序编写—读取文件 # 导入jieba模块 import jieba # 将句子拆分为词语保存到列表中 words = jieba.lcut(txt) 2.4.3 算法与程序实现的综合应用 程序编写—进行分词 # 建立空字典,用于存储词和出现次数 counts = {} #枚举所有分词,存入字典变量counts中,并计算它次数 for word in words: if len(word) == 1: # 单字的词语忽略不计 continue else: # 出现次数+1 counts[word] = counts.get(word, 0) + 1 2.4.3 算法与程序实现的综合应用 程序编写—分词统计 为保证统计结果唯一性,这里我 ... ...