软工作业三:个人编程练习
一:程序分析
1.读文件到缓冲区
def process_file(dst): # 读文件到缓冲区 try: # 打开文件 doc=open(dst, 'r') except IOError as s: print(s) return None try: # 读文件到缓冲区 bvffer = doc.read() except: print("Read File Error!") return None doc.close() return bvffer
2、处理缓冲区,统计每个单词的频率,存放在字典word_freq
def process_buffer(bvffer): if bvffer: word_freq = {} # 下面添加处理缓冲区 bvffer代码,统计每个单词的频率,存放在字典word_freq bvffer = bvffer.lower() # 把文本中大写字母转换为小写 for ch in '!"#$%&()*+-,-./:;<=>?@“”[\\]^_{|}~': # 除去文本中的中英文标点符号并将文本内容改为小写 bvffer = bvffer.replace(ch, " ") words = bvffer.split() # 分割字符串 for word in words: word_freq[word] = word_freq.get(word, 0) + 1 return word_freq
3、输出 Top 10 的单词
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("{0:<10}{1:>5}".format(item[0], item[1]))
4、创建一个main函数,进行文本测试
def main(): dst = 'Gone_with_the_wind.txt' bvffer = process_file(dst) word_freq = process_buffer(bvffer) output_result(word_freq)
5、添加进主函数,统计并评估该词频
if __name__ == "__main__": import cProfile import pstats cProfile.run("main()", filename="result.out") # 把分析结果保存到文件中,增加排序方式 p = pstats.Stats('result.out') # 创建Stats对象 p.sort_stats('calls').print_stats(10) # 按照调用次数排序,打印前10函数的信息 p.strip_dirs().sort_stats("cumulative", "name").print_stats(10) # 按照运行时间和函数名排序,只打印前10行函数的信息 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_result() p.print_callees("process_buffer") # 查看process_buffer()函数中调用了哪些函数
二:代码风格说明
用四个空格来缩进代码 顶级定义之间空两行,比如函数或者类定义 方法定义/类定义与上一个方法/类之间空一行 函数或者方法中,某些地方觉得合适,也可以空一行
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("{0:<10}{1:>5}".format(item[0], item[1]))
三:程序运行命令、运行结果截图
(1)Gone_with_the_wind文本词频统计结果
四:性能分析结果
(2)可视化操作