课后作业3词频统计

学号:2017035101029

姓名:薛朋

码云仓库: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

 改进后运行结果截图:

给出你对此次任务的总结与反思:任务的代码太多  还要自己去改进和分析 代码有点难敲  作业有点不会  需要进一步提升。

猜你喜欢

转载自www.cnblogs.com/qq1498766808/p/10670491.html