Python+jieba+wordcloud实现文本分词、词频统计、条形图绘制及不同主题的词云图绘制

目录

  • 序言:第三方库及所需材料
  • 函数模块介绍
    • 分词
    • 词频统计
    • 条形图绘制
    • 词云绘制
    • 主函数
  • 效果预览
  • 全部代码

序言:第三方库及所需材料

编程语言:Python3.9。
编程环境:Anaconda3,Spyder5。
使用到的主要第三方库:jieba-0.42.1,wordcloud-1.8.2.2,matplotlib-3.5.1。

  • 文本数据:txt格式,本文以2023年内蒙古自治区政府工作报告为例,命名为“2023.txt”。
  • 停用词:“cn_stopwords.txt”,网络下载
  • 字体文件:tff格式,本文使用方正粗黑宋简体,命名为“fzch.tff”
  • 主题背景图片:本文使用白底内蒙古自治区地图,命名为“R-C.png”

以上文件置于py文件的同级目录下,使用相对路径读取。

函数模块介绍

具体的代码可见全部代码部分,这部分只介绍思路和相应的函数模块

分词

在主函数中读取文本数据,调用分词函数cutWord,使用jieba分词库和停用词表对文本进行分词操作,并返回词语组成的列表。

def cutWord(text):     words=jieba.cut(text)stopwords = {}.fromkeys([ line.rstrip() for line in open('cn_stopwords.txt',encoding='utf-8') ])finalwords = []for word in words:if word not in stopwords:if (word != "。" and word != ",") :finalwords.append(word) return finalwords

词频统计

将词语列表传入词频统计函数countWord,去除单字词和换行符后,统计各词语出现的频率,并返回各词语的频数列表。

def countWord(text):counts={}for word in text: if len(word) == 1 or word=='\n':#单个词和换行符不计算在内continueelse:if word not in counts.keys():counts[word]=1else:counts[word]+=1return counts

条形图绘制

将词频字典传入高频词条形图绘制函数drawBar,根据注释传入参数,选择前RANGE项词语和图像横竖

def drawBar(countdict,RANGE, heng):#函数来源于:https://blog.csdn.net/leokingszx/article/details/101456624,有改动#dicdata:字典的数据。#RANGE:截取显示的字典的长度。#heng=0,代表条状图的柱子是竖直向上的。heng=1,代表柱子是横向的。考虑到文字是从左到右的,让柱子横向排列更容易观察坐标轴。by_value = sorted(countdict.items(),key = lambda item:item[1],reverse=True)print(by_value[:20])x = []y = []plt.figure(figsize=(9, 6))for d in by_value:x.append(d[0])y.append(d[1])if heng == 0:plt.bar(x[0:RANGE], y[0:RANGE])plt.show()return elif heng == 1:plt.barh(x[0:RANGE], y[0:RANGE])plt.show()return else:return "heng的值仅为0或1!"

词云绘制

将词语列表传入词云绘制函数drawWordCloud,绘制词云图。进一步地,将词语列表传入词云绘制函数drawWordCloudwithMap,以内蒙古自治区地图为背景绘制词云图。

def drawWordCloud(textList):wc = WordCloud(font_path ="fzch.ttf",background_color="white",width=1800,height=1200).fit_words(countdict)plt.figure(figsize=(18, 12))plt.imshow(wc)plt.axis("off")plt.show()def drawWordCloudwithMap(textList):d = path.dirname(__file__)map_coloring = np.array(Image.open(path.join(d, "R-C.png")))  wc = WordCloud(font_path ="fzch.ttf",mask=map_coloring,background_color="white",width=1800,height=1200).fit_words(countdict)plt.figure(figsize=(18, 12))plt.imshow(wc)plt.axis("off")plt.show()

主函数

if __name__ == "__main__":with open('2023.txt','r',encoding='utf-8') as f:text=f.read()#读取文本cutText=cutWord(text)#jieba分词countdict=countWord(cutText)#生成词频字典drawBar(countdict,10,0)#绘制词语出现次数前10的竖向条形图 drawBar(countdict,20,1)#绘制词语出现次数前20的横向条形图        drawWordCloud(cutText)#绘制词云图drawWordCloudwithMap(cutText)#以地图为背景绘制词云图

效果预览

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

全部代码

# -*- coding: utf-8 -*-
# @Time    : 2023/11/22
# @Author  : Ryo_Yuki
# @Software: Spyderimport jieba
import jieba.analyse
from wordcloud import WordCloud
import matplotlib.pyplot as plt
import numpy as np
from PIL import Image
from os import path
plt.rcParams['font.sans-serif'] = ['SimHei']  # 用来正常显示中文标签def cutWord(text):     words=jieba.cut(text)stopwords = {}.fromkeys([ line.rstrip() for line in open('cn_stopwords.txt',encoding='utf-8') ])finalwords = []for word in words:if word not in stopwords:if (word != "。" and word != ",") :finalwords.append(word) return finalwordsdef countWord(text):counts={}for word in text: if len(word) == 1 or word=='\n':#单个词和换行符不计算在内continueelse:if word not in counts.keys():counts[word]=1else:counts[word]+=1return countsdef drawBar(countdict,RANGE, heng):#函数来源于:https://blog.csdn.net/leokingszx/article/details/101456624,有改动#dicdata:字典的数据。#RANGE:截取显示的字典的长度。#heng=0,代表条状图的柱子是竖直向上的。heng=1,代表柱子是横向的。考虑到文字是从左到右的,让柱子横向排列更容易观察坐标轴。by_value = sorted(countdict.items(),key = lambda item:item[1],reverse=True)print(by_value[:20])x = []y = []plt.figure(figsize=(9, 6))for d in by_value:x.append(d[0])y.append(d[1])if heng == 0:plt.bar(x[0:RANGE], y[0:RANGE])plt.show()return elif heng == 1:plt.barh(x[0:RANGE], y[0:RANGE])plt.show()return else:return "heng的值仅为0或1!"def drawWordCloud(textList):wc = WordCloud(font_path ="fzch.ttf",background_color="white",width=1800,height=1200).fit_words(countdict)plt.figure(figsize=(18, 12))plt.imshow(wc)plt.axis("off")plt.show()def drawWordCloudwithMap(textList):d = path.dirname(__file__)map_coloring = np.array(Image.open(path.join(d, "R-C.png")))  wc = WordCloud(font_path ="fzch.ttf",mask=map_coloring,background_color="white",width=1800,height=1200).fit_words(countdict)plt.figure(figsize=(18, 12))plt.imshow(wc)plt.axis("off")plt.show()#主函数
if __name__ == "__main__":with open('2023.txt','r',encoding='utf-8') as f:text=f.read()#读取文本cutText=cutWord(text)#jieba分词countdict=countWord(cutText)#生成词频字典drawBar(countdict,10,0)#绘制词语出现次数前10的竖向条形图 drawBar(countdict,20,1)#绘制词语出现次数前20的横向条形图        drawWordCloud(cutText)#绘制词云图drawWordCloudwithMap(cutText)#以地图为背景绘制词云图

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

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

相关文章

python之pyqt专栏1-环境搭建

#python pyqt# python:3.11.6 pycharm:PyCharm Community Edition 2023.2.5 pyqt6 python安装 官网下载:Python Releases for Windows | Python.org pycharm社区版安装 官网地址:Download PyCharm: Python IDE for Professional…

golang学习笔记——创建项目

创建项目 从Go 1.8开始,将GOPATH设置为环境变量不是必需的。如果我们没有设置一个,Go使用默认的GOPATH为$HOME/go。可以使用go env查看环境变量信息。 创建项目 # 创建项目目录 mkdir helloLog cd helloLog # 使用go mod初始化项目,生成go.mod文件 go…

TikTok shop印尼重启电商征程:与当地平台合作开启新篇章!——站斧浏览器

经历了一个半月的间隔,TikTok Shop成功重返印度尼西亚市场。据国际媒体报道,TikTok计划通过与印尼本地电子商务平台的合作,重启其在该国的电商业务。 Temmy Satya Permana,印尼合作社和中小企业部的官员,证实了这一重…

【广州华锐互动】VR线上课件制作软件满足数字化教学需求

随着科技的不断发展,虚拟现实(VR)技术在教学领域的应用逐渐成为趋势。其中,广州华锐互动开发的VR线上课件制作软件更是备受关注。这种工具为教师提供了便捷的制作VR课件的手段,使得VR教学成为可能,极大地丰…

thinkphp6 不支持:redis错误

起因: 使用 redis 时候,thinkphp 报错。 解决方法: 打开 php.ini 文件,增加 extensionphp_redis.dll 即可

Java架构师发展方向和历程

目录 1 导论2 架构师的三观培养3 架构师的遇到的困难4 架构师职责5 架构师之路6 架构师的发展方向7 应用领域架构师8 业务架构师9 系统架构师和企业架构师10 技术路线和演进规划11 一线大厂的技术生态拓张案例12 如何推进项目落地想学习架构师构建流程请跳转:Java架构师系统架…

CUDA与GPU编程

文章目录 CUDA与GPU编程1. 并行处理与GPU体系架构1.1 并行处理简介1.1.1 串行处理与并行处理的区别1.1.2 并行处理的概念1.1.3 常见的并行处理 1.2 GPU并行处理1.2.1 GPU与CPU并行处理的异同1.2.2 CPU的优化方式1.2.3 GPU的特点 1.3 环境搭建 CUDA与GPU编程 1. 并行处理与GPU体…

城市管理实景三维:打造智慧城市的新引擎

城市管理实景三维:打造智慧城市的新引擎 在城市管理领域,实景三维技术正逐渐成为推动城市发展的新引擎。通过以精准的数字模型呈现城市真实场景,实景三维技术为城市决策提供了全新的思路和工具。从规划设计到交通管理,从环境保护到…

嵌入式系统在工业自动化中的应用

嵌入式系统在工业自动化中的应用非常广泛,它们通过集成控制和实时响应能力,实现了生产线的自动化、智能化和高效化。以下将详细介绍嵌入式系统在工业自动化中的几个重要应用领域,并提供一些示例代码。 1. PLC(可编程逻辑控制器&a…

【开源】基于Vue和SpringBoot的学校热点新闻推送系统

项目编号: S 047 ,文末获取源码。 \color{red}{项目编号:S047,文末获取源码。} 项目编号:S047,文末获取源码。 目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 新闻类型模块2.2 新闻档案模块2.3 新…

Python模块之yaml:简化配置与数据解析

更多Python学习内容:ipengtao.com YAML(YAML Aint Markup Language)是一种人类可读的数据序列化格式,常用于配置文件和数据传输。在Python中,可以使用PyYAML模块来处理YAML格式的数据。本文将深入介绍PyYAML的基础用法…

AI质差小区优化效果评估

1. 下行流量/PRB利用率和贬损用户的关系 通过分析长期贬损质差小区:下行PRB利用率/流量和小区平均每小时质差用户数成正比例关系,即小区的贬损用户会随PRB利用率/流量的增长而增长。 2. 贬损用户和流量走势 年前平均每天流量平稳的情况下,通…

关于JS stack trace解决办法

问题描述 npm run serve启动前端项目时&#xff0c;控制台输出下图一堆的文字&#xff0c;JS stack trace , 问题现象&#xff1a; JS stack trace Security context: 0000017B93ACFB61 <JS Object>1: init_scope_vars [0000017B93A04381 <undefined>:~3382] [p…

北京数字孪生赋能工业制造,加速推进制造业数字化转型

随着新一代信息技术与实体经济深度融合进程的加快&#xff0c;企业数字化转型需求的提升&#xff0c;政策的持续支持&#xff0c;数字孪生将为工业制造、未来生活带来无限的可能。在制造业数字化大变革时代&#xff0c;以5G、大数据、物联网、人工智能等为代表的工业4.0&#x…

Redis-Redis高可用集群之水平扩展

Redis3.0以后的版本虽然有了集群功能&#xff0c;提供了比之前版本的哨兵模式更高的性能与可用性&#xff0c;但是集群的水平扩展却比较麻烦&#xff0c;今天就来带大家看看redis高可用集群如何做水平扩展&#xff0c;原始集群(见下图)由6个节点组成&#xff0c;6个节点分布在三…

基于DCT变换的图像压缩解压缩算法matlab仿真

目录 1.算法运行效果图预览 2.算法运行软件版本 3.部分核心程序 4.算法理论概述 4.1、DCT变换原理 4.2、基于DCT的图像压缩 4.3、基于DCT的图像解压缩 5.算法完整程序工程 1.算法运行效果图预览 2.算法运行软件版本 MATLAB2022a 3.部分核心程序 ...................…

动态loading

项目中需要用到动图loading的地方可以下载 https://www.intogif.com/loading/ 高级点的还有css动画;692 Loaders: CSS & Tailwind 692 Loaders: CSS & Tailwind

【Python】np.unique() 介绍与使用

简述 numpy.unique&#xff1a;用于去除数组中重复元素&#xff0c;并从小到大排序&#xff08;找到唯一元素并排序&#xff09;。 def unique(ar, return_indexFalse, return_inverseFalse,return_countsFalse, axisNone):ar: 这是输入的数组或类数组对象。return_index: 如…

【数字信号处理】傅里叶变换的离散性与周期性

傅里叶变换的离散性与周期性 2023年11月21日 #elecEngeneer 文章目录 傅里叶变换的离散性与周期性1. 符号说明2. 具体分析3. 序列的序号表示的DFT下链 1. 符号说明 t : 连续时间(时域)变量 ω : 频域变量&#xff0c;aka角频率 g : 时域函数 G : 频域函数 n : 时域采样序列序号…

MAV3D:从文本描述中生成三维动态场景

Singer U, Sheynin S, Polyak A, et al. Text-to-4d dynamic scene generation[J]. arXiv preprint arXiv:2301.11280, 2023. MAV3D 是 Meta AI 研究者们提出的一种从文本描述生成三维动态场景的方法。从所提供的文本生成的动态视频输出可以从任何摄像机位置和角度查看&#xf…