一、程序分析

(1)将文件读入缓冲区(dst指文本文件存放路径,设置成形参,也可以不设,具体到函数里设置)

def process_file(dst): # 读文件到缓冲区try: # 打开文件

txt=open(dst,"r")

except IOErrorass:

print sreturnNonetry: # 读文件到缓冲区

bvffer=txt.read()

except:

print"Read File Error!"

returnNone

txt.close()return bvffer

(2)设置缓冲区,将文本度数缓冲区,并对文本的特殊符号进行修改,使其更容易处理,并读入字典。

def process_buffer(bvffer):ifbvffer:

word_freq={}

# 下面添加处理缓冲区 bvffer代码,统计每个单词的频率,存放在字典word_freq

bvffer=bvffer.lower()for x in '~!@#$%^&*()_+/*-+\][':

bvffer=bvffer.replace(x, " ")

words=bvffer.strip().split()for word inwords:

word_freq[word]=word_freq.get(word,0)+1

return word_freq

(3)设置输出函数,运用lambda函数对词频排序,并以“词”——“频”格式输出

def output_result(word_freq):ifword_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

(4)封装main函数,以便接下来的cProfile的性能评估

def main():

dst= "Gone_with_the_wind.txt"bvffer=process_file(dst)

word_freq=process_buffer(bvffer)

output_result(word_freq)if __name__ == "__main__":

import cProfile

import pstats

cProfile.run("main()", "result")

# 直接把分析结果打印到控制台

p= pstats.Stats("result") # 创建Stats对象

p.strip_dirs().sort_stats("call").print_stats() # 按照调用的次数排序

p.strip_dirs().sort_stats("cumulative").print_stats() # 按执行时间次数排序

p.print_callers(0.5, "process_file") # 如果想知道有哪些函数调用了process_file,小数,表示前百分之几的函数信息

p.print_callers(0.5, "process_buffer") # 如果想知道有哪些函数调用了process_buffer

p.print_callers(0.5, "output_result") # 如果想知道有哪些函数调用了output_res

二、代码风格说明

缩进

使用4个空格进行缩进

def process_buffer(bvffer):ifbvffer:

word_freq= {}

行宽

每行代码尽量不超过80个字符

本次编程最长一行代码(算上下划线和空格):78个字符

sorted_word_freq = sorted(word_freq.items(), key=lambda v: v[1], reverse=True)

import语句

分行书写import语句

import cProfile

import pstats

三、程序运行命令、运行结果截图

词频统计结果截图

四、性能分析结果及改进

执行次数最多:

执行时间最多:

四、性能分析结果及改进

综合执行次数最多和时间最长,我们可以发现,字典中的get方法是所有话数里用的最多的,要想减少时间,我们可以从替换的符号入手,因为名著《飘》不是一个数学学术性的报告之类的,所以想@#¥%……&*这些之类的符号基本不可能在这本书里出现,所以在规范文本的过程中,我们可以减去对这些符号的替换修改。下面是两次时间和调用次数的前后对比图。

for x in '!%()_/-\][':

bvffer=bvffer.replace(x, " ")

前:

后:

由此可见快乐大约0.016秒左右。

五、可视化操作

下载gprof2dot.py将此一个PY(无需将一整个文件夹放入)放到词频统计的相同目录,在graphviz官网下载zip文件,解压,并将其bin目录添加到系统的环境变量里。

1. 性能分析:python -m cProfile -o result -s cumulative word_freq.py Gone_with_the_wind.txt;分析结果保存到 result 文件;

2. 转换为图形;gprof2dot 将 result 转换为 dot 格式;再由 graphvix 转换为 png 图形格式。

命令:python gprof2dot.py -f pstats result | dot -Tpng -o result.png注意:要通过cmd进去词频的py程序的目录,在其中输入代码(必须保证已经有了result文件,不然无法找到目标文件)

最后结果分析如下:

python词频统计代码_python统计词频相关推荐

  1. python爬取托福_Python 统计托福作文词频

    随着 AI 的大热,我的好奇心也受到了吸引.阅读了一些文章后发现,Pyhton 是一个非常适合 AI 编程的语言.于是开始了对其打怪升级的探索. 探索中发现,Python 提供丰富的库来帮助开发者们进 ...

  2. python计算营业额代码_python计算营业额的代码_python 统计代码行数简单实例

    python 统计代码行数简单实例 送测的时候,发现需要统计代码行数 于是写了个小程序统计自己的代码的行数. #calclate_code_lines.py import os def afileli ...

  3. python数据统计代码_Python 数据的累加与统计的示例代码

    问题 你需要处理一个很大的数据集并需要计算数据总和或其他统计量. 解决方案 对于任何涉及到统计.时间序列以及其他相关技术的数据分析问题,都可以考虑使用 Pandas库 . 为了让你先体验下,下面是一个 ...

  4. python动态爱心代码_python 动态绘制爱心的示例

    python 动态绘制爱心的示例 代码 import turtle turtle.bgcolor("black") turtle.pensize(2) sizeh = 1.2 de ...

  5. python count函数代码_python count函数用法详解_后端开发

    fgetc函数的作用详解_后端开发 fgetc函数的作用是从指定文件读入一个字符,要求文件的打开方式必须是以读或读写的方式或者追加的方 式,只写方式是不能读的. 在python中可以使用"c ...

  6. python视频处理代码_python如何实现视频转代码视频

    本文实例为大家分享了python如何实现视频转代码视频的具体代码,供大家参考,具体内容如下 # -*- coding:utf-8 -*- #coding:utf-8 import argparse i ...

  7. python五边形的代码_python正五边形代码

    python正五边形代码 第一步先找规律,抽象化问题.首先我们观察到,第一行为[1],我们直接赋给一个变量:初始化数列 p = [1].核心点是这个除去首位两个 [1] 的中间部分:[p[0] + p ...

  8. python阶乘的代码_python编码阶乘

    广告关闭 腾讯云11.11云上盛惠 ,精选热门产品助力上云,云服务器首年88元起,买的越多返的越多,最高返5000元! 需求:阶乘:也是数学里的一种术语: 阶乘指从1乘以2乘以3乘以4一直乘到所要求的 ...

  9. python画花朵代码_python画花朵代码分享

    python画花朵代码分享 发布时间:2020-05-09 15:36:11 来源:亿速云 阅读:295 作者:小新 这篇文章主要为大家详细介绍了python画花朵代码,文中示例代码介绍的非常详细,具 ...

最新文章

  1. c语言const与*位置关系,C语言程序的存储区域与const关键字的使用方法
  2. 构建高可用ZooKeeper集群(转载)
  3. [Machine Learning]--无监督学习
  4. 谷歌OKR指导手册 (译)
  5. 转:V.I. Arnold 论数学教育
  6. (计算机组成原理)第三章存储系统-第二节:基本的半导体原件和存储器芯片的原理
  7. UI设计素材字体|三明治3D文字效果– 3个角度
  8. Sqlserver 2008:sp_msforeachdb 坑爹的错误陷阱
  9. 如果Mac在播放音乐时遇到问题,没有声音或无法调整音量,该怎么办呢?
  10. Microsoft Access 查询
  11. 0w1_CTF_Writeup
  12. 如何快速插入大量/批量随机数据到数据库(oracle/sqlserver/mysql/postgresql)
  13. 《Wireshark数据包分析实战》读书笔记
  14. VMware vSphere核心组件
  15. Windows上哪款卸载软件最值得推荐?
  16. Win11系统.NET Framework 3.5怎么启用?
  17. java并发编程实战wwj----------第三阶段-------------ConcurrentHashMap----------------73
  18. ES5合并数组---ES6中合并数组
  19. 江西建材杂志江西建材杂志社江西建材编辑部2022年第6期目录
  20. IDEA中svn的使用(含本地代码丢失找回,收藏不亏)

热门文章

  1. CentOS服务器上部署 oracle10gr2
  2. ubuntu查看gpu使用率_如何监控GPU卡的使用率(Linux)
  3. 网络编程知识预备(1) ——了解OSI网络模型
  4. html5 查看图片,html5实现图片预览和查看原图
  5. mysql使用DISTINCT进行去重
  6. spring 事务控制 设置手动回滚 TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
  7. 盘点阿里程序员常用的 15 款开发者工具
  8. 搞工程和搞电子的人摆摊能做什么?
  9. Linux中实用但很小众的11个炫酷终端命令
  10. Java 类在 Tomcat 中是如何加载的?