软工作业三:个人编程练习

一:程序分析

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)可视化操作

 

posted on 2018-10-09 22:10  ghdksj  阅读(152)  评论(1)    收藏  举报