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,一经查实,立即删除!

相关文章

关于wpf,datagrid,双向数据绑定用法解决方案

参考:http://www.myexception.cn/c-sharp/1446457.html 核心内容,在绑定数据的地方添加双向绑定: {Binding BB, ModeTwoWay,UpdateSourceTriggerPropertyChanged} 转载于:https://www.cnblogs.com/Mindy-hym/p/11431069.html

部署zookeeper分布式节点

用2台服务器,低资源,部署3个zookeeper分布式节点: 1.准备环境系统已经配置好了JAVA环境;下载某个版本的zookeeper压缩包,下载链接:http://apache.claz.org/zookeeper/zookeeper-3.5.3-beta/zookeeper-3.5.3…

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

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

MySQL导入导出远程访问命令

1.导出整个数据库mysqldump -u 用户名 -p 数据库名 > 导出的文件名mysqldump -u wcnc -p smgp_apps_wcnc > wcnc.sql2.导出一个表mysqldump -u 用户名 -p 数据库名 表名> 导出的文件名mysqldump -u wcnc -p smgp_apps_wcnc users> wcnc_users.sql3.导出一个数据库结…

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

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

虚拟软驱影像文件制作程序下载路径:http://download.csdn.net/source/738137

通过这个程序,可制作一个在虚拟机上运行的Hello China启动软盘,而无需你的计算机具备物理软驱。 If you have not CSDN account or you very care the 3 points will be omitted if you download,please send mail to garryxinyahoo.com.cn, I will send…

css3属性

css3属性 transform动画 transform-origin:设置不动点,以这个点位移transform:translate(x,y):自身偏移量transform:scale(x,y):缩放,当为负数的时候可以实现反转元素transform:roate(xdeg&…

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

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

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

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

帆软报表(finereport)JS实现cpt中详细单元格刷新

1.刷新固定单元格 setInterval(function(){ //获取第二行第 5 列 E2 单元格对象var _changeCell $("tr[tridx1]","div.content-container").children().eq(7);//获取 H2 单元格值var _changeVal _changeCell.text();//给表格赋值 if(_changeVal"…

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

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

javascript 控制弹出窗口

前言:经常上网的朋友可能会到过这样一些网站,一进入首页立刻会弹出一个窗口,或者按一个连接或按钮弹出,通常在这个窗口里会显示一些注意事项、版权信息 、警告、欢迎光顾之类的话或者作者想要特别提示的信息。其实制作这样的页面效果非常的容…

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

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

wpf: DataGridTextColumn 数字格式显示,编辑时取消格式(StringFormat)

参考&#xff1a;Format values in a Datagrid 参考&#xff1a;Remove stringFormat while editing cell in datagrid 使用 DataGridTemplateColumn 实现&#xff1a; <DataGridTemplateColumn Header"Cot (k€)"><DataGridTemplateColumn.CellTemplate&g…

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

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

JS的常用正则表达式 验证密码

JS的正则表达式强&#xff1a;字母数字特殊字符 ^(?![a-zA-z]$)(?!\d$)(?![!#$%^&*]$)(?![a-zA-z\d]$)(?![a-zA-z!#$%^&*]$)(?![\d!#$%^&*]$)[a-zA-Z\d!#$%^&*]$中&#xff1a;字母数字&#xff0c;字母特殊字符&#xff0c;数字特殊字符^(?![a-zA-z]$)…

微软宣布开源WPF、WinForms和WinUI

在微软Connect 2018大会上&#xff0c;微软发布了.NET Core 3.0的第一个预览版。同时&#xff0c;微软还宣布&#xff0c;他们将WPF、Windows Forms&#xff08;WinForms&#xff09;和WinUI作为开源项目托管在GitHub上。它们都是基于MIT许可发行&#xff0c;开发人员可以在自己…

帆软报表(finereport)使用Event 事件对象 (target)修改提示框样式

target 事件属性 Event 对象 定义和用法 target 事件属性可返回事件的目标节点&#xff08;触发该事件的节点&#xff09;&#xff0c;如生成事件的元素、文档或窗口。 语法 event.target 定义结束事件JavaScript JS修改内容提示框样式-https://help.finereport.com/doc-view-2…

python的开发环境有哪些系统_Win10下配置机器学习python开发环境

近期计划写一写机器学习微信小程序的开发教程&#xff0c;但微信开发工具只提供了Windows和Mac OS版本&#xff0c;作为一名长期使用Linux系统的开发人员&#xff0c;虽然始终认为Linux系统才是对开发者最友好的&#xff0c;但微信团队作出这种选择&#xff0c;肯定经过调查。不…

动态添加ContextMenuStrip项(ToolStripItem)

//绑定菜单privatevoidBindMenu(DataTable dt) {foreach(DataRow row indt.Rows) { ToolStripItem item newToolStripMenuItem(); item.Name row[0].ToString(); item.Text row[1].ToString(); item.Click newEventHandler(contextMenuStrip1_ItemClick); contextMenuStrip1.It…