目录
实验四: Python综合程序设计
实验名称:Python综合程序设计 指导教师:
实验日期: 2022年 12 月 5 日 实验地点:
一、实验目的:
1. 了解多种第三方库的使用方法, 掌握jieba库的基本使用;
2. 掌握文件的读写方法以及打开关闭等基本操作;
3. 了解自顶向下的设计方法和自底向上的执行过程;
4. 了解计算生态和模块编程思想。
二、实验设备及分组
1. PC机或笔记本电脑若干;
2. Window 7及以上版本操作系统;
3. Python 运行环境。
三、实验任务及要求:
1.编写程序,统计文件“Nixon.txt”中出现频率最高的20个单词,并将统计结果写入“Tongji.txt”文件中。(注意:除去'the','and','to','of','a','be','from','in','for'等无意义的单词。)
实验分析:本次实验需要读取和写入文件,需要同学掌握py中对文件的操作。统计高频词,则需使用字典对其统计。在完成本次实验时,需要同学对py有一定的学习和理解。
实验重难点:Py中对文件的读取和写入,对列表,字典数据类型的理解和使用
实验源码分析:
def getText(): #定义获取文本函数
with open("suc/Nixon.txt","r") as file: #使用with as 关键字打开文件,open()函数
#中“ ”内容,为打开文本的路径,需要使用自己
#的路径,否则报错。
text=file.read()
text = text.lower() #对文本进行小写转换
for ch in ",.;?-:\'": #对文本中的符号进行检索替换
text = text.replace(ch, " ")
return text
def wordFreq(text,topn): #定义字符统计函数
words = text.split() #使用split()函数将字符串切片并转换为列表
counts = {}.fromkeys(words,0) #定义计数字典
for word in words:
counts[word] = counts[word] + 1
excludes = {'the','and','to','of','a','be','from','in','for'}
for word in excludes:
del(counts[word])
items = list(counts.items()) #将counts字典的items转换为列表,便于排序
items.sort(key=lambda x:x[1], reverse=True) #列表中使用lambda匿名函数排序
return items[:topn]
def writetext(list1): #定义写入文件函数
with open("suc/tongji.txt","w") as file2: #同上文打开文本,需要修改打开模式,“w”为写入
for word,freq in list1:
file2.write("{}\t{}\n".format(word, freq))
text = getText() #调用函数
list1=wordFreq(text,20)
writetext(list1)
实验运行截图:
2. 《红楼梦》,中国四大名著之一,是一部具有世界影响力的人情小说、中国封建社会的百科全书、传统文化的集大成者。小说以贾、史、王、薛四大家族的兴衰为背景,以富贵公子贾宝玉为视角,以贾宝玉与林黛玉、薛宝钗的爱情婚姻悲剧为主线,描绘了一些闺阁佳人的人生百态,展现了真正的人性美和悲剧美,是一部从各个角度展现女性美以及中国古代社会百态的史诗性著作。《红楼梦》篇幅巨大、出场人物繁多,本实验要求编写程序,统计《红楼梦》小说中的关键人物的出场次数。要求:输入电子版《红楼梦》文本,输出出场率最高的10个人物。
实验分析:本次实验中需要同学输入电子版的《红楼梦》文本,及使用py文件操作打开文本文件。需要输出出场最高的10个关键人物,则需要使用py第三方模块jieba完成,第三方库的安装存在问题,移步我另一篇关于py第三库导入的文章。
实验重难点:Python第三方库jieba的引入,用jieba对文本进行分词,print()函数的格式化输出。
实验源码分析:
import jieba #导入第三方库jieba
#使用open()函数打开文本,路径需要更改为自己存储该文本文件的路径,字符编码设置为UTF-8
txt = open("suc/红楼梦.txt", "r", encoding='utf-8').read()
#调用jieba库中的lcut()函数,函数规则为精准匹配模式,返回值是一个列表
words = jieba.lcut(txt)
counts = {} #定义统计字典
#定义筛选无关字段的字典
excludes = {"什么", "一个", "我们", "你们", "如今", "说道", "知道",
"姑娘", "起来","这里","出来","众人","那里","奶奶","自己","太太"
,"一面","只见","两个","没有","怎么","不是","不知","这个","听见"
,"这样","就是","东西","只见","告诉","袭人","回来","只是","大家"
,"进来","咱们"}
for word in words:
#如果字符长度为1,或者在筛选字典中,则跳过,不统计
if len(word) == 1 or (word in excludes):
continue
else:
counts[word] = counts.get(word,0) + 1
items = list(counts.items()) #用counts统计字典的元素转换为列表,便于进行排序
items.sort(key=lambda x:x[1], reverse=True) #调用列表sort()函数,用匿名函数作为参数
for i in range(10):
word, count = items[i] #这里用到了py切片的思想,,可以理解为split()函数
print ("{}:{:<10}{:>5}".format(i+1,word, count)) #格式化输出
实验运行截图:
3.本实验要求:利用wordcloud库绘制-20大工作报告-文本词云。
实验分析:本实验需要基于工作报告生成词云图片,要求同学具备py文件的相关知识。将字符出现频率统计转换为词云形式展示,需要使用py的第三方库wordcroud,如果导入第三方库存在问题,可以移步我另一篇关于py第三方库引入的文章
实验重难点:Py第三方库wordcloud的导入和使用,文件文本的读取
实验源码分析:
import wordcloud #引入第三方wordcloud库
#字体的路径,需要更改为你自己电脑上安装过的字体路径
font = 'C:\Windows\Fonts\simsun.ttc'
#打开生成词云的文本,打开的路径需要更改为自己存放的位置
file =open("suc/20大报告.txt", "r" )
string = str(file.read())
#这里是直接打开的文件,没用使用with as关键字,需要自行关闭文件
file.close()
#调用wordcloud库的WouldCloud函数,设置词云参数
w = wordcloud.WordCloud(font_path=font,max_words=500,
max_font_size=40,background_color='white')
w.generate(string) #生成词云
w.to_file('suc/20大词云.jpg') #设置词云输出位置
实验运行截图:
本次技术分享就结束了,喜欢就点赞收藏吧!!!持续更新中~~~