python統計詞頻

2022-08-30 07:57:09 字數 3526 閱讀 3188

(1)將檔案讀入緩衝區(dst指文字檔案存放路徑,設定成形參,也可以不設,具體到函式裡設定)

def process_file(dst):     # 讀檔案到緩衝區

try: # 開啟檔案

txt=open(dst,"r"

) except ioerror

ass:

print s

return

none

try: # 讀檔案到緩衝區

bvffer=txt.read()

except:

print

"read file error!

"return

none

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 in

words:

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 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...