当前位置: 首页 > news >正文

基于Python的《红楼梦》文本分析与机器学习应用

本文将详细介绍如何使用Python和机器学习技术对《红楼梦》进行深入的文本分析和处理,包括文本分卷、分词、停用词处理、TF-IDF特征提取以及文本可视化等关键技术。

一、项目概述

本项目的目标是对中国古典文学名著《红楼梦》进行全面的自动化处理和分析,主要包括以下几个核心环节:

  1. ​文本预处理​​:将完整文本按章节自动分割

  2. ​分词处理​​:使用中文分词技术处理古典文学文本

  3. ​特征提取​​:应用TF-IDF算法提取文本关键特征

  4. ​可视化分析​​:对分析结果进行直观展示

  5. ​主题建模​​:探索文本的潜在主题结构

二、关键技术介绍

1. 文本分卷处理

import osdata = open("红楼梦.txt", 'r', encoding='utf-8')
line = data.readlines()
path = '/class/红楼梦/分卷/aaa.txt'for i in line:if '卷 第' in i:  # 检测分卷标记file_name = i.strip() + 'txt'path = '/class/红楼梦/分卷'path = os.path.join(path, file_name)  # 构建新文件路径else:with open(path, 'a', encoding='utf-8') as f:  # 使用with自动关闭文件f.write(i)

​技术要点解析​​:

  1. ​分卷标记识别​​:利用"卷 第"作为章节分割的标识符,这是处理古典文学文本的特殊考虑

  2. ​动态文件创建​​:根据检测到的分卷标记动态创建新文件

  3. ​上下文管理​​:使用with语句确保文件操作后自动关闭,避免资源泄露

  4. ​编码处理​​:明确指定UTF-8编码,确保中文文本正确处理

​优化建议​​:

  • 添加异常处理机制,应对可能的文件操作错误

  • 增加日志记录,跟踪分卷过程

  • 考虑使用正则表达式提高分卷标记识别的灵活性

因为每一回都有"卷 第"所以使用其来标记分割文本:

2. 文件遍历与内容读取

import pandas as pd
import osfilePaths, fileContents = [], []for root, dirs, files in os.walk(r'D:\pythonProject11\class\红楼梦\分卷'):for name in files:file_path = os.path.join(root, name)filePaths.append(file_path)with open(file_path, 'r', encoding='utf-8') as f:fileContents.append(f.read())corpos = pd.DataFrame({'filePath': filePaths,'fileContent': fileContents
})

技术要点解析​​:

root:正在遍历的目录路径:

  1. ​递归目录遍历​​:使用os.walk全面扫描指定目录及其子目录

  2. ​路径处理​​:os.path.join确保跨平台路径兼容性

dirs :当前目录下的所有子目录名称列表

files:当前目录下的所有非目录文件名称列表  files = ['第一回.txt', '前言.txt', '注释.txt']

  1. ​数据结构化​​:将文件路径和内容组织为Pandas DataFrame,便于后续分析

  2. ​内存管理​​:逐文件读取,避免大文件内存问题

​扩展应用​​:

  • 可添加文件元信息(如文件大小、修改时间等)

  • 实现增量读取,处理超大型文本

  • 添加文本预处理(如去除空白字符、标点符号等)

3. 中文分词与停用词处理

import jieba# 加载自定义词典和停用词表
jieba.load_userdict(r"D:\pythonProject11\class\红楼梦\红楼梦词库.py")
stopwords = pd.read_csv(r"D:\pythonProject11\class\红楼梦\StopwordsCN.txt",encoding='utf-8', engine='python', index_col=False)# 分词处理并写入汇总文件
with open(r'D:\pythonProject11\class\红楼梦\分词后汇总.txt', 'w', encoding='utf-8') as f_out:for _, row in corpos.iterrows():# 分词并过滤停用词juan_ci = ' '.join(seg for seg in jieba.cut(row['fileContent'])if seg not in stopwords.stopword.values and seg.strip())f_out.write(juan_ci + '\n')

​关键点说明​​:

  • jieba:优秀的中文分词工具

  • 自定义词典:提高专业词汇分词准确率

  • 停用词过滤:去除无意义词汇,提高分析质量

4. TF-IDF特征提取与分析

from sklearn.feature_extraction.text import TfidfVectorizer# 读取分词后的文本
with open(r'D:\pythonProject11\class\红楼梦\分词后汇总.txt', 'r', encoding='utf-8') as file:content = file.readlines()# 计算TF-IDF
vectorizer = TfidfVectorizer()
tfidf = vectorizer.fit_transform(content)
vocabulary = vectorizer.get_feature_names_out()  # 获取词汇表# 转换为DataFrame并分析
df = pd.DataFrame(data=tfidf.T.todense(), index=vocabulary)
df = df.iloc[8:]  # 跳过前8行可能无关的内容for i in df.columns:results = df.sort_values(by=i, ascending=False)print(f'第{i+1}回:\n', results.iloc[:10,i])  # 每回取TF-IDF最高的10个词

无关紧要的内容:

​关键点说明​​:

  • TfidfVectorizer:将文本转换为TF-IDF特征矩阵

  • get_feature_names_out():获取特征词汇表

  • todense():将稀疏矩阵转为稠密矩阵

  • sort_values():按TF-IDF值排序,找出重要词汇

三、机器学习知识详解

1. TF-IDF算法原理

TF-IDF(Term Frequency-Inverse Document Frequency)是一种常用的文本特征提取方法,由两部分组成:

1.词频(TF)​​:某个词在文档中出现的频率

TF(t) = (词t在文档中出现的次数) / (文档中所有词的总数)

2.逆文档频率(IDF):衡量词的普遍重要性

IDF(t) = log_e(文档总数 / 含有词t的文档数)

3.TF-RDF:二者相乘

TF-IDF(t) = TF(t) * IDF(t)

2. TF-IDF的文本分析意义

  • 值越大表示该词对文档越重要

  • 能够过滤常见词(如"的"、"是"等)

  • 保留文档特有的重要词汇

  • 适用于文本分类、关键词提取等任务

四、项目总结与展望

1. 主要发现

  • 通过TF-IDF分析成功识别了各章节的关键主题词

  • 人物提及趋势反映了小说情节发展脉络

  • 主题建模揭示了《红楼梦》隐含的几大主题板块

2. 技术挑战

  1. 古典文学与现代汉语的差异带来的分词挑战

  2. 专有名词(如人物别名)的识别问题

  3. 诗词等特殊文体的处理

3. 未来方向

  1. 结合人物关系网络分析

  2. 情感分析追踪情节情绪变化

  3. 不同版本的比较研究

  4. 与其他古典名著的对比分析

通过本项目,我们展示了如何将现代文本挖掘技术应用于古典文学研究,为文学研究提供了量化分析的新视角。这种跨学科方法不仅适用于《红楼梦》,也可推广到其他文学作品的数字化研究。

http://www.dtcms.com/a/326972.html

相关文章:

  • Uniapp物联网平台登录与温湿度监测系统
  • 【电子硬件】EMI中无源晶振的优势
  • 从原理到实践:一文掌握Kafka的消息生产与消费
  • Web前端小游戏轮盘。
  • 开发避坑指南(23):Tomcat高版本URL特殊字符限制问题解决方案(RFC 7230 RFC 3986)
  • Python Day28 HTML 与 CSS 核心知识点 及例题分析
  • @Rancher简介部署使用 - Docker Compose
  • 第五章 特征值与特征向量
  • vue3 实现web网页不同分辨率适配
  • 【狂热算法篇】探寻图论幽径之SPFA算法:图论迷宫里的闪电寻径者(通俗易懂版)
  • http网页部署
  • AI Agent——基于 LangGraph 的多智能体任务路由与执行系统实战
  • 微算法科技(NASDAQ:MLGO)开发经典增强量子优化算法(CBQOA):开创组合优化新时代
  • Git与CI/CD相关知识点总结
  • 【element树组件】el-tree实现连接线及hover编辑效果
  • 机器学习处理文本数据
  • Linux Ansible的安装与基本使用
  • 【C++】5. 内存管理
  • 医美产业科技成果展陈中心:连接微观肌肤世界与前沿科技的桥梁
  • 【网络运维】Linux和自动化:Ansible
  • 基于.net高校财务管理系统/c#/asp.net/sql server 设计开发
  • Spring Boot项目使用WebClient调用第三方接口详细教程
  • Fiddler国内中文网使用经验分享,从抓包入门到API调试进阶
  • 知名B2B订货系统推荐,核货宝、数商云、易订货小程序订货系统深度评测
  • 基于开源AI大模型AI智能名片S2B2C商城小程序的母婴用品精准营销策略研究
  • 小程序打通美团核销:解锁到店综合业态私域密码,赋能6000+门店破局增长
  • 小程序排名优化:功能迭代如何助力排名攀升
  • 校园快递小程序(腾讯地图API、二维码识别、Echarts图形化分析)
  • 棋牌室|台球|KTV|亲子|游戏|PS5等小程序接入美团核销教程,解决线下门店线上的流量!
  • windows X86_64(amd64)平台 Docker 构建多环境平台报错