python词频统计代码_python统计词频

一、程序分析

(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

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

词频统计结果截图

1486221-20181005125528699-95489915.png

四、性能分析结果及改进

执行次数最多:

1486221-20181005125802520-1963044748.png

执行时间最多:

1486221-20181005130010270-534948253.png

四、性能分析结果及改进

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

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

bvffer=bvffer.replace(x, " ")

前:

1486221-20181005132456707-1456128941.png

后:

1486221-20181005132437595-1477746963.png

由此可见快乐大约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文件,不然无法找到目标文件)

1486221-20181005133604606-151164942.png

最后结果分析如下:

1486221-20181005133648419-251705438.png

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/276770.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Oracle的resouce、unlimited tablespace 及如何把数据导入不同的表空间

resouce是角色,unlimited tablespace是权限。 很多人在进行数据迁移时,希望把数据导入不同于原系统的表空间,在导入之后却往往发现,数据被导入了原表空间。本例举例说明解决这个问题:1.如果缺省的用户具有DBA权限那么导入时会按照…

.net开发是做什么的_软件开发是什么, 该怎么做?

软件开发是什么, 该怎么做?1 引子关于什么是软件开发存在很多观点,有的认为软件开发即服务,有的认为软件开发即产品,有的认为软件开发即平台,这些观点各有各的侧重点。这篇文章我们来学习和探讨一下软件开发。2 软件…

使用HTML5、CSS3和jQuery增强网站用户体验

记得几年前如果你需要添加一些互动元素到你的网站中用来改善用户体验?是不是立刻就想到了flash实现?这彷佛年代久远的事了。使用现在最流行的Web技术HTML5,CSS3和jQuery,同样也可以实现类似的用户体验。而且使用这些特性将会比使用…

python中loop函数_python + Django 的forloop功能试验讲解

一、forloop功能详解记录 遇到一个问题困扰了我好久,结果还是知识盲区造成的。下边记录一下。 通过return forloop可以返回前端循环中的索引值 二、forloop大概功能 forloop是Django模板中一个功能,主要是可以计算循环的对象的索引值(大白话大…

[导入]源代码版本控制(二)

在VS6.0时代,VSS的版本是6.0,现在VS的版本都到2008了,VSS的版本目前是2005,这回以2005为例。安装就免了。数据库的创建:如果要在局域网内共享这个数据库,那还需要将刚才存放数据库的目录共享出去。为数据库…

苏宁的Node.js实践:不低于Java的渲染性能、安全稳定迭代快

前端 Node.js 的使用场景大多集中在前端工具上,当前的前端主要把它定位为辅助。苏宁易购使用 Node.js 作为前后端分离的主要手段,经历了从技术引进到全面开花,从边缘功能到核心业务,从纷乱到稳定的过程。同时 Node.js 作为新引入的…

MVP群聊某美国公司的应聘试题(压死九个还是一个)

某美国公司的应聘试题(压死九个还是一个),测试你的管理方式有二条铁轨,一条新的,一条旧的。有了新铁轨后,旧铁轨不再有火车通过。有一天有十个小孩到铁轨上玩耍,九个小孩在新铁轨上玩&#xff0…

html与cgi脚本的配合使用

利用boa服务器测试arm开发板上的cgi和html联合编程的小例程。很简单,但是当时觉得很有意思。在这里给大家展示一下,高手飘过。 在ubuntu下安装boa测试环境,即先在本地搭建一个boa的网页服务器。apt-get install boa。稍作配置即可。我的Boa按…

zabbix3监控ESXI主机

ESXI主机VMware公司企业级虚拟化的解决方案Vsphere的重要组件,也是虚拟机的宿主机,对其监控有着重要的意义,下边介绍二种方发对其监控。 方法一:通过修改服务端的控制项来进行监控。 虚拟机监控分两个步骤完成。首先,Z…

mybatis jar包_springboot2整合mybatis-plus3踩到的坑

前言最近在进行项目重构,在架构师的建议下,就把项目中mybatis切换成mybatis-plus。因为mybatis-plus在mybatis的基础上只做增强不做改变,因此切换的成本很低,就只需改jar和配置内容,原先的代码无需改动。因为mybatis-p…

共享几套silverlight2 toolkit最新的皮肤控件样式下载

下载了最新的silverlight2 toolkit看看,发现里面的控件样式还是多漂亮的,与大家分享下。 blue dark light orange purple red 样式源码下载:点击下载 当然,我最喜欢的还是orange哦。 转载于:https://www.cnblogs.com/liaohenchen/…

开会=浪费时间?阿里技术团队这样开项目复盘会

2019独角兽企业重金招聘Python工程师标准>>> 阿里妹导读:复盘是项目结束后必不可少的阶段,好的复盘会议能够有效地促进团队成长。今天,阿里项目管理专家鹿迦以自身的经验,为大家分享如何做好一个项目的复盘。这篇文章分…

Extjs中使用FusionChart举例

一 前言: 在项目实施中,设计统计部分经常会使用图表进行显示,在Extjs3中内置了图表控件,但实际表现无法达到3D的美观效果,通过查找FusionChart可以实现比较美观的3D或2D图表显示。注:FusionChart是个商业…

drawitem设置指定行的背景颜色_Java 为 Excel 中的行设置交替背景色

点击上方 好好学java ,选择 星标 公众号重磅资讯、干货,第一时间送达今日推荐:牛人 20000 字的 Spring Cloud 总结,太硬核了~作者:Jazzz链接:https://www.cnblogs.com/jazz-z/p/12665819.html在制作Excel表…

常见的关系型数据库和非关系型数据及其区别

一、关系型数据库 关系型数据库最典型的数据结构是表,由二维表及其之间的联系所组成的一个数据组织 优点:1、易于维护:都是使用表结构,格式一致;2、使用方便:SQL语言通用,可用于复杂查询&#x…

无法检查指定的位置是否位于cfs上_(干货分享)一文搞明白 节气门位置传感器的作用、故障类型与症状、诊断方法...

1 位置节气门位置传感器(ThrottlePositionSensor,TPS),位于节气门体上,其安装形式因节气门结构的不同而有所差异:对于传统的机械拉索式节气门,节气门位置传感器通常以一个独立元件的形式安装在节气门体的侧面&#xf…

Asp.net(C#)-显示所有缓存 清除所有缓存

//清除所有缓存protectedvoidRemoveAllCache() { System.Web.Caching.Cache _cache HttpRuntime.Cache; IDictionaryEnumerator CacheEnum _cache.GetEnumerator(); ArrayList al new ArrayList(); while (CacheEnum.MoveNext()) { …

Python--day60--一个简单(不完整)的web框架

转载于:https://www.cnblogs.com/xudj/p/10091775.html

activemq 发两条只收到一条_浅谈ActiveMQ与使用

更多大数据架构、实战经验,欢迎关注【大数据每日哔哔】,期待与你一起成长!本文将介绍一下 ActiveMQ 的安装、原理和简单实战。一、什么是消息中间件消息中间件顾名思义实现的就是在两个系统或两个客户端之间进行消息传送二、什么是ActiveMQAc…

ZZ:深入理解new

new的过程当我们使用关键字new在堆上动态创建一个对象时,它实际上做了三件事:获得一块内存空间、调用构造函数、返回正确的指针。当然,如果我们创建的是简单类型的变量,那么第二步会被省略。假如我们定义了如下一个类A&#xff1a…