文本分析-使用Python做词频统计分析

news2024/12/23 17:36:39

🤵‍♂️ 个人主页:@艾派森的个人主页

✍🏻作者简介:Python学习者
🐋 希望大家多多支持,我们一起进步!😄
如果文章对你有帮助的话,
欢迎评论 💬点赞👍🏻 收藏 📂加关注+


前言

前面我们已经介绍了文本分析中的中文分词和去除停用词,这篇文章将详细介绍分词后如何进行词频统计分析。

词频统计的概念

        词频统计是指在文本或语音数据中,统计每个单词或符号出现的次数,以便对文本或语音数据进行分析和预处理。词频统计是自然语言处理中的一个重要任务,其目的是为后续的文本分析、情感分析、机器翻译等任务做好准备。

        在词频统计中,通常将文本或语音数据转换成单词或符号的形式,然后统计每个单词或符号出现的次数,并将其存储为一个数据集或字典。这些数据集或字典可以用来训练机器学习模型或进行文本分类、情感分析等任务。

        词频统计可以应用于许多领域,例如文本分类、情感分析、机器翻译、信息检索等。在文本分类中,词频统计可以帮助确定最重要的单词或符号,以帮助分类器进行分类。在情感分析中,词频统计可以帮助确定文本中最常见的情感,以便进行分类。在机器翻译中,词频统计可以帮助确定翻译的单词或符号。在信息检索中,词频统计可以帮助确定查询中最重要的单词或符号,以便进行查询匹配。

        总之,词频统计是自然语言处理中的一个重要任务,其目的是为后续的文本分析、情感分析、机器翻译等任务做好准备。

常用的方法和工具:

  1. Python:Python 是一种非常流行的编程语言,有许多库和工具可以用于文本处理和统计,其中最流行的是 NumPy、Pandas 和 SciPy。可以使用这些库中的任何一个来计算文本中词频统计,例如使用 NumPy 中的 str_freq 函数来计算字符串中单词出现的频率。

  2. R:R 是一种统计软件,可以轻松地进行数据可视化和统计分析。可以使用 R 中的 text mining 包来计算文本中词频统计,例如使用 tm 包中的 tf_idf 函数来计算文本的分词和词频统计。

  3. Java:Java 是一种流行的编程语言,也有许多库和工具可以用于文本处理和统计。可以使用 Java 中的 Apache Commons Text 和 Apache Commons Collections 库来计算文本中词频统计,例如使用 Commons Text 中的 getWords method 来获取文本中的单词。

  4. JavaScript:JavaScript 是一种前端编程语言,也可以用于后端开发。可以使用 JavaScript 中的 Node.js 和 npm 包管理器来运行文本处理和统计任务,例如使用 npm 包中的 text-parser 和 text-count 包来计算文本中词频统计。

Python实现词频统计

 关于python的实现,我给大家介绍两种最常用的方法。

在做词频统计之前,需要要用到前面介绍中文分词封装的函数,然后我这里使用了关于大唐不夜城的一条评论文本作为示范先进行分词。

import re
import jieba

def chinese_word_cut(mytext):
    jieba.load_userdict('自定义词典.txt')  # 这里你可以添加jieba库识别不了的网络新词,避免将一些新词拆开
    jieba.initialize()  # 初始化jieba
    # 文本预处理 :去除一些无用的字符只提取出中文出来
    new_data = re.findall('[\u4e00-\u9fa5]+', mytext, re.S)
    new_data = " ".join(new_data)
    # 文本分词
    seg_list_exact = jieba.lcut(new_data)
    result_list = []
    # 读取停用词库
    with open('停用词库.txt', encoding='utf-8') as f: # 可根据需要打开停用词库,然后加上不想显示的词语
        con = f.readlines()
        stop_words = set()
        for i in con:
            i = i.replace("\n", "")   # 去掉读取每一行数据的\n
            stop_words.add(i)
    # 去除停用词并且去除单字
    for word in seg_list_exact:
        if word not in stop_words and len(word) > 1:
            result_list.append(word)      
    return result_list

comment = '大唐不夜城,不夜城趣味性很高,里面地方特色东西好吃,也有星巴克麦当劳等等选择,有不少场表演,外景夜景一定要薅一个,其它地方很难有这般景象了。娱乐体验了不倒翁,还有十二时辰里面表演更加精彩、内景拍照不错,簋唐楼可以尝试一下沉浸剧本杀……'
comment_cutted = chinese_word_cut(comment)
comment_cutted

方法1:使用Pandas库实现

首先使用pandas将前面分词结果进行转化DataFrame类型

import pandas as pd
df = pd.DataFrame(comment_cutted)
df

 接着使用groupby函数对第0列进行统计,然后降序输出

word_frequency_df = df.groupby(0).size().sort_values(ascending=False)
word_frequency_df

 最后将词频统计的结果保存为文件

# 将词频统计进行保存
word_frequency_df.to_excel('词频统计结果.xlsx') # 保存为excel文件
# word_frequency_df.to_csv('词频统计结果.xlsx')  # 保存为csv文件

方法2:使用collections库

# 方法2-使用collections库
from collections import Counter
Counter(comment_cutted)

使用Counter函数对前面的分词结果进行统计,然后使用most_common输出按词频频次降序排列的结果,如果你只想输出前n个单词,传入数值即可。 默认是全部输出。

word_counts = Counter(comment_cutted)
word_counts.most_common()
# word_counts.most_common(10) # 输出词频最高的前十个单词 

 

 如果想将上面结果保存为文件的话,执行以下代码:

# 将词频统计结果保存为txt文件
word_counts_top = word_counts.most_common()
with open('词频统计结果.txt','w',encoding='utf-8')as f:
    for i in word_counts_top:
        f.write(str(i[0]))
        f.write('\t')
        f.write(str(i[1]))
        f.write('\n')

 

如果我们想将TOP10高频词进行可视化展示,可以执行下面代码:

import matplotlib.pylab as plt
plt.rcParams['font.sans-serif'] = ['SimHei'] #解决中文显示
plt.rcParams['axes.unicode_minus'] = False   #解决符号无法显示

word_counts = Counter(comment_cutted)
word_counts_top = word_counts.most_common()
x = [item[0] for item in word_counts_top[:10]]
y = [item[1] for item in word_counts_top[:10]]
plt.bar(x,y)
plt.title('Top10高频词')
plt.xlabel('词语')
plt.ylabel('频次')
plt.show()

 

案例实战

词频分析只是文本分析的一个环节,我在之前的文章中也用到过,大家可以参考学习:

数据分析实例-获取某宝评论数据做词云图可视化

数据分析案例-文本挖掘与中文文本的统计分析

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

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

相关文章

【JDK】二、环境变量从jdk17切换为jdk8后不生效的解决办法

环境变量从jdk17切换为jdk8后不生效的解决办法 一、问题描述二、环境变量为java17时的截图三、修改为java8时的截图四、解决办法1、原因分析 2、删除jdk17和jdk8默认的配置或者把默认的下移,统一使用自己的%JAVA_HOME%.3、同样我们把JAVA_HOME改成17 重启后&#xf…

面试题:mybatis中# 和 $ 的区别

面试题:mybatis中# 和 $ 的区别 一、主要区别如下: 1、#{}可以理解为预处理,而${}是直接替换。 #传入的参数在SQL中显示为字符串,会对自动传入的数据加上双引号。 $传入的参数在SQL中直接显示为传入的值 2、#{}试用于所有类型…

不要再封装各种Util工具类了,这个神级框架你值得拥有!

一、功能 二、安装 三、简单测试 今天给大家推荐一个非常好用的Java工具类库,企业级常用工具类,基本都有,能避免重复造轮子及节省大量的开发时间,非常不错,值得大家去了解使用。 Hutool 谐音 “糊涂”,…

STM32F4的连接初始化【ST-LINK、USB To TTL】

所需设备:STM32F4、杜邦线(彩色小电线) * 8 、USB 转 TTL 0.认识设备 ST-link USB 转TTL STM32F4主板 1.连线 ST-Link连线 一共需要四根线 序号从左至右,从上至下进行编号 1 - 3.3V 连接 1(黄色)2- GND …

并发编程.

1、概述 1.1 进程和线程 进程:操作系统资源分配的最小单位。 程序由指令和数据组成,指令要执行,数据要读写,就必须将指令加载至cpu,数据加载至内存,在指令运行过程中还需要用到磁盘、网络等设备&#xff0…

python:并发编程(十八)

前言 本文将和大家一起探讨python并发编程的实际运用,会以一些我实际使用的案例,或者一些典型案例来分享。本文使用的案例是我实际使用的案例(下篇),是基于之前效率不高的代码改写成并发编程的。让我们来看看改造的过…

计算逆波兰表达式

⭐作者介绍:大二本科网络工程专业在读,持续学习Java,努力输出优质文章 ⭐作者主页:逐梦苍穹 ⭐所属专栏:数据结构。数据结构专栏主要是在讲解原理的基础上拿Java实现 ⭐码云地址超链接(Gitee):这里存放我学…

如何搭建Nginx网站服务

目录 一、首先搭建Nginx服务 二、授权的访问控制 第一步 安装依赖包 第二步 生成用户密码认证文件 第三步 修改文件属性和权限 第四步 修改配置文件 第五步 用浏览器测试网站 三、基于IP地址进行限制 第一步 修改配置文件 第二步 用两台设备进行访问测试 四、基于域…

工人规范操作识别系统 yolov5

工人规范操作识别系统通过yolov5python网络模型技术,工人规范操作识别系统对工人的操作进行实时监测,当工人规范操作识别系统检测到工人操作不符合规范时,将自动发出警报提示相关人员采取措施。YOLOv5中在训练模型阶段仍然使用了Mosaic数据增…

HCI-1

3.1 定义 就本文档而言,适用以下术语和定义: 嵌入式安全元件主机:在不可移动安全元件中实现的主机 门:主机内部运行的服务的入口点 主机:运行一项或多项服务的逻辑实体 主机控制器:还负责管理主机网络的…

聊聊 分布式系统 中的补偿机制设计问题

一、关于业务补偿机制 1、什么是业务补偿 2、业务补偿设计的实现方式 二、关于回滚 1、显示回滚 2、回滚的实现方式 三、关于重试 1、重试的使用场景 2、重试策略 3、重试时的注意事项 四、业务补偿机制的注意事项 1、ACID 还是 BASE 2、业务补偿设计的注意事项 我们知…

Langchain+本地大语言模型进行数据库操作的实战代码

大家好,我是herosunly。985院校硕士毕业,现担任算法研究员一职,热衷于机器学习算法研究与应用。曾获得阿里云天池比赛第一名,CCF比赛第二名,科大讯飞比赛第三名。拥有多项发明专利。对机器学习和深度学习拥有自己独到的见解。曾经辅导过若干个非计算机专业的学生进入到算法…

Navicat Premium 16执行.sql语句中含有汉字乱码造成view和function创建后无法使用

Navicat Premium 16执行.sql语句中含有汉字乱码造成view和function创建后无法使用 如图,从这里选择sql时没法改sql。所以造成我昨天创建view和function时创建好的前面有感叹号没法用。打开一个fun看里面的汉字是问号。 所以要从这里打开: 1. ultraedit…

EMC学习笔记(十)特殊信号的EMC处理(二)

特殊信号的EMC处理(二) 1.对外接口的EMC设计标准电路1.1 DVI EMC设计标准电路1.2 HDMI接口EMC设计标准电路1.3 LVDS接口EMC设计标准电路1.4 PS2接口EMC设计标准电路1.5 RJ11 EMC设计标准电路1.6 SCART接口EMC设计标准电路1.7 s-video接口EMC设计标准电路…

五个步骤,助你优雅的写好 Controller 层代码!

Controller 层逻辑 普通写法 优化思路 Controller 层逻辑 MVC架构下,我们的web工程结构会分为三层,自下而上是dao层,service层和controller层。controller层为控制层,主要处理外部请求,调用service层。 一般情况下…

6.23黄金是否会跌破1900?多单被套怎么办?

近期有哪些消息面影响黄金走势?今日黄金多空该如何研判? ​黄金消息面解析:周四(6月22日)美市尾盘,现货黄金收报1910美元/盎司,下跌20美元或0.1%,日内最高触及1934.95美元/盎司&…

C++ 面向对象(1)——类 对象

C 在 C 语言的基础上增加了面向对象编程,C 支持面向对象程序设计。类是 C 的核心特性,通常被称为用户定义的类型。 类用于指定对象的形式,是一种用户自定义的数据类型,它是一种封装了数据和函数的组合。类中的数据称为成员变量&a…

Studio One6中文版多少钱?有哪些新功能

Studio One6中文版现在有三个版本,免费版,Artist,Pro版本。下载后是免费版,免费版没有时间限制,但是功能受限。三个版本都支持win/mac系统,而且同时支持5台设备使用,还可以换机使用。 三个版本…

Spring Cloud Day2 Nacos配置管理、Feign远程调用与Gateway服务网关

SpringCloud实用篇02 0.学习目标 1.Nacos配置管理 Nacos除了可以做注册中心,同样可以做配置管理来使用。 1.1.统一配置管理 当微服务部署的实例越来越多,达到数十、数百时,逐个修改微服务配置就会让人抓狂,而且很容易出错。我…

关闭 MAC 的 Microsoft AutoUpdate 自动更新

不是我说,这玩意儿看着是真不爽!!而且每天都要弹出来搞事情!!! 我宣布:今天就要永久关闭 MAC 的 Microsoft AutoUpdate 自动更新!! 像我一样的朋友请举手!&am…