资源简介 算法与程序实现的综合应用 “查找文稿中的高频词汇”的问题 问题:学校开展经典诵读活动。小明在阅读《三国演义》时,为了分析小说的写作特色,想把小说中出现次数最多的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,统计小说中的高频词,不仅可以帮助我们了解其中的主要人物,还可以用来分析人物的主要活动地点及人物间的关系等。试着编程分析自己感兴趣的一本小说,说一说你的发现。 感谢聆听 展开更多...... 收起↑ 资源预览