软工作业三:对输入文件的词频统计

一、程序分析 

  (1)、读文件到缓冲区

def process_file(dst):           #读文件到缓冲区
    try:                         #打开文件
       txt = open(dst,'r')       #dst为文本目录路径
    except IOError as s:
        print(s)
        return None
    try:                         #读文件到缓冲区
        bvffer = txt.read()
    except:
        print("Read File Error!!")
        return None
    txt.close()
    return bvffer

     (2)、处理缓冲区代码,统计每个单词的频率,存放在字典中           

def process_buffer(bvffer):
    if bvffer:
       word_freq = {}
       #下面添加处理缓冲区bvffer代码,统计每个单词的频率,存放在word_freq
       bvffer = bvffer.lower()
       for ch in '“‘!;,.?”':             # 除去文本中的中英文标点符号
            bvffer = bvffer.replace(ch, " ")
            words = bvffer.strip().split()
            for word in words:
            word_freq[word] = word_freq.get(word, 0) + 1
       return word_freq

    (3)、设置输出函数,输入词频数量排序结果

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("词:%-5s 频:%-4d " % (item[0], item[1]))

     (4)、主函数

def main():
    dst ='F:/软件工程/word_freq/Gone_with_the_wind.txt'  # 《飘》文件的路径
    bvffer = process_file(dst)
    word_freq = process_buffer(bvffer)
    output_result(word_freq)

二、代码风格说明

    (1)缩进

             Python语言对代码之间的缩进表达代码之间的包括与层次关系,要求严格明确 ,格式为四个空格。

             习惯C语言的人容易在这点上犯错,会出现语法错误:

             IndentationError: unindent does not match any outer indentation level

三、程序运行结果截图 

     

四、性能分析结果及改进  

    (1)、执行次数最多

            结果表明代码   word_freq[word] = word_freq.get(word, 0) + 1   执行次数最多

              

    (2)、执行时间最长

           

     (3)、查看三个函数分别调用了哪些函数

             

     注:ncalls:表示函数调用的次数;
           tottime:表示指定函数的总的运行时间,除掉函数中调用子函数的运行时间;
           percall:(第一个percall)等于 tottime/ncalls;
           cumtime:表示该函数及其所有子函数的调用运行的时间,即函数开始调用到返回的时间;
           percall:(第二个percall)即函数运行一次的平均时间,等于 cumtime/ncalls;
           filename:lineno(function):每个函数调用的具体信息;

    (4)、可视化操作

  • 需要安装:graphviz 到官网下载graphviz-2.38.zip
  • 下载gprof2dot.py

  • 执行下述步骤:

    1.  进行性能分析;分析结果保存到 result 文件,cProfile.run("main()", "result"); 2. 转换为图形; 将 result文件 转换为 png 图形格式。 命令:python gprof2dot.py -f pstats result | dot -Tpng -o result.png
  • 转换得到图形如下:

猜你喜欢

转载自www.cnblogs.com/NANA2018/p/9751166.html
今日推荐