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.pswp.cn/news/276770.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/276770.shtml
英文地址,請注明出處:http://en.pswp.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…