Python 代码实现对《红楼梦》文本的词频统计和数据可视化

Python 代码主要实现了对《红楼梦》文本的词频统计和数据可视化

完整详细下载地址:https://download.csdn.net/download/huanghm88/89879439

```python
"""  实训4 基于词频的篇章语义相似度与红楼梦内容分析   步骤3 针对红楼梦词频的数据可视化 """
# 引入 collections 包, json 包, codecs 包, jieba 包
import collections, json, codecs, jieba
# 引入tqdm循环可视化工具
from tqdm import tqdm
# 引入词云图绘制的 WordCloud 模块
from wordcloud import WordCloud
# 引入 matplotlib 的绘图模块,记作 plt
import matplotlib.pyplot as plt# 步骤1 中实现的函数
# 定义一个函数,输入一个 文件路径 input_path, 以utf-8格式,读入并解析json文件。
def json_load (input_path) :return json.load(codecs.open(input_path, 'r', 'utf-8'))# 实训2步骤3 中实现的函数
# 定义函数,输入为一个中文字串组成的list。利用jieba分词,对中文字串进行切分,并统计词频。
def word_count(document_words) :to_ret = collections.Counter()for word in document_words :word_cut = list(jieba.cut(word))word_cut_counter = collections.Counter(word_cut)to_ret = to_ret + word_cut_counterreturn to_ret# 实训2步骤4 中实现的函数
# 定义函数,输入为一个collections.Counter格式的词频统计, word_count ,和一个路径, outut_path 。
# 基于 word_count 绘制词云图,并储存在地址 outut_path 中
def word_cloud(word_count, outut_path) :for word in word_count :if word_count[word] == 1 :word_count[word] = 0if len(word) == 1 :word_count[word] = 0wc = WordCloud(width=2000,                 # 绘图的宽度height=1200,                # 绘图的高度font_path='msyh.ttf',       # 中文字体的路径colormap='spring'           # 颜色风格,可以不设置) wc.generate_from_frequencies(word_count)wc.to_file(outut_path)# 利用 json_load 函数,读入红楼梦的json文件
# 辅导老师也可以准备其它文本用于处理
# 我们这里只对红楼梦前80回做处理
data = json_load('红楼梦.json')[:80]# 步骤1 中实现的内容
# 使用 word_count 函数,得到红楼梦每章的字数统计,存入word_counts。
# 同时使用tqdm循环可视化工具,可视化处理过程
word_counts = []
for chapter in tqdm(data) :count_t = word_count(chapter['content'])word_counts.append(count_t)# 使用实训2步骤4的内容,绘制两章的词云图
# word_cloud(word_counts[5],  '红楼梦第6章.png')
# word_cloud(word_counts[15], '红楼梦第16章.png')# 分别得到宝玉、贾母、刘姥姥四个词汇在各个章节的词频统计数据。
baoyu_count     = []
jiamu_count     = []
liulaolao_count = []
for wc in word_counts :baoyu_count.append(wc['宝玉'])jiamu_count.append(wc['贾母'])liulaolao_count.append(wc['刘姥姥'])
# 如果好奇的话,这里可以打印词频统计结果
# print(baoyu_count)
# print(jiamu_count)
# print(liulaolao_count)# 第一部分:
# 使用plt工具画柱状图
def draw_bar_single(input_data, output_path) :# 每个柱子的位置position = list(range(1, len(input_data)+1))plt.bar(x = position,       # 每个柱子的位置height = input_data # 每个柱子的高度)# 保存路径plt.savefig(output_path)# 清空缓存,可以背下来plt.clf()# 可以看到,宝玉通篇在提,刘姥姥只有来的几次被提。
draw_bar_single(liulaolao_count, '刘姥姥_bar.png')
draw_bar_single(baoyu_count, '宝玉_bar.png')# 第二部分:
# 使用plt工具画多重柱状图,这里是绘制宝玉和贾母的词频
# 每个柱子的位置
position_1 = [t-0.2 for t in  range(1, len(baoyu_count)+1)]
position_2 = [t+0.2 for t in  range(1, len(jiamu_count)+1)]plt.bar(x = position_1,     height = baoyu_count,width = 0.4,       # 柱子的宽度label = 'baoyu'  # 标签
)
plt.bar(x = position_2,     height = jiamu_count,width = 0.4,       # 柱子的宽度label = 'jiamu'   # 标签
)
# 绘制图例
plt.legend()
# 保存路径
plt.savefig('multi_bar.png')
# 清空缓存
plt.clf()# width = 0.2
# plt.bar(x = [1-width, 2-width, 3-width, 4-width], height = [4, 3, 2, 1], width = width*2, label = 'sampleA')
# plt.bar(x = [1+width, 2+width, 3+width, 4+width], height = [1, 2, 3, 4], width = width*2, label = 'sampleB')
# # 
# plt.show()# 第三部分:
# 使用plt工具画折线图,这里是绘制宝玉和贾母的词频
# 折现数据点的位置position = list(range(1, len(baoyu_count)+1))plt.plot(position,           # 数据点的位置baoyu_count,        # 词频统计数据label="baoyu",      # 标签color="blue",       # 颜色marker=".",         # 点的形状linestyle="-"       # 线的形状)
plt.plot(position,           # 数据点的位置jiamu_count,        # 词频统计数据label="jiamu",      # 标签color="green",      # 颜色marker=".",         # 点的形状linestyle="--"      # 线的形状)# 横纵坐标标签
plt.xlabel("chapter")
plt.ylabel("word count")
# 绘制图例
plt.legend()
# 保存路径
plt.savefig('lines.png')
以下是对这段代码的分析:**一、整体功能概述**这段 Python 代码主要实现了对《红楼梦》文本的词频统计和数据可视化。具体功能包括:1. 读取《红楼梦》的 JSON 文件,并对前 80 回的内容进行处理。
2. 使用 jieba 分词对每章的内容进行切分,并统计词频。
3. 绘制特定章节的词云图,展示章节中的高频词汇。
4. 统计特定人物(宝玉、贾母、刘姥姥)在各章节中的词频。
5. 分别绘制人物词频的柱状图、多重柱状图和折线图进行可视化展示。**二、主要函数分析**1. `json_load(input_path)`:- 功能:以 UTF-8 格式读入并解析 JSON 文件。- 参数:`input_path`是 JSON 文件的路径。- 返回值:解析后的 JSON 数据。2. `word_count(document_words)`:- 功能:对输入的中文字串列表进行 jieba 分词,并统计词频。- 参数:`document_words`是一个由中文字串组成的列表。- 返回值:一个`collections.Counter`对象,包含了分词后的词频统计结果。3. `word_cloud(word_count, output_path)`:- 功能:根据输入的词频统计结果绘制词云图,并保存到指定路径。- 参数:`word_count`是一个`collections.Counter`格式的词频统计结果,`output_path`是保存词云图的路径。4. `draw_bar_single(input_data, output_path)`:- 功能:绘制单个的柱状图。- 参数:`input_data`是要绘制的柱子高度数据,`output_path`是保存柱状图的路径。**三、代码执行过程**1. 首先,使用`json_load`函数读入《红楼梦》的 JSON 文件,并只取前 80 回的数据。2. 然后,使用`tqdm`循环可视化工具,对每一章的内容进行词频统计,将结果存入`word_counts`列表中。3. 接着,分别统计宝玉、贾母、刘姥姥在各章节中的词频,并可以打印出来查看。4. 之后,分别绘制刘姥姥和宝玉的词频柱状图,以及宝玉和贾母的词频多重柱状图和折线图进行可视化展示。**四、应用场景**1. 文本分析:通过对文学作品进行词频统计和可视化,可以了解作品中不同词汇的出现频率和分布情况,从而深入分析作品的主题、人物等方面。2. 数据可视化教学:这段代码可以作为数据可视化的教学示例,展示如何使用 Python 的相关库进行词云图、柱状图和折线图的绘制。3. 完整详细下载地址:https://download.csdn.net/download/huanghm88/89879439

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

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

相关文章

从图像识别到聊天机器人:Facebook AI的多领域应用

随着人工智能技术的快速发展,Facebook已在多个领域内广泛应用AI技术,以提升用户体验、提高效率并推动创新。从图像识别到聊天机器人,Facebook的AI应用涵盖了社交媒体的方方面面,下面我们将深入探讨这些应用的具体实现及其对用户生…

ecmp观察

文章目录 简述选路策略实验说明开始验证 简述 ECMP(Equal Cost Multi Path)等价多路径,又称等价路由。指到达同一个目的IP或者目的网段存在多条COST值相等的不同路由路径。在具有多条到达同一目的地的网络链路的环境中,传统路由技…

2.1 > Shell 是什么、如何更熟练的使用 Bash Shell

Shell 基础知识 Shell是计算机操作系统中的一个命令行解释器,由C语言编写,用于用户与操作系统之间进行交互。用户可以通过Shell输入命令,操作系统接收到这些命令后执行相应的操作。Shell一般还提供了编程语言的基本功能,允许用户…

在 VS Code 中轻松绘图:Draw.io Integration 插件详解

文章目录 在 VS Code 中轻松绘图:Draw.io Integration 插件详解一、什么是 Draw.io Integration 插件?二、插件安装指南1. 安装步骤2. 配置插件 三、如何使用 Draw.io Integration 插件?1. 创建新绘图文件2. 编辑现有图表3. 常用功能与技巧 四…

网安加·百家讲坛 | 徐一丁:金融机构网络安全合规浅析

作者简介:徐一丁,北京小西牛等保软件有限公司解决方案部总监,网络安全高级顾问。2000年开始从事网络安全工作,主要领域为网络安全法规标准研究、金融行业安全咨询与解决方案设计、信息科技风险管理评估等。对国家网络安全法规标准…

【数据结构与算法】《布隆过滤器:高效数据筛选的魔法工具》

标题:《布隆过滤器:高效数据筛选的魔法工具》 摘要:本文将带你深入了解布隆过滤器这一神奇的数据结构。从研究推荐系统中的已读内容排除和重复内容去重问题引入,详细介绍布隆过滤器的产生契机、设计思想、优缺点及用途。通过阅读…

机器视觉运动控制一体机在DELTA并联机械手视觉上下料应用

市场应用背景 DELTA并联机械手是由三个相同的支链所组成,每个支链包含一个转动关节和一个移动关节,具有结构紧凑、占地面积小、高速高灵活性等特点,可在有限的空间内进行高效的作业,广泛应用于柔性上下料、包装、分拣、装配等需要…

MyBatis 基础知识:配置文件、映射器与 SQL 示例详解

本篇博客将深入探讨 MyBatis 的基础知识,包括配置文件的设置、映射器的使用以及实际的 SQL 示例。 文章目录 前言 准备工作 根据主键删除 日志输出 ​编辑 预编译SQL SQL注入 ​编辑 参数占位符 新增员工 主键返回 更新 查询(根据ID查询&#x…

世界前沿思想升命学说:鼠、牛、虎、兔、龙、蛇、马、羊、猴、鸡、狗、猪

在当今哲学的前沿探索中,山东济南的名人颜廷利教授的《升命学说》一书以其独到的见解和深刻的洞察力,为我们揭示了十二生肖背后的象征意义。这些生肖包括鼠、牛、虎、兔、龙、蛇、马、羊、猴、鸡、狗以及猪,每一种动物都承载着独特的文化寓意…

哥德巴赫猜想渐行渐远

我现在的工作,表明经典分析可能出了问题,如此则连Vinogradov的三素数定理都不成立了,更别说基于L-函数方程的陈氏定理“12”了。事实上即使L-函数方程成立,由于我指出Siegel定理不成立,陈景润和张益唐的工作就不成立。…

卡牌抽卡机小程序,带来新鲜有趣的拆卡体验

随着移动信息技术的发展,小程序得到了快速普及,遍布到了各行各业中,成为企业发展的利器。如今,卡牌抽卡机小程序层出不穷,为玩家带来了更多有趣的拆卡体验。 卡牌在今年中受到了广泛关注,“小马宝莉”等一…

Qt中使用线程之QRunnable

1、自定义1个子类继承自QRunnable 2、重写run方法,编写子线程的业务逻辑 3、使用QThreadPool的全局方法来开启这个线程 4、线程的回收不需要关注,由QThreadPool处理 5、缺点:无法使用信号槽机制 6、适合一些不需要和主线程通信的耗时的任…

如何使用的是github提供的Azure OpenAI服务

使用的是github提供的Azure OpenAI的服务gpt-4o 说明:使用的是github提供的Azure OpenAI的服务,可以无限薅羊毛。开源地址 进入: 地址 进入后点击 右上角“Get API key”按钮 点击“Get developer key” 选择Beta版本“Generate new to…

[Ansible实践笔记]自动化运维工具Ansible(一):初探ansibleansible的点对点模式

文章目录 Ansible介绍核心组件任务执行方式 实验前的准备更新拓展安装包仓库在ansible主机上配置ip与主机名的对应关系生成密钥对将公钥发送到被管理端,实现免密登录测试一下是否实现免密登录 常用工具ansibleansible—docansible—playbook 主要配置文件 Ansible 模…

【数据结构】快速排序(三种实现方式)

目录 一、基本思想 二、动图演示(hoare版) 三、思路分析(图文) 四、代码实现(hoare版) 五、易错提醒 六、相遇场景分析 6.1 ❥ 相遇位置一定比key要小的原因 6.2 ❥ 右边为key,左边先走 …

dd小程序如何监听props中对象的值

组件内代码 Component({mixins: [],data: {infoData:{}},props: {rowData:Object},didMount() {console.log(this.props.rowData,this.props.rowDatathis.props.rowData)this.setData({infoData:this.props.rowData})},didUpdate() {console.log(this.props.rowData)},didUnmo…

落实“双碳”行动,深兰科技推动分子能源技术在AI硬件产品领域的应用及产业化进程

10月21日,上海气候周分子能研究中心(筹)成立仪式在上海环境能源交易所举行。仪式上,深兰科技践行“双碳”目标,与上海东八能源技术有限公司签署分子能源AI应用产业化合作协议。 根据协议,国际分子能量发电开拓者、上海气候周分子能…

论当前的云计算

随着技术的不断进步和数字化转型的加速,云计算已经成为当今信息技术领域的重要支柱。本文将探讨当前云计算的发展现状、市场趋势、技术革新以及面临的挑战与机遇。 云计算的发展现状 云计算,作为一种通过网络提供可伸缩的、按需分配的计算资源服务模式&a…

TMGM平台可靠么?交易是否安全?

在选择外汇交易平台时,安全性与可靠性是投资者最关注的要素之一。作为全球知名的外汇及差价合约交易平台,TMGM(tmgm-pt.com)的安全性与可靠性可以从多个方面进行评估,包括监管环境、资金安全、客户服务、交易技术与服务…

[项目][boost搜索引擎#4] cpp-httplib使用 | log.hpp | 前端 | 测试及总结

目录 编写http_server模块 1. 引入cpp-httplib到项目中 2. cpp-httplib的使用介绍 3. 正式编写http_server 九、添加日志到项目中 十、编写前端模块 十一. 详解传 gitee 十二、项目总结 项目的扩展 写在前面 项目 gitee 已经上传啦 (还是决定将学校和个人…