まず、コンパイラ環境
(1)テストツールを:PyCharmコミュニティ版2019年2月2日のx64
(2)Pythonバージョン:3.7.2
第二に、プログラム解析
(1)バッファにファイルを読み込みます
1 DEF process_file(パス):#ファイルバッファ読み取るための 2試み:#ファイルを開く 3、F =オープン(パス、 ' R')#パスファイルパスへの 4例外IOError AS S以外: 5プリント(S) 6なしリターン。 7。してみてください:#ファイルをバッファに読み込む 。8 bvfferに達し、f.read =() 9除い: 10印刷( '!読み取りファイルエラー') 。11リターンなし ()12はf.closeされていない 13がリターンbvfferです
(2)処理バッファ、各単語頻度統計
デフprocess_buffer(bvffer):#処理バッファ、バックストレージ辞書word_freq各ワード周波数 IF bvffer: 以下の処理バッファ#1 bvfferコード、辞書word_freq用に記憶された各単語の統計的頻度追加 word_freq} =を{ #テキスト英語の句読点のテキストを小文字および除去するためのコンテンツ でCHため'「';:!?、 " ': 。bvffer = bvffer.lower()を置き換える(CH、 "") #ストリップは、()空白を削除します( '/ N'、 '/ R含む文字 '、 '/ T');スプリット() スペースで区切られた文字列 bvffer.stripワード=()スプリット()。 Wordの言葉で: word_freq [ワード] word_freqを=。 GET(ワード、0)+。1つの リターンword_freq
10個の単語の(3)の出力周波数
DEF(word_freq)output_result: もしword_freq: :sorted_word_freq =ソート(V [1] =真逆word_freq.items()、キー=ラムダV) sorted_word_freqのアイテムのための[10]:#输出トップ10的单词 プリント( "单词:%S频数:%dの" %(項目[0]、項目[1]))
(4)主な機能は、以前にカプセル化された関数を呼び出し
もし__name__ == "__main__": パス= "Gone_with_the_wind.txt" bvffer = process_file(パス) word_freq = process_buffer(bvffer) output_result(word_freq)
第三に、プログラムのスクリーンショットの結果
1. Gone_with_the_wind.txtの単語頻度統計
2. A_Tale_of_Two_Cities.txtの単語頻度統計
第四に、パフォーマンス分析と改善
1.可視化:
第五に、パフォーマンス分析と改善
(1)パフォーマンス解析コード
DEFメイン():#メイン機能パッケージ周波数は実行 パス= "Gone_with_the_wind.txt" bvffer = process_file(パス) word_freq = process_buffer(bvffer) output_result(word_freq)を __name__ IF == "__main__": インポートcProfile インポートpstats cProfile.runを( "メイン()"、ファイル名が= "word_freq.out") 統計オブジェクトを作成# P-pstats.Stats =( 'word_freq.out') ここで、行機能トップ10を呼び出すために#出力を ソート:)(#1 sort_statsを )(#print_stats :プリント分析、指定された印刷前数行 p.sort_stats(「コール」)print_stats(10)。 #出力トップ10の機能の動作時間に応じて #1 strip_dirs():無関係な経路情報を削除する 。p.strip_dirs()sort_stats ( "累積"、 "名前" )。print_stats(10) 上記の業績の#Process_buffer発見機能()は、最も時間のかかる 機能#ビューのprocess_buffer()関数の呼び出し p.print_callees( "process_buffer")
(2)最長の実行時間コード
言葉での単語のための:
word_freq [単語] = word_freq.get(ワード、0)+1
(5)改善されたコード
bvffer.lower()のためのアウターループに
コードを変更した後:
1.bvffer = bvffer.lower() 2.for CHで'「';:!?、」 ': 3.bvffer = bvffer.replace(CH、 "「)
変更前のパフォーマンス分析図:
パフォーマンス分析図は、変更します:
それは速く、オリジナルよりも0.247sを見ることができます。