词频统计及效能分析

1. 博客开头给出自己的基本信息,格式建议如下:
  学号:2017*****7254;
  姓名:薛思语;
  码云项目仓库:https://gitee.com/xsy990611/master/blob/master/word_freq.py
2. 程序分析,对程序中的四个函数做简要说明。要求附上每一段代码及对应的说明。
首先声明编码方式和导入string模块中的punctuation方法

# -*- coding: UTF-8 -*-
from string import punctuation

1.读取文件函数--打开文件读入缓冲区并关闭文件

def process_file(dst):     # 读文件到缓冲区
    try:     # 打开文件
        txt = open(dst, "r")
    except IOError, 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
        for item in bvffer.strip().split():
            word = item.strip(punctuation + ‘ ‘)
            if word in word_freq.keys():
                word_freq[word] += 1
            else:
                word_freq[word] = 1
        return word_freq

3.输出Top10结果--遍历字典并输出Top10的单词

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)

4.导入argparse库用于解析命令行数据,依次执行函数

if __name__ == "__main__":
    import argparse
    parser = argparse.ArgumentParser()
    parser.add_argument(‘dst‘)
    args = parser.parse_args()
    dst = args.dst
    bvffer = process_file(dst)
    word_freq = process_buffer(bvffer)
    output_result(word_freq)

在命令中输入python word_freq.py Gone_with_the_wind.txt运行代码
结果如下,输出了词频Top10的单词和次数:

3. 简单性能分析并改进、提交代码
使用cProfile进行性能分析
python -m cProfile word_freq.py Gone_with_the_wind.txt
测试结果如下图(由于测试数据太多,只列举截图了关键信息,耗时最长,调用最多次数的函数):


:

4. 总结反思

通过这次课后作业三我对词频统计与分析有很大的了解,我和班级里的同学进行了充分的交流,也了解了自己的不足,这让我亲身体验到了从发现问题到解决问题的整个流程,懂得了如何分配时间,如何利用资源。

原文地址:https://www.cnblogs.com/xsyx/p/10666784.html

时间: 2024-08-28 05:09:18

词频统计及效能分析的相关文章

词频统计及其效能分析

---恢复内容开始--- 1) 学号:2017*****1027: 姓名:王益鑫: 码云仓库地址:https://gitee.com/shirt----2580/word_frequency: 2) 程序分析 1. 打开并读取文件 [2.添加处理 bvffer代码,统计单词的频率,存放在word_freq def process_buffer(bvffer): if bvffer: word_freq = {} # 下面添加处理 bvffer代码,统计单词的频率,存放在word_freq for

词频统计的效能测试。

因为我的词频统计程序是拿Python语言编写的,所以在网上查找了适用于Python语音的效能测试工具. 1.介绍性能分析器 profiler是一个程序,用来描述运行时的程序性能,并且从不同方面提供统计数据加以表述.Python中含有3个模块提供这样的功能,分别是cProfile, profile和pstats.这些分析器提供的是对Python程序的确定性分析.同时也提供一系列的报表生成工具,允许用户快速地检查分析结果. Python标准库提供了3个不同的性能分析器: cProfile:推荐给大部

第二周-频统计效能分析

根据作业要求对个人项目词频统计进行效能分析 工具:vs2015自带的效能分析工具: 1.第一次分析结果 string.split()方法和dictionary.contain()方法占比例较高; 由于水平问题暂时未想到解决方案,会继续探索,完善个人项目;

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

java效能分析可以使用新版本jdk自带的jvisualvm工具进行统计 由于词频统计的运行在本人使用的机器上运行很快,无法被jvisualvm捕捉到线程的运行,所以捕捉的是eclipse的运行波动间接反映词频统计的效能 捕捉到的快照如下: 词频统计处理的文件为WarAndPeace,大小3282KB约3.3MB,输出结果到文件 在程序本身内开始和结束分别加入时间戳,差值平均为480-490ms.

组合数据类型练习,英文词频统计实例上

字典实例:建立学生学号成绩字典,做增删改查遍历操作. #创建一个空字典 dict={} s=dict print(s) #增加键值对(学号-成绩) s['001']=60 s['002']=70 s['003']=80 s['004']=90 print(s) #删除 s.pop('004') print(s) #修改 s['001']=69 print(s) #查找键是否存在 s.get('005','不存在') print(s) #便历 for i in s: print(i) 2.列表,元

组合数据类型练习、英语词频统计

1.字典实例:建立学生学号成绩字典,做增删改查遍历操作. di={'9':'19','29':'39','49':'59','69':'79','89':'99'} print(di) #创建字典 di['88']=89 print('增加一个学号为88的学生信息:',di) #增加 print('查找出学号29的学生成绩:',di['29']) #查找 del(di['9']) print('删除学号为9的学生信息:',di) #删除 di['59']=77 print('修改学号为59的学生

组合数据类型练习,英文词频统计实

1,建立学生学号成绩字典,做增删改查遍历操作. #创建 d={'01':73,'02':98,'03':66,'04':88,'05':73} d {'01': 73, '02': 98, '03': 66, '04': 88, '05': 73} #查找 >>> d['04'] 88 #插入 >>> d['06']='75' >>> d {'01': 73, '02': 98, '03': 66, '04': 88, '05': 73, '06':

八、组合数据类型练习,英文词频统计实例上

1.字典实例:建立学生学号成绩字典,做增删改查遍历操作. dict={'001':'66','003':'77','006':'88','009':'99'} print('学生学号成绩:',dict) dict['007']=96 print('增加学号为007的学生的成绩为96:',dict) dict.pop('001') print('删除学号为001的学生的记录:',dict) dict['007']=100 print('修改学号为007的学生的成绩为100:',dict) prin

作业8-组合数据类型练习,英文词频统计实例上

1.字典实例:建立学生学号成绩字典,做增删改查遍历操作. 总结列表,元组,字典,集合的联系与区别. 运行结果: 2.列表,元组,字典,集合的遍历,总结列表,元组,字典,集合的联系与区别. 运行结果: 区别: 列表用"[]"表示,列表是可变的数据类型,即这种类型是可以被改变的,并且列表是可以嵌套的. 元组用"()"表示,元祖和列表十分相似,不过元组是不可变的,但也可以嵌套. 字典用"{}"表示,注意它们的键/值对用冒号分割,而各个对用逗号分割,所有