1) 博客开头给出自己的基本信息,格式建议如下:
- 学号2017****7128
- 姓名:肖文秀
- 词频统计及其效能分析仓库:https://gitee.com/aichenxi/word_frequency1
2) 程序分析,对程序中的四个函数做简要说明。要求附上每一段代码及对应的说明。
process_file作用:打开文件,读取文件到缓冲区,关闭文件
# 读文件到缓冲区 def process_file(file_name): try: # 打开文件 file_read=open(file_name,"r") except IOError as s: print (s) return None try: # 读文件到缓冲区 bvffer=file_read.read() except: print ("Read File Error!") return None #关闭文件 file_read.close() return bvffer
process_buffer作用:读取文件存入字典,处理读取文件时的大小写、符号问题。统计单词出现频率
#缓冲区字符串分割成带有词频的字典 def process_buffer(bvffer): if bvffer: word_freq = {} # 下面添加处理缓冲区 bvffer代码,统计每个单词的频率,存放在字典word_freq #将文件大写字母替换为小写 ,解决大小写不同问题 bvffer=bvffer.lower() #将文件中所有替换为标点符号替换为空格 for i in '.,!?': bvffer=bvffer.replace(i, " ") #通过空格切分单词,存储类型为列表 words=bvffer.strip().split() #遍历列表中所有单词,设字典中value=0, for word in words: #判断是否在字典中,若在,value+1,否则,value=0 if word in word_freq: word_freq[word] += 1 else: word_freq[word] = 0 return word_freq
output_result作用:输出出现频率前10的单词
#将字典按词频排序并输出排名前十的词频对 def output_result(word_freq): if word_freq: sorted_word_freq = sorted(word_freq.items(), key=lambda v: v[1], reverse=True) for item in sorted_word_freq[:10]: # 输出 Top 10 的单词 print(item)
main作用:封装主函数,传入文件名称,调用定义函数,并对其传入参数
if __name__ == "__main__":由于使用原本的代码报错,现将原代码改为如下代码
def main(): #指定文件 file_name = "Gone_with_the_wind.txt" #调用定义函数、传参数 bvffer = process_file(file_name) word_freq = process_buffer(bvffer) output_result(word_freq) if __name__ == "__main__": #导入分析Python程序性能监视模块 import cProfile #导入用来分析cProfile输出的文件内容 import pstats # 直接把分析结果打印到控制台 cProfile.run("main()", "result") # 创建Stats对象 p = pstats.Stats("result") # 按照调用的次数排序 p.strip_dirs().sort_stats("call").print_stats() # 按照运行时间和函数名进行排序 #p.strip_dirs().sort_stats("cumulative", "name").print_stats(0.5)
3) 性能分析结果及改进。
共执行21831次,用时0.657秒
其中执行次数最多的代码:
执行时间最长的代码:
- 给出改进优化方法,根据方法的正确性以及语言描述质量给分,最高2分
问题:输出结果中包含标点符号:”
- 给出改进代码
#将文件中非字母替换为空格 for i in [chr(x) for x in range(ord('a'), ord('z') + 1)]: if i: continue else: bvffer=bvffer.replace(i, " ")
运行结果:
4) 程序运行命令、运行结果截图以及改进后的程序运行命令及结果截图 。
改进前,运行结果
改进后,运行结果
5) 给出你对此次任务的总结与反思。
反思:在此次任务的中,认识到对字符串的处理有很多遗忘的地方,对字典、列表、数组的使用能力有待加强。
总结:在完成任务的同时,也捧起书,复习了基本数据类型相关的知识,重温了python的文件式启动与运行方法
python词频统计及其效能分析的更多相关文章
-
Python 词频统计
利用Python做一个词频统计 GitHub地址:FightingBob [Give me a star , thanks.] 词频统计 对纯英语的文本文件[Eg: 瓦尔登湖(英文版).txt]的英文 ...
-
python实现四则运算和效能分析
代码github地址:https://github.com/yiduobaozhi/-1 PSP表格: 预测时间(分钟) planning 计划 15 Estimate 估计这个任务需要多少时间 10 ...
-
大数据python词频统计之本地分发-file
统计某几个词在文章出现的次数 -file参数分发,是从客户端分发到各个执行mapreduce端的机器上 1.找一篇文章The_Man_of_Property.txt如下: He was proud o ...
-
大数据python词频统计之hdfs分发-cacheArchive
-cacheArchive也是从hdfs上进分发,但是分发文件是一个压缩包,压缩包内可能会包含多层目录多个文件 1.The_Man_of_Property.txt文件如下(将其上传至hdfs上) ha ...
-
大数据python词频统计之hdfs分发-cacheFile
-cacheFile 分发,文件事先上传至Hdfs上,分发的是一个文件 1.找一篇文章The_Man_of_Property.txt: He was proud of him! He could no ...
-
python词频统计
1.jieba 库 -中文分词库 words = jieba.lcut(str) --->列表,词语 count = {} for word in words: if len(word)==1 ...
-
C#词频统计 效能分析
在邹老师的效能分析的建议下对上次写过的词频统计的程序进行分析改进. 效能分析:个人很浅显的认为就是程序的运行效率,代码的执行效率 1.VS 提供了自带的分析工具:performance tool (性 ...
-
效能分析——词频统计的java实现方法的第一次改进
java效能分析可以使用JProfiler 词频统计处理的文件为WarAndPeace,大小3282KB约3.3MB,输出结果到文件 在程序本身内开始和结束分别加入时间戳,差值平均为480-490ms ...
-
《构建之法》教学笔记——Python中的效能分析与几个问题
<构建之法:现代软件工程>中第2章对效能分析进行了介绍,基于的工具是VSTS.由于我教授的学生中只有部分同学选修了C#,若采用书中例子讲解,学生可能理解起来比较困难.不过所有这些学生都学习 ...
随机推荐
-
温故而知新 兼容性较强的轮播器superslide.js
官网: http://www.superslide2.com/index.html demo: http://www.superslide2.com/demo.html API: http://www ...
-
用户控件UserControl图片资源定位(一)---Xaml引用图片
MEF编程实现巧妙灵活松耦合组件化编程,一些细节需要花费不小心思去处理: 其中组件中若包含用户控件,且需要访问图片资源,那么Xaml引用资源需要做以下设置 1. 用户控件(usercontrol)所在 ...
-
Linux按键驱动程序设计详解---从简单到不简单【转】
转自:http://blog.csdn.net/coding__madman/article/details/51399353 版权声明:本文为博主原创文章,未经博主允许不得转载. 混杂设备驱动模型: ...
-
python学习笔记-day4笔记 常用内置函数与装饰器
1.常用的python函数 abs 求绝对值 all 判断迭代器中所有的数据是否为真或者可迭代数据为空,返回真,否则返回假 any ...
-
ios开发之OC基础-类和对象
本系列的文章主要来自于个人在学习前锋教育-欧阳坚老师的iOS开发教程之OC语言教学视频所做的笔记,边看视频,边记录课程知识点.建议大家先过一遍视频,在看视频的过程中记录知识点关键字,把把握重点,然后再 ...
-
HTML弹出窗口
1.最简单的 <script type="text/javascript"> <!-- window.open("http://cn.bing.com& ...
-
hdu 4619 最大匹配问题
思路:把所有涉及到的点按(x+y)的奇偶分成两部分点,对所有的1*2的骨牌,都有(x+y)为偶数的建到奇数的边.求一次最大匹配,就是答案. #include<iostream> #incl ...
-
php下载文件的一种方式
<?php ob_start(); // $file_name="cookie.jpg"; $file_name="abc.jpg"; //用以解决中文不 ...
-
js 函数中的 return+匿名函数
今天一个刚学js的朋友给了我一段代码问为什么方法不执行,代码如下: 代码如下: function makefunc(x) { return function (){ return x; } } ...
-
MySQL数据库开发的三十六条军规
一.核心军规 尽量不在数据库做运算,cpu计算的事务必移至业务层; 控制表.行.列数量([控制单张表的数据量 1年/500W条,超出可做分表],[单库表数据量不超过300张] .[单张表的字段个数不超 ...