技术标签: python
作为我的python入门的一个小实验之一,我早在六月份的时候就进行了md笔记的编写,没有发布在博客上,这次,它将作为我在博客的第一篇。
我们知道,生活中的一些文本是嘈杂的,它可能含有很多的噪声数据,所以我们需要对其进行数据清洗处理,拿到我们想要的数据,词频统计就是其中一个获取文本价值信息的一种方式。
在学习了Python的字典和文件处理后,我们就可以对这个例子进行一个具体的实现了。
我将写入两个例子对其进行展示,因为搬运的是我初学时的笔记,所以如有错误请评论指正~
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英文文档及三国演义人物出场词频统计的实现。
欢迎大家留言讨论~~
文章浏览阅读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等算法基本思想。本文为学习笔记,参考了许多优_图像定位算法
文章浏览阅读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:..._小波分解与重构在图像处理的应用
文章浏览阅读8k次。解决思路:1、网络方面:这两颗料没有网口,那么给linux系统端移植一颗usb转网卡的芯片即可,价格一两块RMB,可行。2、去掉middleware和reference层,直接在ndk层进行操作;3、如果对图像有要求,可以在相关接口扩展指令,从而达到间接使用mpi接口的目的;..._hi3556的固件可以刷hi3559吗
文章浏览阅读466次。CPUOMAP-L138、TMS320C6748、AM1808三款CPU管脚兼容,外设资源基本相同。OMAP-L138TI公司的达芬奇架构嵌入式应用处理器开始使用DSP与ARM结合的非对称多核结构,OMAP-L138就是其中的一款低功耗双核嵌入式处理器。OMAP-L138双核架构兼具DSP的高数字信号处理性能和精简指令计算机(RISC)技术的优点,双核均是32位处理器。以下是OMAP-L138 CPU的资源框图:RJ45以太网口开发板采用了SMSC的LAN8710A网卡芯片,它可以自_am1808 代换
文章浏览阅读71次。YYYYYYYY欢迎使用Markdown编辑器你好! 这是你第一次使用 Markdown编辑器 所展示的欢迎页。如果你想学习如何使用Markdown编辑器, 可以仔细阅读这篇文章,了解一下Markdown的基本语法知识。新的改变我们对Markdown编辑器进行了一些功能拓展与语法支持,除了标准的Markdown编辑器功能,我们增加了如下几点新功能,帮助你用它写博客:全新的界面设计 ,将会带来全新的写作体验;在创作中心设置你喜爱的代码高亮样式,Markdown 将代码片显示选择的高亮样式 进行展_测试文档csdn
文章浏览阅读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..._搭建服务器需要学什么
文章浏览阅读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
文章浏览阅读7.1k次,点赞3次,收藏68次。Ubuntu实用指令_ubuntu命令大全
文章浏览阅读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表格边框变粗的问题
文章浏览阅读1.6k次。1.80X86 32位汇编基础以及寄存器设定 2.栈帧与C函数调用 3.函数调用的汇编级解释以及栈图 4.stdcall和cdcel------------------------------------------------------1. 80X86 32位CPU的编程模型(programming model) 80X86有16个通用寄存器register。从某种程度_c 里面调用汇编
文章浏览阅读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