Python词频统计-程序员宅基地

技术标签: python  

作为我的python入门的一个小实验之一,我早在六月份的时候就进行了md笔记的编写,没有发布在博客上,这次,它将作为我在博客的第一篇。

我们知道,生活中的一些文本是嘈杂的,它可能含有很多的噪声数据,所以我们需要对其进行数据清洗处理,拿到我们想要的数据,词频统计就是其中一个获取文本价值信息的一种方式。

在学习了Python的字典和文件处理后,我们就可以对这个例子进行一个具体的实现了。

我将写入两个例子对其进行展示,因为搬运的是我初学时的笔记,所以如有错误请评论指正~

一、Hamlet词频统计

https://python123.io/resources/pye/hamlet.txt

以上为hamlet英文版文本的获取路径,下载完成后保存到工程路径下。

二、数据预处理

像以上提到的,我们的文本中含有标点和字符的噪声数据,所以要进行数据的清洗,将文档全部处理为只有我们需要的字母类型(为方便操作,用空格替换噪声数据,将文档全部转化为小写字母)

打开文件,进行读取,清洗数据,数据归档。

定义为函数处理

def getText():
    txt = open("hamlet.txt","r").read()
    txt = txt.lower()
    for ch in '!@#$%^&*()_/*-~':
        txt = txt.replace(ch," ")
    return txt

三、数值统计

因为这里我们要找出出现次数最多的词组,所以要进行存储比较它们的出现次数,这里显然是一种映射的关系,所以我们采取字典的方式对数据进行存储。

具体使用到字典的get函数实现

hamlet = getText()
words = hamlet.split()
counts = {}
for word in words:
    counts[word] = counts.get(word,0) + 1

四、转换处理

到这一步,我们就将所有在文档中出现的词组和其对应个数存入字典counts中了,因为字典是无序的,所以我们采取对其进行转化列表,利用列表的有序性进行排序。

sort函数中,reverse默认为False(从小到大),这里我们将值设为True(从大到小)排序。这样就会生成一个我们需要的序列了。

items = list(counts.items())
items.sort(key= lambda x:x[1],reverse=True)
for i in range(10):
    word, count = items[i]
    print("{0:<10}{1:>5}".format(word,count))

输出结果:

四、三国演义人物出场频数

明白了上面的操作,我们也很容易的对中文文本进行操作了

利用jieba库,进行中文分词,将其存入列表words中,遍历,将词组和词频作为键值对存入列表counts中,利用列表的有序性,进行排序,然后输出

https://python123.io/resources/pye/threekingdoms.txt

以上为三国演义中文版文本获取链接,下载后保存到工程路径下

利用jieba库,

import jieba
txt = open("threekingdoms.txt","r",encoding="utf-8").read()
counts = {}
words = jieba.lcut(txt)
for word in words:
    if len(word) == 1:
        continue
    else:
        counts[word] = counts.get(word,0) + 1
items = list(counts.items())
items.sort(key = lambda x:x[1] , reverse=True)
for i in range(15):
    word , count = items[i]
    print("{0:<10}{1:>5}".format(word,count))

该实验较于哈姆雷特版简单,不用去处理字符类噪声数据,这也得益于jieba库的简易操作。

但随之带来的是词频的模糊,因为jieba库的特性,导致不是人名的词组也被统计了进来。

如结果中的“二人”、”孔明曰“,这些都是冗余和词组问题的错误。

所以我们应该还需要进行进一步的处理,让词频统计人物的名字次数

经过前几步的操作,我们输出了出现频率最高的15给词组,可我们如果想要人物的出场频率呢? 这就需要对原文件进行过滤,把我们不需要的输出删除。

因为之前的输出可以简单的获取到出现频率高但不是人名的词组,所以我们这里把它们储存到一个集合中,遍历并删除原文件中存在的这些词组。

excludes = {"将军","却说","二人","不可","荆州","不能","如此","商议","如何","主公","军士","左右","军马"}
for i in excludes:
    del counts[i]

冗余处理:把出现频率高的相同人物别名进行统一

  elif word == "诸葛亮" or word == "孔明曰":
        rword = "孔明"
    elif word == "关公" or word == "云长":
        rword = "关羽"
    elif word == "玄德" or word == "玄德曰":
        rword = "刘备"
    elif word == "孟德" or word ==  "丞相":
        rword = "曹操"

 反复的经过这些处理,我们可以得到我们想要的输出

import jieba
txt = open("threekingdoms.txt","r",encoding="utf-8").read()
counts = {}
excludes = {"将军","却说","二人","不可","荆州","不能","如此","商议","如何","主公","军士","左右","军马"}
words = jieba.lcut(txt)
for word in words:
    if len(word) == 1:
        continue
    elif word == "诸葛亮" or word == "孔明曰":
        rword = "孔明"
    elif word == "关公" or word == "云长":
        rword = "关羽"
    elif word == "玄德" or word == "玄德曰":
        rword = "刘备"
    elif word == "孟德" or word ==  "丞相":
        rword = "曹操"
    else:
        rword = word
    counts[rword] = counts.get(rword,0) + 1
for i in excludes:
    del counts[i]
items = list(counts.items())
items.sort(key = lambda x:x[1] , reverse=True)
for i in range(7):
    word,count = items[i]
    print("{0:<10}{1:>5}".format(word,count))

 

以上就是我对三国演义中文文档的人物出场词频统计笔记。

至此,还可以对各类报告、报道等进行词频统计,以找出其重点内容。

以上为hamlet英文文档及三国演义人物出场词频统计的实现。

欢迎大家留言讨论~~

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/m0_55975991/article/details/121887916

智能推荐

基于图像的目标检测与定位方法概述_图像定位算法-程序员宅基地

文章浏览阅读1.4w次,点赞15次,收藏97次。目录1. 目标检测与定位概念2. 目标检测与定位方法2.1 传统目标检测流程2.2 two-stage检测算法2.2.1 R-CNN2.2.2 two-stage其他算法2.2.2.1 Spatial Pyramid Pooling(空间金字塔池化)2.2.2.2 Fast-RCNN2.2.2.3 P11 Faster RCNN2.3 One-Stage2.3.1 YOLO2.3.2 SSD参考本文简单介绍基于图像的目标检测与定位相关概念,R-CNN和YOLO等算法基本思想。本文为学习笔记,参考了许多优_图像定位算法

数字图像处理Matlab-小波变换在图像处理中的应用(附代码)_小波分解与重构在图像处理的应用-程序员宅基地

文章浏览阅读9.8k次,点赞40次,收藏131次。目录1.Objectives:2.Experiment Content:3.Experiment Principle:4.Experiment Steps Result and Conlusion:1、了解各种小波性质2、观察各种小波函数及其尺度函数3、获得小波滤波器4、二维小波变换函数与重构函数5、查看及处理小波系数6、用小波变换进行图像压缩与边缘提取【附录】实现代码1.Objectives:..._小波分解与重构在图像处理的应用

如何把海思 Hi3556、Hi3559当ipc芯片使用_hi3556的固件可以刷hi3559吗-程序员宅基地

文章浏览阅读8k次。解决思路:1、网络方面:这两颗料没有网口,那么给linux系统端移植一颗usb转网卡的芯片即可,价格一两块RMB,可行。2、去掉middleware和reference层,直接在ndk层进行操作;3、如果对图像有要求,可以在相关接口扩展指令,从而达到间接使用mpi接口的目的;..._hi3556的固件可以刷hi3559吗

创龙TI OMAP-L138(定点/浮点DSP C674x+ARM9)RJ45以太网口_am1808 代换-程序员宅基地

文章浏览阅读466次。CPUOMAP-L138、TMS320C6748、AM1808三款CPU管脚兼容,外设资源基本相同。OMAP-L138TI公司的达芬奇架构嵌入式应用处理器开始使用DSP与ARM结合的非对称多核结构,OMAP-L138就是其中的一款低功耗双核嵌入式处理器。OMAP-L138双核架构兼具DSP的高数字信号处理性能和精简指令计算机(RISC)技术的优点,双核均是32位处理器。以下是OMAP-L138 CPU的资源框图:RJ45以太网口开发板采用了SMSC的LAN8710A网卡芯片,它可以自_am1808 代换

个人测试文档_测试文档csdn-程序员宅基地

文章浏览阅读71次。YYYYYYYY欢迎使用Markdown编辑器你好! 这是你第一次使用 Markdown编辑器 所展示的欢迎页。如果你想学习如何使用Markdown编辑器, 可以仔细阅读这篇文章,了解一下Markdown的基本语法知识。新的改变我们对Markdown编辑器进行了一些功能拓展与语法支持,除了标准的Markdown编辑器功能,我们增加了如下几点新功能,帮助你用它写博客:全新的界面设计 ,将会带来全新的写作体验;在创作中心设置你喜爱的代码高亮样式,Markdown 将代码片显示选择的高亮样式 进行展_测试文档csdn

vue中的uri_Vue.js——vue-resource全攻略-程序员宅基地

文章浏览阅读201次。概述上一篇我们介绍了如何将$.ajax和Vue.js结合在一起使用,并实现了一个简单的跨域CURD示例。Vue.js是数据驱动的,这使得我们并不需要直接操作DOM,如果我们不需要使用jQuery的DOM选择器,就没有必要引入jQuery。vue-resource是Vue.js的一款插件,它可以通过XMLHttpRequest或JSONP发起请求并处理响应。也就是说,$.ajax能做的事情,vue-..._vue uri

随便推点

零基础制作服务器,问下大佬们 零基础学搭建服务器要学些啥-程序员宅基地

文章浏览阅读855次。慕尼黑3412238先从java基础语法学起 然后是sql语法然后是JAVA 的servlt和 JDBC然后spring构建项目的时候需要用到点工具比如MAVEN 这个也很重要还需要一个web容器 tomcat最后如果你的服务器环境是linux还需要学习一下命令https://www.wandoujia.com/search?key=pcp%E9%87%8E%E7%8C%AB%E5%A8..._搭建服务器需要学什么

ROSTCM6情感分析结果乱码_rostcm6情感分析error-程序员宅基地

文章浏览阅读2.4w次,点赞2次,收藏12次。1.原因:出现这种乱码的原因是放入ROSTCM6文件编码不对,ROSTCM6放入的编码必须是ANSI,所以到处的时候把格式设置为ANSI就可以了。代码示例如下:import pandas as pdinputfile = '../data/meidi_jd_process_4.txt' #评论文件outputfile = '../data/meidi_jd_process_5.txt'......_rostcm6情感分析error

ubuntu实用指令_ubuntu命令大全-程序员宅基地

文章浏览阅读7.1k次,点赞3次,收藏68次。Ubuntu实用指令_ubuntu命令大全

原生 table 浏览器 border 粗细不一致(谷歌90版本以后) table兼容问题_兼容模式下 table表格边框变粗的问题-程序员宅基地

文章浏览阅读2.6k次,点赞2次,收藏6次。.formTable{ border-spacing: 1px; background-color: rgba(201,201,201,1); /*边线颜色*/ border-collapse: separate; }td ,tr{ background-color: #fff;}谷歌更新到90版本后,border-collapse:collapse ; 属性出现问题导致,border 出现宽度不一![在这里插入图片描述](https://img-blog.csdni_兼容模式下 table表格边框变粗的问题

C调用汇编_c 里面调用汇编-程序员宅基地

文章浏览阅读1.6k次。1.80X86 32位汇编基础以及寄存器设定 2.栈帧与C函数调用 3.函数调用的汇编级解释以及栈图 4.stdcall和cdcel------------------------------------------------------1. 80X86 32位CPU的编程模型(programming model) 80X86有16个通用寄存器register。从某种程度_c 里面调用汇编

python求鸡兔同笼 鸡兔总数鸡兔腿_编写一个程序解鸡兔同笼问题:已知鸡兔总数为a,鸡兔腿总数为b,计算鸡兔各有多少只?...-程序员宅基地

文章浏览阅读1.4k次。【单选题】42. Wie alt ist deine Schwester? Ist sie noch klein? - Ja, sie ist acht.(1998)【单选题】46. Er behauptet, dass er niemals vorher danach .(2014)【多选题】在矩阵组织结构中,项目管理班子成员要直接接受( )的领导 (2.0分)【多选题】(2.0分)【单选题..._gegegan