使用python进行字频统计和词频统计

问题描述

  1. 读取给定的语料库,根据制表符’\t’划分其文本与标签,将获得的文本仅保留汉字部分,并按字划分,保存在列表中,至少使用一种方法,统计所有汉字的出现次数,并按照从高到低的顺序排序;至少使用一种方法,统计所有字频,按照从高到低的顺序排序;至少使用一种方法,计算累计频率,按照从高到低的顺序排序
  2. 读取给定的语料库,根据制表符’\t’划分其文本与标签,将获得的语料使用jieba分词工具进行分词并保存至列表中,使用停用词表过滤停用词,保留非停用词, 至少使用一种方法,统计所有汉字词的出现次数,并按照从高到低的顺序排序;至少使用一种方法,统计所有词频,按照从高到低的顺序排序;至少使用一种方法,计算累计频率,按照从高到低的顺序排序

对给定的语料库对其进行字频和词频统计

文章目录

  • 问题描述
  • 字频统计
    • 处理步骤与思路
    • 结果展示
  • 词频统计
    • 处理步骤与思路:
    • 结果展示


字频统计

处理步骤与思路

1、这个实验所用到的数据是按行保存的数据,所以可以使用python中的readline函数进行读取文件,这样得到的每一行数据就是对应的一条新闻,这些新闻又是以制表符/t来分割的,所以制表符前面的内容当作标题,制表符后面的符号当做内容,将这两部分内容放到列表中,所以这里使用到python的split函数进行分割得到对应新闻的标签和内容

2、将文本内容只保留汉字部分,去除标点符号以及空格,在这里我使用到的是python中的正则表达式,对文本中出现的各种标点符号比如中英文下的逗号、句号、感叹号等一系列标点符号进行去除,同时使用到\d和\s分别匹配数字和空格,使用正则表达式re的sub函数进行去除这些相应的符号。将文本处理好之后再使用list函数,将处理好的字符串合并成列表,完成实验要求。

file = open(file='data.txt', mode='r', encoding='utf-8')
lines = file.readlines()
lables = []             # 保存每条新闻的标签
contents = []           # 保存每条新闻的内容
i = 0
words = []              # 用来保存所有的汉字
strs = ''               # 用于保存保留下的所有汉字
# 将文本文件中的内容进行分割,制表符前面的内容当作标题,制表符后面的符号当做内容,将这两部分内容放到列表中
for line in lines:                  # 我分析文本内容得知,每条新闻是按行存放的,所以使用python的读取行的函数就可以分离出每条新闻lable = line.split('\t')[0]lables.append(lable)content = line.split('\t')[1]contents.append(content)# 将文本内容只保留汉字部分,去除标点符号以及空格content = re.sub(r'\d', "", content)content = re.sub(r'\s', "", content)content = re.sub(pattern='[,,\-<>'《》・|~()>&\*-+"%{}=-、。.—!!??"::;;\/\.【】()\']', repl='', string=content)strs = strs + content# print(content)words.extend(list(content))

3、然后是统计所有汉字的出现次数,并按照从高到低的顺序排序,这里我使用到了两种方法,分别使用字典的方式以及字符串自带的内置函数完成每个词出现的次数。字典方式的实现是遍历之前获得的关于语句中每个词的列表,创建一个字典,键是汉字,值是对应出现的次数,然后当前遍历的字如果出现在字典中就修改当前键对应的值,如果没出现在字典中就要将其放到字典中。使用字符串的方式时使用到的函数是count函数,这个可以直接统计字符串中某一个汉字出现的次数。然后将统计好的次数按降序排列,使用到的函数为sorted函数,然后在参数选择的时候将reverse设置为True,然后就可以实现按降序排列了。

# 统计每一个汉字的出现次数,使用字典的形式进行统计
result = {}
for word in words:res = result.get(word, 0)if res == 0:result[word] = 1else:result[word] = result[word] + 1result = sorted(result.items(),  key=lambda kv:(kv[1], kv[0]), reverse=True)
result = dict(result)
print("使用字典的形式进行统计的词数结果:")
new_a = {}
for i, (k, v) in enumerate(result.items()):new_a[k] = vif i == 9:print(new_a)break
new_a.clear()
# 统计每一个汉字的出现次数,使用字符串的内置函数
# print(strs)
result2 = []
# print('使用字符串的内置函数统计的所有的汉字数为:', end="  ")
# print(len(strs))
for w in set(strs):num = strs.count(w)tem = [w, num]result2.append(tem)
result2 = sorted(result2, key=lambda x:x[1], reverse=True)

4、然后统计所有字频,也就是使用每个单词出现的频数除以所有汉字出现的频数可以得到每个汉字出现的字频,这里我也用了两张方法,一种使用的是上一问得到的排序好的汉字,得到一个N行2列的二维列表,每一行的第一列是汉字,第二列是这个汉字出现的次数,然后对这个二维列表进行操作,让第二列除以所有汉字出现的次数,就可以得到每个汉字出现的频率了。第二种方式是使用之前得到的字典,对字典的值进行修改,让每一个字典项的值除以所有汉字的次数即可。

# 统计词频,使用上一步得到二维列表
fre = []
for item in result2:item[1] = item[1] / len(words)fre.append(item)
print('使用二维列表得到的字频结果:')
print(fre[:10])

5、然后统计每个汉字的累计频率,也就是使用每个单词出现的频率加上之前的汉字的频率可以得到每个汉字出现的累计频率,这里我也用了两张方法,一种使用的是上一问得到的排序好的汉字的字频列表,这是一个N行2列的二维列表,每一行的第一列是汉字,第二列是这个汉字出现的频率,然后对这个二维列表进行操作,让第二列加上之前汉字的频率,就可以得到每个汉字出现的累计频率了。第二种方式是使用之前得到的字典,对字典的值进行修改,让每一个字典项的值加上之前汉字的频率即可。

# 统计词频累计,使用上一问得到二维列表
cum = []
sum = 0
for item in fre:sum = sum + item[1]item[1] = sumcum.append(item)
print('使用二维列表得到的累计字频结果:')
print(cum[:10])

结果展示

首先是新闻类别的截图

在这里插入图片描述

截取处理之后的汉字截图
在这里插入图片描述

对字数统计的截图

在这里插入图片描述

对字频统计的截图:

在这里插入图片描述

对词频累计统计的截图

在这里插入图片描述


词频统计

处理步骤与思路:

1、这个实验所用到的数据是按行保存的数据,所以可以使用python中的readline函数进行读取文件,这样得到的每一行数据就是对应的一条新闻,这些新闻又是以制表符/t来分割的,所以制表符前面的内容当作标题,制表符后面的符号当做内容,将这两部分内容放到列表中,所以这里使用到python的split函数进行分割得到对应新闻的标签和内容,最后得到的新闻的种类为3种,分别为科技, 财经和体育类的新闻,所涉及到共计新闻的总数为300条,这里使用列表的形式进行保存

file = open(file='data.txt', mode='r', encoding='utf-8')
lines = file.readlines()
lables = []                         # 保存每条新闻的标签
contents = []                       # 保存每条新闻的内容
for line in lines:                  # 分析文本内容得知,每条新闻是按行存放的,所以使用python的读取行的函数就可以分离出每条新闻lable = line.split('\t')[0]lables.append(lable)content = line.split('\t')[1]contents.append(content)

2使用jieba分词,jieba有三种不同的分词模式:精确模式、全模式和搜索引擎模式,精确模式是最常用的分词方法,全模式会将句子中所有可能的词都列举出来,搜索引擎模式则适用于搜索引擎使用。在这里不对新闻的内容进行处理直接进行分词,然后对分完之后的词也不做任何的处理得到的单词的列表是单纯进行分词之后的结果,这里的结果包含很多的没有用的信息,包括一些字符和一些空格或者是没有实际意义的词,这里得到的单词数为161724

words = []
for sentence in contents:# 使用jieba进行分词,使用精确模式devision_words = jieba.cut(sentence, cut_all=False)     # 将分词后的结果转化为列表,然后添加到分词列表中                            words.extend(list(devision_words))                                                  

3、然后根据上一问得到的单词列表进行相应的处理,这里使用的是停用词表进行判断,如果分词之后得到的单词列表的单词在停用词表中,那么就会将这个单词进行去除,另外我还加了一些处理,将一些数字、字母和空格的字符进行了去除,如果是这种单词那么也将不会添加到最终的单词列表中,最后经过停用词表进行相应的过滤之后得到的单词的数目为76650

stop_path = r"stopwords.txt"           # 停用词表的位置
stop_list = []
no_stop_words = []
for line in open(stop_path, 'r', encoding='utf-8').readlines():stop_list.append(line.strip())for word in words:                                                          # 使用分词后的结果然后用空格进行分割,得到每个分词if word not in stop_list:                                               # 如果这个分词不在停用词表中并且不是换行或者制表符就将其加入到最后的字符串中,然后加一个空格word = re.sub(r'\d', "", word)                                     # 去除单词中的数字word = re.sub(r'\s', "", word)                                     # 去除单词中的空格word = re.sub(r'\W', "", word)                                     # 去除单词中的字母if word:no_stop_words.append(word)

4、然后是统计所有单词的出现次数,并按照从高到低的顺序排序,这里我使用到了两种方法,分别使用字典的方式以及列表自带的内置函数完成每个单词出现的次数。字典方式的实现是遍历之前获得的关于语句中每个词的列表,创建一个字典,键是单词,值是对应出现的次数,然后当前遍历的单词如果出现在字典中就修改当前键对应的值,如果没出现在字典中就要将其放到字典中。使用列表的方式时使用到的函数是count函数,这个可以直接统计列表中某一个单词出现的次数。然后将统计好的次数按降序排列,使用到的函数为sorted函数,然后在参数选择的时候将reverse设置为True,然后就可以实现按降序排列了。

# 统计每一个单词的出现次数,使用字典的形式进行统计
result = {}
for word in no_stop_words:res = result.get(word, 0)if res == 0:result[word] = 1else:result[word] = result[word] + 1result = sorted(result.items(),  key=lambda kv:(kv[1], kv[0]), reverse=True)
result = dict(result)
print("使用字典的形式进行统计的词数结果:")
new_a = {}
for i, (k, v) in enumerate(result.items()):new_a[k] = vif i == 9:print(new_a)break
new_a.clear()

5、然后统计所有单词出现的频率,也就是使用每个单词出现的频数除以所有单词出现的频数可以得到每个单词出现的词频,这里我也用了两张方法,一种使用的是上一问得到的排序好的单词,得到一个N行2列的二维列表,每一行的第一列是单词,第二列是这个单词出现的次数,然后对这个二维列表进行操作,让第二列除以所有单词出现的次数,就可以得到每个单词出现的频率了。第二种方式是使用之前得到的字典,对字典的值进行修改,让每一个字典项的值除以所有单词的次数即可。

# 统计词频,使用上一问得到的字典
cum2 = {}
sum = 0
new_a.clear()
for i, (k, v) in enumerate(fre2.items()):sum = sum + vnew_a[k] = sum
cum2 = new_a.copy()

6、然后统计每个单词的累计频率,也就是使用每个单词出现的频率加上之前的单词的频率可以得到每个单词出现的累计频率,这里我也用了两张方法,一种使用的是上一问得到的排序好的单词的字频列表,这是一个N行2列的二维列表,每一行的第一列是单词,第二列是这个单词出现的频率,然后对这个二维列表进行操作,让第二列加上之前单词的频率,就可以得到每个单词出现的累计频率了。第二种方式是使用之前得到的字典,对字典的值进行修改,让每一个字典项的值加上之前单词的频率即可。

# 使用字典得到的累计词频结果:
for i, (k, v) in enumerate(cum2.items()):new_a[k] = vif i == 9:print(new_a)break

结果展示

这里是统计的新闻的结果,共涉及3类新闻,共计300条。
然后显示分词之后在没有进行停用词的过滤前后的对比结果

在这里插入图片描述

然后进行词数统计的结果

在这里插入图片描述

进行词频统计的结果

在这里插入图片描述

进行词频累计统计的结果

在这里插入图片描述


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/45967.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Imagenet VGG-19图片识别实例展示

资源&#xff1a; 1.相关的vgg模型下载网址 http://www.vlfeat.org/matconvnet/models/beta16/imagenet-vgg-verydeep-19.mat 2.ImageNet 1000种分类以及排列 https://github.com/sh1r0/caffe-Android-demo/blob/master/app/src/main/assets/synset_words.txt&#xff08;如果…

外滩画报:揭秘全球电子垃圾坟墓

在西方发达国家&#xff0c;有这样一个不为人知的秘密&#xff1a;当你把电子垃圾送给回收商而不是扔进垃圾箱里后&#xff0c;很快&#xff0c;大约 80% 的电子垃圾就会被装上集装箱船&#xff0c;运往尼日利亚、印度、巴基斯坦和中国那些常年被毒烟笼罩的垃圾场。师从人道主义…

《荒野猎人》影评

如果没有小李子和奥斯卡数十年相爱相杀赚足眼球这件事&#xff0c;《荒野猎人》最大的看点应该是导演亚利桑德罗冈萨雷斯伊纳里图和摄影师艾曼努尔卢贝兹基的再度合作。 伊纳里图的电影履历如晴朗夏夜的星空一般漂亮璀璨&#xff0c;执导座《爱情是狗娘》一举拿下2000年东京国际…

印度之行(一) 印度是个很大的国家

&#xff08;baidu真渣。。。&#xff09; 首先&#xff0c;我们弄清了&#xff0c;老王吃了一个月咖喱的地方&#xff0c;下面是老王的咖喱味思考&#xff1a; 在印度浦内市&#xff08;又译浦那市&#xff09;待了5周&#xff0c;基本是在公司的浦内office做项目&#xff0c;…

HTML标签

HTML标签友情链接 如果在 HTML 中需要文字或者图片垂直居中时&#xff0c;可以使用 align "center"&#xff0c;可以对文字或着图片进行垂直居中&#xff01; 这是一个很好的例子&#xff1a; <!doctype html> <html lang"en"> <head&…

苏州免费景点

文章目录 苏州免费景点姑苏区相门古城墙平江历史街区曲园畅园七里山塘朴园五峰园拥翠山庄天香小筑明轩实样北寺塔定慧寺城隍庙神仙庙苏州博物馆忠王府苏州民俗博物馆中国昆曲博物馆苏州公园桂花公园桐泾公园 吴中区沐春园(原园博会苏州园)瑞园道勤小筑乡畦小筑石湖风景区灵岩山…

又一个程序员被判刑了!运维违规操作被判5年半,IT从业需要懂法律!

点击上方 "程序员小乐"关注, 星标或置顶一起成长 每天凌晨00点00分, 第一时间与你相约 每日英文 Sleeping is nice. You forget about everything for a little while. 还是睡觉好&#xff0c;能暂时忘掉一切烦恼。 每日掏心话 人生如梦&#xff0c;岁月匆匆&#x…

又背锅了,一个“锁表” 损失 800万,程序员被判5年半

图片来自 Pexels 出处&#xff1a;云头条&#xff0c;知乎综合整理, 51CTO 链接&#xff1a;https://www.zhihu.com/question/389167387/answer/1170852426 近日&#xff0c;云头条发布的“一个违规操作、损失 800 万、被判五年半&#xff1a;运维夏某某致郑大一附院智慧医院系…

一个“锁表”损失800万,运维被判5年半

“ 近日&#xff0c;云头条发布的“一个违规操作、损失 800 万、被判五年半&#xff1a;运维夏某某致郑大一附院智慧医院系统瘫痪 2 个小时&#xff0c;判破坏计算机信息系统罪”一文引发了技术圈的热议。 图片来自 Pexels 事件经过 夏某某任职北京中科某某科技有限公司&#x…

大运河的一些总结

京杭大运河&#xff0c;是一条承载着历史&#xff0c;流淌着过去和未来的河流&#xff0c;是我非常喜欢的一条人工河&#xff0c;但一直以来不太清楚其具体分段和水流流向&#xff0c;近期通过了解南水北调东线工程&#xff0c;并经过查阅资料终于弄清楚了京杭大运河的各个河段…

科技周刊第六期:接近本质的东西才会长远

这里记录每周值得分享的东西&#xff0c;每周五发布。 封面图 中国西南西藏自治区山南市扎南县的雅鲁藏布江&#xff08;出处&#xff09; 本周话题&#xff1a;接近本质的东西才会长远 我想说三个现象&#xff1a; 1、为什么很多明星能够一直红下去&#xff1f;而有的明星只…

python调用mysql并在前台做数据展示

今天是学习python的第二天。 根据自己的需要&#xff0c;将前段时间的扇形图稍微升华一下&#xff0c;从而可以从mysql数据库中查询数据&#xff0c;并作图形的展示。 以下为图形展示&#xff1a; #导入库--注意本段代码不适用于python2 import pymysql import matplotlib.py…

中国农民丰收节交易会暨“日照有礼”功能性特色产品展示

中国农民丰收节交易会暨“日照有礼”功能性特色产品展示 齐鲁网闪电新闻讯 新闻中国采编网 中国新闻采编网 谋定研究中国智库网 经信研究 国研智库 国情讲坛 万赢信采编&#xff1a;为庆祝农民丰收节&#xff0c;进一步推动日照乡村振兴建设步伐&#xff0c;倡导功能性农业农业…

C++ STL的简单运用——学习记录

本周学了一下STL&#xff0c;学的内容有string&#xff0c;stack&#xff0c;queue&#xff0c;vector&#xff0c;priority queue&#xff0c;map&#xff0c;set与其简单应用&#xff0c; 速度比较快&#xff0c;&#xff0c;还好学之前我预习了一些&#xff0c;&#xff0c;…

ArcGIS水文分析实战教程(12)河网分级流程

ArcGIS水文分析实战教程(12)河网分级流程 本章导读&#xff1a;如果说河流提取是面对没有数据后者数据匮乏的用户&#xff0c;那么河网分级就完全属于为水文研究而生的一个工具。河流具有干流和支流之分&#xff0c;河网分级能够将这些干支关系理顺&#xff0c;并从中找到其水文…

[论文总结] 深度学习在农业领域应用论文笔记2

文章目录 1. A comparative study of fruit detection and counting methods for yield mapping in apple orchards &#xff08;IF3.581, 2019&#xff09;1.1 介绍1.2 实验与结果1.3 定性结果1.4 失败案例1.4.1 检测1.4.2 计数 1.5 结论与未来工作 2.Wheat crop yield predic…

Java 反射慢?它到底慢在哪?

往期热门文章&#xff1a; 1、GitHub 被超火的 ChatGPT 霸榜&#xff01; 2、Java使用 try catch会影响性能&#xff1f; 3、原来count(*)是接口性能差的真凶&#xff01; 4、大公司病了&#xff0c;这也太形象了吧&#xff01;&#xff01;&#xff01; 5、全球最大资源站创始…

运营人必懂 | TikTok运营指南

“TikTok之前确实很火&#xff0c;现在呢&#xff1f;” 最新数据告诉你&#xff1a; Sensor Tower商店情报数据显示&#xff0c;2022年9月抖音及海外版TikTok在全球App Store和Google Play吸金超过3.15亿美元&#xff0c;是去年同期的1.7倍&#xff0c;蝉联全球移动应用&…

抖音号运营爆量爆单技巧

泛知识付费2.0时代&#xff0c;短视频、直播间成为了知识传播的重要阵地&#xff0c;只要有技能干货&#xff0c;不论是行业大咖&#xff0c;还是精通某领域的普通人&#xff0c;都有机会成为大众的“老师”&#xff0c;依靠输出视频、音频等内容课程来知识变现。而抖音生态&am…

抖音直播运营分析必备工具!千川投放提高付费流量转化ROI

千川正式上线后的几个月&#xff0c;由于操作更简单越来越多的商家已经通过千川把新号快速的跑起来了&#xff0c;不少新号已经实现高投产比。但还有很多新手商家&#xff0c;遇到新号起号难&#xff0c;千川投放没产出等问题&#xff0c;最近讨论比较多的主要有&#xff1a; …