python词频统计及其效能分析

1) 博客开头给出自己的基本信息,格式建议如下:

  • 学号2017****7128
  • 姓名:肖文秀
  • 词频统计及其效能分析仓库:https://gitee.com/aichenxi/word_frequency1

2) 程序分析,对程序中的四个函数做简要说明。要求附上每一段代码及对应的说明。

process_file作用:打开文件,读取文件到缓冲区,关闭文件

 

# 读文件到缓冲区
def process_file(file_name):     
    try:
        # 打开文件
        file_read=open(file_name,"r")
    except IOError as s:
        print (s)
        return None
    try:
        # 读文件到缓冲区
        bvffer=file_read.read()
    except:
        print ("Read File Error!")
        return None

    #关闭文件
    file_read.close()
    return bvffer

process_buffer作用:读取文件存入字典,处理读取文件时的大小写、符号问题。统计单词出现频率

#缓冲区字符串分割成带有词频的字典
def process_buffer(bvffer):
    if bvffer:
        word_freq = {}
        # 下面添加处理缓冲区 bvffer代码,统计每个单词的频率,存放在字典word_freq

        #将文件大写字母替换为小写 ,解决大小写不同问题
        bvffer=bvffer.lower()

        #将文件中所有替换为标点符号替换为空格
        for i in '.,!?':
            bvffer=bvffer.replace(i, " ")
            
        #通过空格切分单词,存储类型为列表
        words=bvffer.strip().split()

        #遍历列表中所有单词,设字典中value=0,
        for word in words:
            #判断是否在字典中,若在,value+1,否则,value=0
            if word in word_freq:
                word_freq[word] += 1
            else:
                word_freq[word] = 0
           
        return word_freq

 

output_result作用:输出出现频率前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(item)

 

main作用:封装主函数,传入文件名称,调用定义函数,并对其传入参数

if __name__ == "__main__":由于使用原本的代码报错,现将原代码改为如下代码

def main():

    #指定文件 
    file_name = "Gone_with_the_wind.txt"
    #调用定义函数、传参数
    bvffer = process_file(file_name)
    word_freq = process_buffer(bvffer)
    output_result(word_freq)


 
if __name__ == "__main__":
    
    #导入分析Python程序性能监视模块
    import cProfile
    
    #导入用来分析cProfile输出的文件内容
    import pstats
    
    # 直接把分析结果打印到控制台
    cProfile.run("main()", "result")
    
    # 创建Stats对象
    p = pstats.Stats("result")
    
    # 按照调用的次数排序
    p.strip_dirs().sort_stats("call").print_stats()

    # 按照运行时间和函数名进行排序
    #p.strip_dirs().sort_stats("cumulative", "name").print_stats(0.5)

 

3) 性能分析结果及改进。

共执行21831次,用时0.657秒

 

 其中执行次数最多的代码:

 

 执行时间最长的代码:

 

- 给出改进优化方法,根据方法的正确性以及语言描述质量给分,最高2分

问题:输出结果中包含标点符号:”

- 给出改进代码

 

        #将文件中非字母替换为空格
        for i in [chr(x) for x in range(ord('a'), ord('z') + 1)]:
            if i:
                continue
            else:
                bvffer=bvffer.replace(i, " ")

 

运行结果:

4) 程序运行命令、运行结果截图以及改进后的程序运行命令及结果截图 。

改进前,运行结果

改进后,运行结果

 

5) 给出你对此次任务的总结与反思。

 反思:在此次任务的中,认识到对字符串的处理有很多遗忘的地方,对字典、列表、数组的使用能力有待加强。

 总结:在完成任务的同时,也捧起书,复习了基本数据类型相关的知识,重温了python的文件式启动与运行方法

转载于:https://www.cnblogs.com/aichenxi/p/10666664.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值