python-分享篇-用Python分析文本数据的词频

news2024/9/9 1:17:59

上次批量提取了上市公司主要业务信息,要分析这些文本数据,就需要做文本词频分析。由于中文不同于英文,词是由一个一个汉字组成的,而英文的词与词之间本身就有空格,所以中文的分词需要单独的库才能够实现,常用的是jieba。若没安装,直接运行cmd,然后输入pip install jieba安装即可。然后导入jieba库。我们以“华特气体”公司的主要业务进行分词,分词前如下图所示。通过open打开华特气体文本文件,使用读模式r,为避免编码错误,指定编码类型为utf-8。读取出来是一个大字符串,将这个大字符串存入txt。然后调用jieba进行分词。lcut的意思是切分词后再转换成列表("l"即表示list的首字母)。将切分后的词存入列表words
在这里插入图片描述

import jieba
txt = open("华特气体.txt", "r", encoding="utf-8").read()
words = jieba.lcut(txt)
words
['主要',
 '业务',
 '\\',
 '华特',
 '气体',
 ':',
 '2019',
 '年',
 '年度报告',
 '(',
 '修订版',
 ')',
 '\n',
 '一',
 '、',
 ' ',
 '报告',
 '期内',
 '公司',
 '所',
 '从事',
 '的',
 '主要',
 '业务',
 '、',
...
 '采购',
 '合作',
 '关系',
 '。',
 ...]
Output is truncated. View as a scrollable element or open in a text editor. Adjust cell output settings...
[('气体', 151),
 ('公司', 76),
 ('特种', 52),
 ('行业', 42),
 ('产品', 42),
 ('高纯', 42),
 ('生产', 41),
 ('000', 35),
 ('客户', 34),
 ('发展', 34),
 ('研发', 31),
 ('产业', 30),
 ('技术', 30),
 ('主要', 29),
 ('实验', 24)]
[('气体', 151),
 ('特种', 52),
 ('产品', 42),
 ('高纯', 42),
 ('生产', 41),
 ('客户', 34),
 ('发展', 34),
 ('研发', 31),
 ('产业', 30),
 ('技术', 30),
 ('主要', 29),
 ('实验', 24),
 ('国内', 23),
 ('2019', 22),
 ('模式', 22)]
词	次数
0	气体	151
1	特种	52
2	产品	42
3	高纯	42
4	生产	41
5	客户	34
6	发展	34
7	研发	31
8	产业	30
9	技术	30
['主要业务\\东旭蓝天:2019年年度报告.txt',
 '主要业务\\保利地产:2018年年度报告.txt',
 '主要业务\\共达电声:2019年年度报告(更新后).txt',
 '主要业务\\华特气体:2019年年度报告(修订版).txt',
 '主要业务\\吉峰科技:2019年年度报告(更新后).txt',
 '主要业务\\引力传媒:2019年年度报告(修订版).txt',
 '主要业务\\方正科技:2019年年度报告.txt',
 '主要业务\\湖北宜化:2019年年度报告(更新后).txt',
 '主要业务\\联创股份:2019年年度报告(更新后).txt',
 '主要业务\\高乐股份:2019年年度报告.txt']

结果如上,可见基本是按照我们的汉字使用习惯来区分词的,不能组成词的字则是按单独一个字符串存放的。然后我们就需要将词和对应出现的次数统计出来。先新建一个字典wordsDict用于储存词及其出现的次数。对于单个的字或字符不是我们想要的,所以加了一个if语句将其排除在外。continue的作用是,if后面的条件满足时,让程序回到for循环,而不执行continue下面的语句。也就是列表中的元素只有一个字符的时候,就马上跳到下一个而不执行任何操作。只有当元素不止一个字符的时候,才执行else语句,即将词及其出现的次数加入字典。此处用setdefault给词的出现初始值设置为0,每重复出现一次,自动加1。然后我们根据此出现的次数,降序排序,并查看前20个词的情况。

wordsDict = {} #新建字典用于储存词及词频
for word in words:
    if len(word) == 1: #单个的字符不作为词放入字典
        continue
    else:
        wordsDict.setdefault(word, 0) #设置词的初始出现次数为0
        wordsDict[word] +=1 #对于重复出现的词,每出现一次,次数增加1
        
wordsDict_seq = sorted(wordsDict.items(),key=lambda x:x[1], reverse=True) #按字典的值降序排序
wordsDict_seq[:15] 
['主要',
 '业务',
 '\\',
 '华特',
 '气体',
 ':',
 '2019',
 '年',
 '年度报告',
 '(',
 '修订版',
 ')',
 '\n',
 '一',
 '、',
 ' ',
 '报告',
 '期内',
 '公司',
 '所',
 '从事',
 '的',
 '主要',
 '业务',
 '、',
...
 '采购',
 '合作',
 '关系',
 '。',
 ...]
Output is truncated. View as a scrollable element or open in a text editor. Adjust cell output settings...
[('气体', 151),
 ('公司', 76),
 ('特种', 52),
 ('行业', 42),
 ('产品', 42),
 ('高纯', 42),
 ('生产', 41),
 ('000', 35),
 ('客户', 34),
 ('发展', 34),
 ('研发', 31),
 ('产业', 30),
 ('技术', 30),
 ('主要', 29),
 ('实验', 24)]
[('气体', 151),
 ('特种', 52),
 ('产品', 42),
 ('高纯', 42),
 ('生产', 41),
 ('客户', 34),
 ('发展', 34),
 ('研发', 31),
 ('产业', 30),
 ('技术', 30),
 ('主要', 29),
 ('实验', 24),
 ('国内', 23),
 ('2019', 22),
 ('模式', 22)]
词	次数
0	气体	151
1	特种	52
2	产品	42
3	高纯	42
4	生产	41
5	客户	34
6	发展	34
7	研发	31
8	产业	30
9	技术	30
['主要业务\\东旭蓝天:2019年年度报告.txt',
 '主要业务\\保利地产:2018年年度报告.txt',
 '主要业务\\共达电声:2019年年度报告(更新后).txt',
 '主要业务\\华特气体:2019年年度报告(修订版).txt',
 '主要业务\\吉峰科技:2019年年度报告(更新后).txt',
 '主要业务\\引力传媒:2019年年度报告(修订版).txt',
 '主要业务\\方正科技:2019年年度报告.txt',
 '主要业务\\湖北宜化:2019年年度报告(更新后).txt',
 '主要业务\\联创股份:2019年年度报告(更新后).txt',
 '主要业务\\高乐股份:2019年年度报告.txt']

可以看到,有些词并不是我们想要的,比如“公司”、“行业”、“000”。因此需要把这些意义不大的词删除。先定义一个储存要排除的词的列表stopWords,将想排除的词放进去,一般是放出现次数较多,但意义不大的词,可根据实际需要调整。然后遍历这个字典,在检查这些词是否在目标字典wordsDict中,如果在,就将字典中这个词对应的数据删除。

stopWords = ["公司","行业","000","用于","情况","方面","一种","要求","对于","进行","一般","212","实现","处理","通过","投入","随着"]
for word in stopWords:
    if word in wordsDict:
        del wordsDict[word] #删除对应的词
        
wordsDict_seq = sorted(wordsDict.items(),key=lambda x:x[1], reverse=True) #按字典的值降序排序
wordsDict_seq[:15] 
['主要',
 '业务',
 '\\',
 '华特',
 '气体',
 ':',
 '2019',
 '年',
 '年度报告',
 '(',
 '修订版',
 ')',
 '\n',
 '一',
 '、',
 ' ',
 '报告',
 '期内',
 '公司',
 '所',
 '从事',
 '的',
 '主要',
 '业务',
 '、',
...
 '采购',
 '合作',
 '关系',
 '。',
 ...]
Output is truncated. View as a scrollable element or open in a text editor. Adjust cell output settings...
[('气体', 151),
 ('公司', 76),
 ('特种', 52),
 ('行业', 42),
 ('产品', 42),
 ('高纯', 42),
 ('生产', 41),
 ('000', 35),
 ('客户', 34),
 ('发展', 34),
 ('研发', 31),
 ('产业', 30),
 ('技术', 30),
 ('主要', 29),
 ('实验', 24)]
[('气体', 151),
 ('特种', 52),
 ('产品', 42),
 ('高纯', 42),
 ('生产', 41),
 ('客户', 34),
 ('发展', 34),
 ('研发', 31),
 ('产业', 30),
 ('技术', 30),
 ('主要', 29),
 ('实验', 24),
 ('国内', 23),
 ('2019', 22),
 ('模式', 22)]
词	次数
0	气体	151
1	特种	52
2	产品	42
3	高纯	42
4	生产	41
5	客户	34
6	发展	34
7	研发	31
8	产业	30
9	技术	30
['主要业务\\东旭蓝天:2019年年度报告.txt',
 '主要业务\\保利地产:2018年年度报告.txt',
 '主要业务\\共达电声:2019年年度报告(更新后).txt',
 '主要业务\\华特气体:2019年年度报告(修订版).txt',
 '主要业务\\吉峰科技:2019年年度报告(更新后).txt',
 '主要业务\\引力传媒:2019年年度报告(修订版).txt',
 '主要业务\\方正科技:2019年年度报告.txt',
 '主要业务\\湖北宜化:2019年年度报告(更新后).txt',
 '主要业务\\联创股份:2019年年度报告(更新后).txt',
 '主要业务\\高乐股份:2019年年度报告.txt']

然后将筛选后的数据转换成DataFrame,并增加列名“词”和“次数”,然后导出为Excel文件。

df = pd.DataFrame(wordsDict_seq,columns=['词','次数'])
df.to_excel("华特气体-词频.xlsx",index = False) #存为Excel时去掉index索引列
df.head(10)

以上,搞定了一个文件的词频收集,那批量操作呢?请看下面分解。

import os
path='主要业务'  #文件所在文件夹
files = [path+"\\"+i for i in os.listdir(path)] #获取文件夹下的文件名,并拼接完整路径
files
['主要',
 '业务',
 '\\',
 '华特',
 '气体',
 ':',
 '2019',
 '年',
 '年度报告',
 '(',
 '修订版',
 ')',
 '\n',
 '一',
 '、',
 ' ',
 '报告',
 '期内',
 '公司',
 '所',
 '从事',
 '的',
 '主要',
 '业务',
 '、',
...
 '采购',
 '合作',
 '关系',
 '。',
 ...]
Output is truncated. View as a scrollable element or open in a text editor. Adjust cell output settings...
[('气体', 151),
 ('公司', 76),
 ('特种', 52),
 ('行业', 42),
 ('产品', 42),
 ('高纯', 42),
 ('生产', 41),
 ('000', 35),
 ('客户', 34),
 ('发展', 34),
 ('研发', 31),
 ('产业', 30),
 ('技术', 30),
 ('主要', 29),
 ('实验', 24)]
[('气体', 151),
 ('特种', 52),
 ('产品', 42),
 ('高纯', 42),
 ('生产', 41),
 ('客户', 34),
 ('发展', 34),
 ('研发', 31),
 ('产业', 30),
 ('技术', 30),
 ('主要', 29),
 ('实验', 24),
 ('国内', 23),
 ('2019', 22),
 ('模式', 22)]
词	次数
0	气体	151
1	特种	52
2	产品	42
3	高纯	42
4	生产	41
5	客户	34
6	发展	34
7	研发	31
8	产业	30
9	技术	30
['主要业务\\东旭蓝天:2019年年度报告.txt',
 '主要业务\\保利地产:2018年年度报告.txt',
 '主要业务\\共达电声:2019年年度报告(更新后).txt',
 '主要业务\\华特气体:2019年年度报告(修订版).txt',
 '主要业务\\吉峰科技:2019年年度报告(更新后).txt',
 '主要业务\\引力传媒:2019年年度报告(修订版).txt',
 '主要业务\\方正科技:2019年年度报告.txt',
 '主要业务\\湖北宜化:2019年年度报告(更新后).txt',
 '主要业务\\联创股份:2019年年度报告(更新后).txt',
 '主要业务\\高乐股份:2019年年度报告.txt']

以上,先获取到所有待分析文件的路径。然后逐个进行分析。稍微修改一下上面的程序,很快分析完成。结果如下。
在这里插入图片描述

import jieba
import pandas as pd

for file in files:

    txt = open(file, "r", encoding="utf-8").read()
    words = jieba.lcut(txt)
    wordsDict = {} #新建字典用于储存词及词频
    for word in words:
        if len(word) == 1: #单个的字符不作为词放入字典
            continue
        else:
            wordsDict.setdefault(word, 0) #设置词的初始出现次数为0
            wordsDict[word] +=1 #对于重复出现的词,每出现一次,次数增加1

    stopWords = ["2019","不断","持续","主要","企业","产品","业务","公司","行业","000","用于","情况","方面","一种","要求","对于","进行","一般","212","实现","处理","通过","投入","随着"]
    for word in stopWords:
        if word in wordsDict:
            del wordsDict[word] #删除对应的词

    wordsDict_seq = sorted(wordsDict.items(),key=lambda x:x[1], reverse=True) #按字典的值降序排序

    df = pd.DataFrame(wordsDict_seq,columns=['词','次数'])
    df.to_excel("词频//{}.xlsx".format(file.split("\\")[1][:-4]),index = False) #存为Excel时去掉index索引列

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

2024年必备技能:小红书笔记评论自动采集,零基础也能学会的方法

摘要: 面对信息爆炸的2024年,小红书作为热门社交平台,其笔记评论成为市场洞察的金矿。本文将手把手教你,即便编程零基础,也能轻松学会利用Python自动化采集小红书笔记评论,解锁营销新策略,提升…

pmp学习交流组队~

首先,来看看什么是PMP PMP指的是项目管理专业人士资格认证。它是由美国项目管理协会(Project Management Institute(PMI)发起的,严格评估项目管理人员知识技能是否具有高品质的资格认证考试。 pmp备考攻略本人推荐的参考资料比较多&#xff0…

MySQL 9 安装第1辑-版本选择和安装包获取

一、MySQL 9 版本选择 在准备安装MySQL时,选择合适的版本和分发格式至关重要。首先,需要决定是安装长期支持(LTS)系列版本还是创新系列版本。长期支持版本(如MySQL 8.x LTS)专注于稳定性、性能优化和安全性…

RocketMQ知识总结(基本原理)

文章收录在网站:http://hardyfish.top/ 文章收录在网站:http://hardyfish.top/ 文章收录在网站:http://hardyfish.top/ 文章收录在网站:http://hardyfish.top/ 基本原理 总体架构图 零拷贝 零拷贝技术是一个思想,指…

蓝屏事件一些想法

影响全球的蓝屏事件 2024年7月19日发生了大量windows操作系统电脑蓝屏的事情,造成了全球级别的影响。其中国外的影响最大,甚至像医院、银行、航班等与人民生活密切相关的行业都受到了本次影响。导致全球数千架次航班被取消,数万架次航班延误…

Java | Leetcode Java题解之第303题区域和检索-数组不可变

题目&#xff1a; 题解&#xff1a; class NumArray {int[] sums;public NumArray(int[] nums) {int n nums.length;sums new int[n 1];for (int i 0; i < n; i) {sums[i 1] sums[i] nums[i];}}public int sumRange(int i, int j) {return sums[j 1] - sums[i];} }…

【Web开发手礼】探索Web开发的秘密(十三)-Vue(3)好友列表、登录

前言 主要介绍了好友列表、登录界面所涉及的vue知识点&#xff01;&#xff01;&#xff01; 好友列表 从云端API读取数据信息 地址 https://app165.acapp.acwing.com.cn/myspace/userlist/方法&#xff1a;GET是否验证jwt&#xff1a;否输入参数&#xff1a;无返回结果&…

C++自定义接口类设计器

关键代码 #include "mainwindow.h" #include "ui_mainwindow.h" #include <QStringListModel>MainWindow::MainWindow(QWidget *parent): QMainWindow(parent), ui(new Ui::MainWindow) {ui->setupUi(this);// C基础数据类型列表QStringList typ…

求.netcore 按模板导出pdf免费插件,来谈谈。

&#x1f3c6;本文收录于《CSDN问答解惑-专业版》专栏&#xff0c;主要记录项目实战过程中的Bug之前因后果及提供真实有效的解决方案&#xff0c;希望能够助你一臂之力&#xff0c;帮你早日登顶实现财富自由&#x1f680;&#xff1b;同时&#xff0c;欢迎大家关注&&收…

图书管理系统设计

设计一个图书管理系统时&#xff0c;我们需要考虑系统的基本功能、用户需求、技术选型以及数据的安全性和完整性。下面是一个基本的图书管理系统的设计概览&#xff1a; 1. 系统目标 管理图书信息&#xff1a;添加、删除、修改图书信息。借阅管理&#xff1a;处理借书、还书流…

低代码应用版本管理能力探讨

低代码平台为开发者提供易用的可视化、定制化开发能力&#xff0c;无需编写原生代码或者只有少量代码编写就能实现需求&#xff0c;从而带来开发门槛的降低&#xff0c;开发效率的提升。低代码作为提升应用研发生产力的关键型技术&#xff0c;成为企业数字化转型的助推器。 低代…

StarRock3.3 安装部署(存算分离、存算一体保姆式教程)

服务器前置要求&#xff1a; 1、内存>32GB 2、JDK 8 is not supported, please use JDK 11 or 17 1、安装 wget https://releases.starrocks.io/starrocks/StarRocks-3.3.0.tar.gz tar zxvf StarRocks-3.3.0.tar.gz 2、FE服务启动 2.1 配置FE节点(默认配置&#xff0c;…

C#知识|文件与目录操作:文本读写操作

哈喽,你好啊,我是雷工! 今天学习文件与目录的操作,以下为文本读写操作的学习笔记。 01 文件操作说明 1.1、数据的存取方式 数据库:适合存取大量且关系复杂并有序的数据; 文件:适合存取大量但数据关系简单的数据,像系统的日志文件; 1.2、文件存取的优点 ①:读取操…

根据ip地址能查询出具体地址吗?

在数字化时代&#xff0c;互联网已成为我们日常生活不可或缺的一部分&#xff0c;而IP地址作为网络世界的“身份证”&#xff0c;承载着每一台设备在网络中的唯一标识。你是否曾经好奇&#xff0c;通过一串看似无意义的数字组合——IP地址&#xff0c;我们究竟能否揭开其背后的…

springboot校园失物招领系统-计算机毕业设计源码17082

目 录 摘要 1 绪论 1.1 研究背景 1.2 研究意义 1.3论文结构与章节安排 2 相关技术介绍 2.1 B/S结构 2.2 Spring Boot框架 2.3 MySQL数据库 3系统分析 3.1 可行性分析 3.2 系统流程分析 3.2.1 数据新增流程 3.2.2 数据删除流程 3.3 系统功能分析 3.3.1 功能性分…

解决亚马逊测评困境:买家号支付失败与砍单率高的应对策略

在销售旺季期间&#xff0c;众多商家倾向于采用自建买家账号进行产品评价&#xff0c;以期快速提升产品权重。然而&#xff0c;不少商家在此过程中遭遇了订单无法成功提交或遭遇高比例订单取消的困境。部分商家首先怀疑的是支付卡的问题&#xff0c;也有部分认为IP地址可能已被…

拥抱人工智能浪潮,95后如何为未来职场做好准备?

随着毕业季的落幕&#xff0c;新一代青年力量步入社会&#xff0c;他们面临的是一个正在被人工智能深刻改变的劳动力市场。特别是对于“95后”这一群体&#xff0c;如何在即将席卷而来的人工智能革命中站稳脚跟&#xff0c;甚至乘风破浪&#xff0c;成为摆在他们面前的重要课题…

在 Kali Linux 虚拟机中实现主机代理共享的详细指南

Kali Linux 是网络安全和渗透测试领域中广泛使用的操作系统。它提供了丰富的工具和灵活的环境&#xff0c;适合各种网络安全任务。在某些情况下&#xff0c;您可能需要通过主机的代理服务器来实现特定的网络配置&#xff0c;以便更好地保护隐私或进行网络测试。这篇文章将详细介…

昇思25天学习打卡营第18天|xiaoyushao

今天分享基于MobileNetv2的垃圾分类。读取本地图像数据作为输入&#xff0c;对图像中的垃圾物体进行检测&#xff0c;并且将检测结果图片保存到文件中。 目录 一、 MobileNetv2模型原理介绍 二、 数据处理 1. 数据准备 2. 数据加载 3. 数据预处理 三、 MobileNetv2模型搭建 四、…

Redis 7.x 系列【34】Spring Boot 集成

有道无术&#xff0c;术尚可求&#xff0c;有术无道&#xff0c;止于术。 本系列Redis 版本 7.2.5 源码地址&#xff1a;https://gitee.com/pearl-organization/study-redis-demo 文章目录 1. 前言2. Spring Data Redis3. Spring Boot Data Redis Starter3.1 起步依赖3.2 自动…