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的文件式启动与运行方法

python词频统计及其效能分析的更多相关文章

  1. Python 词频统计

    利用Python做一个词频统计 GitHub地址:FightingBob [Give me a star , thanks.] 词频统计 对纯英语的文本文件[Eg: 瓦尔登湖(英文版).txt]的英文 ...

  2. python实现四则运算和效能分析

    代码github地址:https://github.com/yiduobaozhi/-1 PSP表格: 预测时间(分钟) planning 计划 15 Estimate 估计这个任务需要多少时间 10 ...

  3. 大数据python词频统计之本地分发-file

    统计某几个词在文章出现的次数 -file参数分发,是从客户端分发到各个执行mapreduce端的机器上 1.找一篇文章The_Man_of_Property.txt如下: He was proud o ...

  4. 大数据python词频统计之hdfs分发-cacheArchive

    -cacheArchive也是从hdfs上进分发,但是分发文件是一个压缩包,压缩包内可能会包含多层目录多个文件 1.The_Man_of_Property.txt文件如下(将其上传至hdfs上) ha ...

  5. 大数据python词频统计之hdfs分发-cacheFile

    -cacheFile 分发,文件事先上传至Hdfs上,分发的是一个文件 1.找一篇文章The_Man_of_Property.txt: He was proud of him! He could no ...

  6. python词频统计

    1.jieba 库 -中文分词库 words = jieba.lcut(str)  --->列表,词语 count = {} for word in words: if len(word)==1 ...

  7. C#词频统计 效能分析

    在邹老师的效能分析的建议下对上次写过的词频统计的程序进行分析改进. 效能分析:个人很浅显的认为就是程序的运行效率,代码的执行效率 1.VS 提供了自带的分析工具:performance tool (性 ...

  8. 效能分析——词频统计的java实现方法的第一次改进

    java效能分析可以使用JProfiler 词频统计处理的文件为WarAndPeace,大小3282KB约3.3MB,输出结果到文件 在程序本身内开始和结束分别加入时间戳,差值平均为480-490ms ...

  9. 《构建之法》教学笔记——Python中的效能分析与几个问题

    <构建之法:现代软件工程>中第2章对效能分析进行了介绍,基于的工具是VSTS.由于我教授的学生中只有部分同学选修了C#,若采用书中例子讲解,学生可能理解起来比较困难.不过所有这些学生都学习 ...

随机推荐

  1. extentreports

    关于extentreports使用的一些个人见解 首先导入jar包, 使用maven导入,我再次首先导入的是 <version>4.0.5</version>版本的jar包,但 ...

  2. 通过JS 给这个input加一个事件 获得焦点,回车事件绑定

    通过JS 给这个input加一个事件 就是获得焦点就行了 window.onload = function(){ var oInput = document.getElementById(" ...

  3. Error occurred during initialization of VM Could not reserve enough space for object heap

    Error occurred during initialization of VM Could not reserve enough space for object heap Java虚拟机(JV ...

  4. iptables 配置说明

    #配置,禁止进,允许出,允许回环网卡 iptables -P INPUT DROP iptables -P OUTPUT ACCEPT iptables -A INPUT -i lo -j ACCEP ...

  5. vue+axios完美实现前端路由拦截

    一.路由拦截 1.首先在router的index.js里配置一个自定义字段requireAuth,用该字段来判断进入该路由是否需要登录.如果已经登陆则进入该路由,反之则进入登录页面. 如图是路由配置: ...

  6. js将一维数组转化为二维数组

    遇到的问题: 后端返回的是一组一维数组,但是需要展示的格式是二维数组,常见的场景举例:后台返回10个长度的数组,需要分成3个一组展示在banner上. 例:[1,2,3,4,5,6,7,8,9,10] ...

  7. 使用NPM安装Vue项目

    使用NPM安装Vue项目步骤如下: 一.先安装node.js,下载node.js安装包,node.js安装成功之后,左击电脑左下角>运行>输入cmd,如下图所示: 二.点击确定进入,分别在 ...

  8. zuul ci

    . ├── a_module ├── b_module ├── lib ├── zuul │   ├── check │   ├── ci │   ├── gate │   ├── layout.ya ...

  9. py3,休息时间玩点小把戏

    100以内奇数: ls = [x for x in range(100) if x % 2 == 1] 100以内偶数: ls = list(x for x in range(100) if x % ...

  10. nginx出现404和403错误

    配置文件的路径usr/local/nginx/conf/nginx.conf