Python文本处理:初探《三国演义》

news2024/12/28 4:14:27

Python文本处理:初探《三国演义》

  • 三国演义
  • 获取文本
  • 文本预处理
  • 分词与词频统计
  • 引入停用词后进行词频统计
  • 分析人物出场次数
  • 结果可视化
  • 完整代码

三国演义

《三国演义》是中国古代四大名著之一,它以东汉末年到晋朝统一之间的历史为背景,讲述了魏、蜀、吴三国之间的纷争与英雄们的传奇故事。今天,我们将通过Python初步探索《三国演义》的文本处理,感受这部古典名著的魅力。

获取文本

我们需要从本地读取《三国演义》的文本文件。

# 读取本地《三国演义》文本文件
with open('三国演义.txt', 'r', encoding='utf-8') as file:
    sanguo_text = file.read()

输出看一下读取的文件内容:

print(sanguo_text[:30])

输出如下:
在这里插入图片描述

文本预处理

对文本进行分词前,先去除标点符号,使用正则库re来进行。

import re

# 去除标点符号和特殊字符
sanguo_text = re.sub(r'[^\w\s]', '', sanguo_text)
sanguo_text = re.sub(r'\n', '', sanguo_text)

分词与词频统计

使用jieba库进行中文分词,并进行词频统计,输出频率最高的10个词。

import jieba
from collections import Counter
# 使用jieba进行分词
words = jieba.lcut(sanguo_text)
# 统计词频
word_counts = Counter(words)

# 输出出现频率最高的10个词
print(word_counts.most_common(10))

当前输出如下:

[('曰', 7669), ('之', 2797), ('也', 2232), ('吾', 1815), ('与', 1722), ('将', 1643), ('而', 1600), ('了', 1397), ('有', 1386), ('在', 1286)]

可以看到,现在大多数是一些语气助词。这里我们要引入停用词。

引入停用词后进行词频统计

在文本处理中,停用词是指那些在文本分析中没有实际意义的词汇,如“的”、“了”、“在”等。在进行词频统计时,我们通常会去除这些停用词,以便更准确地分析有意义的词汇。

import jieba
from collections import Counter
# 使用jieba进行分词
words = jieba.lcut(sanguo_text)

# 读取停用词列表
with open('常用停用词.txt', 'r', encoding='utf-8') as file:
    stopwords = set(file.read().split())

# 去除停用词
filtered_words = [word for word in words if word not in stopwords]

# 统计词频
word_counts = Counter(filtered_words)
# 输出出现频率最高的10个词
print(word_counts.most_common(10))

当前输出:

[('曹操', 938), ('孔明', 809), ('玄德', 494), ('丞相', 489), ('关公', 478), ('荆州', 412), ('玄德曰', 385), ('孔明曰', 382), ('张飞', 349), ('商议', 343)]

我使用的停用词文件:
在这里插入图片描述
实际上可以根据自己的需求进行调整。

分析人物出场次数

注意:三国中人物可能有多个称呼,比如说刘备也可以用玄德称呼,这里的结果并不严谨。

characters = ["刘备","玄德", "关羽", "张飞", "曹操", "孙权", "诸葛亮", "周瑜", "吕布", "貂蝉", "赵云"]

# 初始化人物出场次数统计字典
character_counts = {character: 0 for character in characters}

# 统计人物出场次数
for character in characters:
    character_counts[character] = sanguo_text.count(character)

# 输出人物出场次数
print(character_counts)

输出如下:

{'刘备': 298, '玄德': 1816, '关羽': 9, '张飞': 366, '曹操': 947, '孙权': 320, '诸葛亮': 163, '周瑜': 242, '吕布': 369, '貂蝉': 61, '赵云': 314}

刘备虽然只有298次,但是玄德有1816次。

考虑人物别名后,重新进行统计

# 三国演义主要人物及其别名列表
characters = {
    "刘备": ["刘备", "玄德", "皇叔"],
    "关羽": ["关羽", "云长"],
    "张飞": ["张飞", "翼德"],
    "曹操": ["曹操", "孟德", "丞相"],
    "孙权": ["孙权"],
    "诸葛亮": ["诸葛亮", "孔明", "卧龙"],
    "周瑜": ["周瑜", "公瑾"],
    "吕布": ["吕布", "奉先"],
    "貂蝉": ["貂蝉"],
    "赵云": ["赵云", "子龙"]
}

# 初始化人物出场次数统计字典
character_counts = {key: 0 for key in characters}

# 统计人物出场次数
for character, aliases in characters.items():
    count = 0
    for alias in aliases:
        count += sanguo_text.count(alias)
    character_counts[character] = count

# 输出人物出场次数
print(character_counts)

输出如下:

{'刘备': 2232, '关羽': 452, '张飞': 426, '曹操': 1528, '孙权': 320, '诸葛亮': 1894, '周瑜': 302, '吕布': 389, '貂蝉': 61, '赵云': 415}

结果可视化

对出场次数进行可视化:

import matplotlib.pyplot as plt
from pylab import *
mpl.rcParams['font.sans-serif']=['SimHei']


# 提取人物和出场次数
names = list(character_counts.keys())
counts = list(character_counts.values())

# 绘制柱状图
plt.figure(figsize=(10, 6))
plt.bar(names, counts, color='skyblue')
plt.xlabel('人物')
plt.ylabel('出场次数')
plt.title('《三国演义》主要人物出场次数统计')
plt.show()

在这里插入图片描述

完整代码

import re
import jieba
from collections import Counter
import matplotlib.pyplot as plt
from pylab import mpl

# 设置中文字体,确保图表中能显示中文
mpl.rcParams['font.sans-serif'] = ['SimHei']

# 读取本地《三国演义》文本文件
with open('三国演义.txt', 'r', encoding='utf-8') as file:
    sanguo_text = file.read()

# 去除标点符号和特殊字符,以及换行符
sanguo_text = re.sub(r'[^\w\s]', '', sanguo_text)
sanguo_text = re.sub(r'\n', '', sanguo_text)

# 使用jieba进行分词
words = jieba.lcut(sanguo_text)

# 读取停用词列表
with open('常用停用词.txt', 'r', encoding='utf-8') as file:
    stopwords = set(file.read().split())

# 去除停用词
filtered_words = [word for word in words if word not in stopwords]

# 统计词频
word_counts = Counter(filtered_words)

# 输出出现频率最高的10个词
print("词频最高的10个词:", word_counts.most_common(10))

# 三国演义主要人物及其别名列表
characters = {
    "刘备": ["刘备", "玄德", "皇叔"],
    "关羽": ["关羽", "云长"],
    "张飞": ["张飞", "翼德"],
    "曹操": ["曹操", "孟德", "丞相"],
    "孙权": ["孙权"],
    "诸葛亮": ["诸葛亮", "孔明", "卧龙"],
    "周瑜": ["周瑜", "公瑾"],
    "吕布": ["吕布", "奉先"],
    "貂蝉": ["貂蝉"],
    "赵云": ["赵云", "子龙"]
}

# 初始化人物出场次数统计字典
character_counts = {key: 0 for key in characters}

# 统计人物出场次数
for character, aliases in characters.items():
    count = 0
    for alias in aliases:
        count += sanguo_text.count(alias)
    character_counts[character] = count

# 输出人物出场次数
print("主要人物出场次数:", character_counts)

# 提取人物和出场次数
names = list(character_counts.keys())
counts = list(character_counts.values())

# 绘制柱状图
plt.figure(figsize=(10, 6))
plt.bar(names, counts, color='skyblue')
plt.xlabel('人物')
plt.ylabel('出场次数')
plt.title('《三国演义》主要人物出场次数统计')
plt.show()

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

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

相关文章

2024下《软件设计师》50个高频考点汇总,背就有效!

宝子们!上半年软考已经结束一段时间了,准备考下半年软考中级-软件设计师的小伙伴们可以开始准备了,这里给大家整理了50个高频考点,涵盖全书90%以上重点,先把这个存下!再慢慢看书,边看书边背这个…

CNN和Transformer创新结合,模型性能炸裂!

CNN结合Transformer 【CNNTransformer】这个研究方向通过结合卷积神经网络(CNN)的局部特征提取能力和Transformer的全局上下文建模优势,旨在提升模型对数据的理解力。这一方向在图像处理、自然语言处理等多个领域展现出强大的应用潜力&#…

告诉你提升UI质感的两个秘密,谁用谁知道。

秘密一:善用头部装饰 秘密二:设计好瓷片区

老电脑焕发第二春,玩转 Stable Diffusion 3

几年前,我头脑一热,配置了一台顶配级消费 PC(RTX 2080 Ti GPU i9 CPU),打算用来学习 AI。然而,起初我并没有找到合适的切入点。深度学习早期阶段,消费级显卡根本无法承担训练大模型、微调大模型…

优思学院|精益管理是什么?3大问题帮你彻底搞懂

有一位朋友他喜欢投资,他偶然看中了一家公司,从公司的一些新闻稿中表示他们因为实施了“精益管理”(Lean Management),因此每股盈余(EPS)长期稳定增长,甚至在行业内的重要指标——库…

微信小游戏备案 之 游戏内容介绍编写实例

微信小游戏备案 之 游戏内容介绍编写实例 前言一,编写规范二,内容填写2.1 本游戏不涉及2.2 游戏场景2.3 游戏玩法2.4 功能系统2.5 主要特点三,小结前言 对于游戏开发者来说,微信小游戏备案是让游戏合法上线的重要步骤,而其中游戏内容介绍的编写尤为关键。下面为大家提供一…

Python实现管线建模 - 3.同心变径管

往期回顾 Python实现管线建模 || 1.圆直管、方管https://blog.csdn.net/Xxy9426/article/details/138836778?spm1001.2014.3001.5501 对依赖库的补充 随着后续内容的深入,我发现单纯靠trimesh库已经无法完成后续的建模(涉及到多个几何体拼接或者是创建…

Prometheus+Grafana监控MySQL

一、准备 grafana服务器:192.168.48.136Prometheus服务器:192.168.48.136被监控服务器:192.168.48.134、192.168.48.135查看时间是否同步 二、安装prometheus server 【2.1】安装 # 解压安装包 tar -zxvf prometheus-2.52.0.linux-amd64.t…

安卓删除文件恢复,3个技巧轻松解决,让你的数据失而复得

如今,手机数据的重要性不言而喻。无论是工作文档、个人照片还是其他珍贵的资料,一旦丢失,都可能带来不小的困扰。而当我们不小心删除了手机中的文件时,焦虑和无助感更加强烈。但幸运的是,随着技术的不断进步&#xff0…

Unity接入PS5手柄和Xbox手柄以及Android平台的(以及不同平台分析)

Unity接入PS5手柄和Xbox手柄以及Android平台的(以及不同平台分析) 介绍Unity手柄小知识PC端和编辑器上的摇杆事件和滑动事件PS5手柄Xbox手柄北通手柄 安卓环境下(安卓手机或者安卓模拟器)PS5手柄Xbox手柄北通手柄 总结 介绍 最近…

高中数学:数列-等比数列

一、概念 二、通项公式 1、与函数的关系 类似一个指数函数 2、重要性质 三、求和公式 错位相减法 四、练习 例题1 例题2

基于机器学习的变频器故障诊断方法(MATLAB,Python)

变频器故障数据由MATLAB Simulink生成。 import pandas as pd import numpy as np import matplotlib.pyplot as plt import seaborn as sns from sklearn.neighbors import KNeighborsClassifier from sklearn.svm import SVC from sklearn.ensemble import RandomForestClass…

折叠手机鼻祖倒下了,折叠屏手机或完蛋,苹果早有先见之明

柔宇即将倒下,这家率先开发出折叠屏技术的企业未能挽救它自己,而对于折叠手机行业来说,这么多年过去,折叠手机也仍然是绝对的少数派,或许折叠手机也快要寿终正寝了。 柔宇开发的折叠手机为外折叠,弯曲部分无…

【UIDynamic-动力学-UICollisionBehavior-碰撞行为-与引用View碰撞-与另一个item发生碰撞 Objective-C语言】

一、接下来,我们来说这个碰撞啊, 1.把之前的代码备份一份,改个名字,叫做“02-碰撞-与引用View碰撞” 首先呢,把重力的这些属性,先删了, 让它先有重力,先command + R, 当我们点击屏幕的时候,它有重力,所以自然会往下落, 但是呢,好像感觉,超出了控制器的View了以后…

React+TS前台项目实战(九)-- 全局常用组件弹窗Dialog封装

文章目录 前言Dialog公共弹窗组件1. 功能分析2. 代码详细注释3. 使用方式4. 效果展示 总结 前言 今天这篇主要讲全局公共弹窗Dialog组件封装,将用到上篇封装的模态框Modal组件。有时在前台项目中,偶尔要用到一两个常用的组件,如 弹窗&#x…

建筑工程软件Revit中复杂大模型如何实现Web端轻量化?| HOOPS技术应用

建筑信息模型( BIM)技术在建筑工程中扮演着越来越重要的角色,而Autodesk Revit作为主流的BIM软件,被广泛应用于设计、施工和管理。然而,Revit生成的复杂大模型常常由于数据量庞大而难以直接在Web端展示和操作。这时&am…

爬虫初学篇——看完这些还怕自己入门不了?

初次学习爬虫,知识笔记小分享 学scrapy框架可看:孤寒者博主的【Python爬虫必备—>Scrapy框架快速入门篇——上】 目录🌟 一、🍉基础知识二、🍉http协议:三、🍉解析网页(1) xpath的用…

分类预测 | Matlab实现GWO-CNN-SVM灰狼冰算法优化卷积支持向量机分类预测

分类预测 | Matlab实现GWO-CNN-SVM灰狼冰算法优化卷积支持向量机分类预测 目录 分类预测 | Matlab实现GWO-CNN-SVM灰狼冰算法优化卷积支持向量机分类预测分类效果基本描述程序设计参考资料 分类效果 基本描述 1.Matlab实现GWO-CNN-SVM灰狼冰算法优化卷积支持向量机分类预测&…

java之sql注入审计

1 基础环境搭建 1.1 mysql数据库搭建 phpStudy是一个PHP调试环境的程序集成包,PHPMysqlApache。 通过phpstduy下载与安装指 定版本的mysql数据库【可以同时下载多个版本,便于应对不对的系统及复现漏洞便捷切换多个版本】 完成下载后,启动…

无人机比赛有哪些?

无人机比赛项目可是多种多样,精彩纷呈呢! 常见的比赛项目包括S形绕桩赛、平台起降赛、应用航拍、投掷物品和定点飞行等。这些项目不仅考验无人机的性能,更考验飞行员的操控技巧。 在S形绕桩赛中,飞行员需要操控无人机快速而准确…