python统计词频

一、程序分析

(1)读取文件到缓冲区

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

  

(2)缓冲区字符串分割成带有词频的字典

def process_buffer(bvffer):
    if bvffer:
        word_freq = {}
        # 下面添加处理缓冲区 bvffer代码,统计每个单词的频率,存放在字典word_freq
        bvffer=bvffer.lower()
        for x in ‘[email protected]#$%^&*()_+/*-+\][‘:
            bvffer=bvffer.replace(x, " ")
        words=bvffer.strip().split()
        for word in words:
            word_freq[word]=word_freq.get(word,0)+1
        return word_freq

  

(3)将字典按词频排序并输出排名前十的词频对

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)封装main函数

def main():

    dst = "Gone_with_the_wind.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")  # 创建Stats对象
    p.strip_dirs().sort_stats("call").print_stats()  # 按照调用的次数排序
    p.strip_dirs().sort_stats("cumulative").print_stats()  # 按执行时间次数排序
    p.print_callers(0.5, "process_file")  # 如果想知道有哪些函数调用了process_file,小数,表示前百分之几的函数信息
    p.print_callers(0.5, "process_buffer")  # 如果想知道有哪些函数调用了process_buffer
    p.print_callers(0.5, "output_result")  # 如果想知道有哪些函数调用了output_res

  

二、代码风格

缩进

使用4个空格进行缩进

ef process_buffer(bvffer):
    if bvffer:

  

行宽

每行代码尽量不超过80个字符

三、程序运行命令、运行结果截图

 四、性能分析结果及改进

 执行次数最多

 执行时间最多

五、可视化操作

 

  • 需要安装:graphviz , "pip install graphviz"; 参考使用cProfile分析Python程序性能:链接
  • 下载转换 dot 的 python 代码gprof2dot 官方下载,下载完了,解压缩,将『gprof2dot.py』 copy 到当前分析文件的路径,或者你系统 PATH 环境变量设置过的路径

1. 性能分析:python -m cProfile -o result -s cumulative word_freq.py Gone_with_the_wind.txt;分析结果保存到 result 文件;

2. 转换为图形;gprof2dot 将 result 转换为 dot 格式;再由 graphvix 转换为 png 图形格式。 

命令:python gprof2dot.py -f pstats result | dot -Tpng -o result.png

得到以下图

原文地址:https://www.cnblogs.com/zhouzhan/p/9763681.html

时间: 2024-11-05 00:41:54

python统计词频的相关文章

python统计文档中词频

python统计文档中词频的小程序 python版本2.7 程序如下,测试文件与完整程序在我的github中 1 #统计空格数与单词数 本函数只返回了空格数 需要的可以自己返回多个值 2 def count_space(path): 3 number_counts = 0 4 space_counts = 0 5 number_list = [] 6 7 with open(path, 'r') as f: 8 for line in f: 9 line = line.strip() 10 sp

使用Python统计文件中词频,并且生成词云

.title { text-align: center } .todo { font-family: monospace; color: red } .done { color: green } .tag { background-color: #eee; font-family: monospace; padding: 2px; font-size: 80%; font-weight: normal } .timestamp { color: #bebebe } .timestamp-kwd

python进行分词及统计词频

#!/usr/bin/python # -*- coding: UTF-8 -*- #分词统计词频 import jieba import re from collections import Counter content="" filename=r"../data/commentText.txt"; result = "result_com.txt" r='[0-9\s+\.\!\/_,$%^*()?;::-[]+\"\']+|[+

[学习记录]NLTK常见操作一(去网页标记,统计词频,去停用词)

NLTK是python环境中的一个非常流行的NLP库,这篇记录主要记录NLTK的一些常见操作 1.去除网页html标记 我们常常通过爬虫获取网页信息,然后需要去除网页的html标签.为此我们可以这么做: 2.统计词频 这里使用的tokens就是上面图中的tokens 3.去除停用词 停用词就是类似the,a,of这种语义无价值的词,取出后我们还可以把统计图画出来 4.绘制词云图 对于词云图的使用原理还不太清楚,只是找了一个可运行的公式 原文地址:https://www.cnblogs.com/t

如何用Python统计《论语》中每个字的出现次数?10行代码搞定--用计算机学国学

编者按: 上学时听过山师王志民先生一场讲座,说每个人不论干什么,都应该学习国学(原谅我学了计算机专业)!王先生讲得很是吸引我这个工科男,可能比我的后来的那些同学听课还要认真些,当然一方面是兴趣.一方面是跨了学科听课,内容引人入胜,主要还是我懂得太少了,哈!我记得当时讲座的主题是有关孔子与齐鲁大地的关系,也正是那场讲座让我下决心跨学院选修了<中国古代思想文化史研究>,才让我对于诸子百家思想有了更深的认识,教授们轮番上阵,让我们学习到我们中华民族先贤智慧.也认识了历史学和中国哲学专业的同学,其中还

Python统计列表中的重复项出现的次数的方法

前言 在实际工作和学习中,经常会遇到很多重复的数据,但是我们又必须进行统计,所及这里简单介绍一下统计列表中重复项的出现次数的简单方法. 实例 本文实例展示了Python统计列表中的重复项出现的次数的方法,是一个很实用的功能,适合Python初学者学习借鉴.具体方法如下: #方法1: mylist = [1,2,2,2,2,3,3,3,4,4,4,4] myset = set(mylist)  #myset是另外一个列表,里面的内容是mylist里面的无重复 项 for item in myset

python 统计时间,写日志

python 统计时间使用time模块,写日志使用logging模块,这两个都是标准模板. 测试socket使用socket模块 # 统计时间 ---------------------- import time start = time.time() end = time.time() stamp = end - start print "耗时", stamp # 日志 ----------------------- import loggingimport datetime cur

C++回顾 统计词频问题 -- vector、map、hash_map(三种方式时间比较)

本博文我们通过三个程序比较统计词频问题的时间复杂度问题: 问题描述; 1).找一篇文章,将所有单词输入至程序:(The Bible Holy为例) 2).统计出每个单词的数量,即词频问题: 3).增加停用词功能:(遇到此类词,直接略过)(网上搜) 4).分别统计出读取文件并计算词频时间.排序所用时间: 5).用 类 实现各函数(处统计时间的函数除外). vector.map.hash_map 都要处理字符串的 去除标点符号.将大写字母转换成小写字母.不对数字进行统计 问题.因此,我们可以将处理这

使用Python统计端口TCP连接数

此脚本可以用来统计某个端口上连接的IP的数量,统计连接到这一端口的所有IP.最多的IP和次数以及TCP连接状态. 涉及到Python读取网络连接统计信息以及统计计算的一些基本操作.在编写脚本的过程中预先定义了统计信息的数据结构,在向最终结果中添加统计信息时需要用到list去重功能,因此临时创建了一个列表使用set()函数去重.set()函数不能直接add字典类型,因此先将字典转成可哈希的字符串,再将去重后的字符串转成字典.其中字典.列表和集合都属于不可哈希的类型. 此脚本可以用于Windows.