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. @property的使用

    1.可以将某个函数变为属性 class Name(): @property def name(self): print('xiaoming') Name().name这里name已经可以当做属性来调用 ...

  2. 使用Git将本地文件提交到远程仓库

    一 操作准备条件: git远程仓库已经建好了,本地文件已经存在了,现在要将本地代码推到git远程仓库保存. 解决办法如下: 1.(先进入项目文件夹)通过命令 git init 把这个目录变成git可以 ...

  3. 【机器学习_11】基础算法:KNN

    一.概述 1.方向 2.一句话概述 3.优缺点 4.应用场景举例 二.理论 三.案例理解

  4. 通过TCPView工具查看foxmail用exchange方式连接exchange时用什么端口

    TCPView下载地址 https://docs.microsoft.com/zh-cn/sysinternals/downloads/tcpview

  5. (error) LOADING Redis is loading the dataset in memory

    redis读取/重启之后读取报错:(error) LOADING Redis is loading the dataset in memory 1.redis将之持久化的数据重新写入,等待数据写入完成 ...

  6. leetcode每日刷题计划-简单篇day10

    跳题,不熟悉的留到周末再做. 保持冷静,不信画饼. num 100 相同的树 Same Tree 做法可能不是特别简洁,注意一下.最后判断完子树以后,要确定根的数值是一样的 然后在isleaf的判定先 ...

  7. (22/24) webpack实战技巧:静态资源集中输出

    工作中会有一些已经存在但在项目中没有引用的图片资源或者其他静态资源(比如设计图.开发文档),这些静态资源有可能是文档,也有可能是一些额外的图片,而在打包时保留这些静态资源,直接打包到指定文件夹中.此时 ...

  8. Channels实现扫码登录

    参考了下别人说的原理,根据自己的逻辑实现,没有完全按照别人的原理来,所以不一定适用于大家,仅供参考吧!!! 流程如下: 1. web发起websocket链接,后端接受链接后立马发送第一次消息,为全局 ...

  9. frist Django app — 四、 完善View

    上一篇已经完成了polls的基本功能,接下来完善剩下的vote功能和并使用generic views改进请求处理view.包含表单的简单运用和前后台参数传递. 目录 vote:完善投票功能 gener ...

  10. leetcode966

    class Solution(object): def spellchecker(self, wordlist: 'List[str]', queries: 'List[str]') -> 'L ...