(1)將檔案讀入緩衝區(dst指文字檔案存放路徑,設定成形參,也可以不設,具體到函式裡設定)
def process_file(dst): # 讀檔案到緩衝區(2)設定緩衝區,將文字度數緩衝區,並對文字的特殊符號進行修改,使其更容易處理,並讀入字典。try: # 開啟檔案
txt=open(dst,"r"
) except ioerror
ass:
print s
return
none
try: # 讀檔案到緩衝區
bvffer=txt.read()
except:
"read file error!
"return
none
txt.close()
return bvffer
def process_buffer(bvffer):(3)設定輸出函式,運用lambda函式對詞頻排序,並以「詞」——「頻」格式輸出ifbvffer:
word_freq ={}
# 下面新增處理緩衝區 bvffer**,統計每個單詞的頻率,存放在字典word_freq
bvffer=bvffer.lower()
for x in
'~!@#$%^&*()_+/*-+\][':
bvffer=bvffer.replace(x, "")
words=bvffer.strip().split()
for word in
words:
word_freq[word]=word_freq.get(word,0)+1
return word_freq
def output_result(word_freq):(4)封裝main函式,以便接下來的cprofile的效能評估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
def main():使用4個空格進行縮排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
def process_buffer(bvffer):每行**盡量不超過80個字元ifbvffer:
word_freq = {}
本次程式設計最長一行**(算上下劃線和空格):78個字元
sorted_word_freq = sorted(word_freq.items(), key=lambda v: v[1], reverse=true)分行書寫import語句
import cprofile詞頻統計結果截圖import pstats
執行次數最多:
執行時間最多:
綜合執行次數最多和時間最長,我們可以發現,字典中的get方法是所有話數里用的最多的,要想減少時間,我們可以從替換的符號入手,因為名著《飄》不是乙個數學學術性的報告之類的,所以想@#¥%……&*這些之類的符號基本不可能在這本書裡出現,所以在規範文字的過程中,我們可以減去對這些符號的替換修改。下面是兩次時間和呼叫次數的前後對比圖。
for x in前:'!%()_/-\][':
bvffer=bvffer.replace(x, "
")
後:由此可見快樂大約0.016秒左右。
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 統計詞頻
calhamletv1.py def gettext txt open hamlet.txt r read txt txt.lower for ch in txt txt.replace ch,將文字中特殊字元替換為空格 return txt hamlettxt gettext words haml...
python 詞頻統計
import re 正規表示式庫 import collections 詞頻統計庫 f open text word frequency statistics.txt article f.read lower 統一轉化成小寫 f.close pattern re.compile t n articl...
python統計詞頻
已知有鍵值對 店名,城市 的鍵值對,我們現在的需求是根據城市來統計店的分布。資料的格式如下 我們希望輸出資料的格式如下所示 所有的資料都是以txt檔案儲存的。from collections import counter from pprint import pprint import os imp...