课后作业3词频统计
学号:2017035101029
姓名:薛朋
SRE实战 互联网时代守护先锋,助力企业售后服务体系运筹帷幄!一键直达领取阿里云限量特价优惠。码云仓库:https://gitee.com/xp149/word_frequency
一:程序分析:
|
打开文件,并将读取的文件到缓冲区 |
|
|
将添加到缓存区的文件中的代码,进行统计,存放在word_freq中
|
|
|
输出TOP的单词 |
|
将文件分析 把文件分析后的结果输出
|
二:程序改进:
1.执行次数最多的代码
1 # filename: word_freq.py
2 # 阅读注释,在所有pass处删除pass,添加代码
3
4 from string import punctuation
5
6
7 def process_file(dst): # 读文件到缓冲区
8 try: # 打开文件
9 a =open("Gone_with_the_wind.txt","r")
10
11
12 except IOError:
13 print
14 return None
15 try: # 读文件到缓冲区
16 bvffer = a.read()
17 except:
18 print ("Read File Error!")
19 return None
20 a.close()
21
22 return bvffer
23
24
25 def process_buffer(bvffer):
26 if bvffer:
27
28 word_freq = {}
29 # 下面添加处理缓冲区 bvffer代码,统计每个单词的频率,存放在字典word_freq
30 bvffer=bvffer.lower()
31 for x in '~!@#$%^&*()_+/*-+\][':
32 bvffer=bvffer.replace(x, " ")
33 words=bvffer.strip().split()
34 for word in words:
35 word_freq[word]=word_freq.get(word,0)+1
36 return word_freq
37
38
39
40
41
42
43 def output_result(word_freq):
44 if word_freq:
45 sorted_word_freq = sorted(word_freq.items(), key=lambda v: v[1], reverse=True)
46 for item in sorted_word_freq[:10]: # 输出 Top 10 的单词
47 print(item)
48
49 def main():
50
51 dst = "A_Tale_of_Two_Cities.txt"
52 bvffer = process_file(dst)
53 word_freq = process_buffer(bvffer)
54 output_result(word_freq)
55
56 if __name__ == "__main__":
57 import cProfile
58 import pstats
59 cProfile.run("main()", "result")
60 # 直接把分析结果打印到控制台
61 p = pstats.Stats("result")
62 p.strip_dirs().sort_stats("call").print_stats()
63 p.strip_dirs().sort_stats("cumulative").print_stats()
64 p.print_callers(0.7, "process_file")
65 p.print_callers(0.7, "process_buffer")
66 p.print_callers(0.7, "output_result")
2.执行时间最长的代码
# filename: word_freq.py
# 阅读注释,在所有pass处删除pass,添加代码
from string import punctuation
def process_file(dst): # 读文件到缓冲区
try: # 打开文件
a =open("Gone_with_the_wind.txt","r")
except IOError:
print
return None
try: # 读文件到缓冲区
bvffer = a.read()
except:
print ("Read File Error!")
return None
a.close()
return bvffer
def process_buffer(bvffer):
if bvffer:
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):
if word_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():
dst = "A_Tale_of_Two_Cities.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")
p.strip_dirs().sort_stats("call").print_stats()
p.strip_dirs().sort_stats("cumulative").print_stats()
p.print_callers(0.7, "process_file")
p.print_callers(0.7, "process_buffer")
p.print_callers(0.7, "output_result")
3.程序改进优化的方法以及我的改进代码:提高输出速度和代码运行的时间,缩短代码运行的复杂步骤,节省楚更多的时间。
三:程序运行命令、运行结果截图以及改进后的程序运行命令及结果截图
程序运行命令:
python word_freq.py Gone_with_the_wind.txt
改进后的程序运行命令:
from string import punctuation
改进后运行结果截图:
给出你对此次任务的总结与反思:任务的代码太多 还要自己去改进和分析 代码有点难敲 作业有点不会 需要进一步提升。
更多精彩

