用Python解锁《红楼梦》的文本密码:从分卷到TF-IDF关键词分析 📅 发布时间:2026/7/7 5:00:44 👁️ 浏览次数: 作为中国古典小说的巅峰之作《红楼梦》的文本深处藏着无数值得挖掘的细节。如果说传统的文本分析靠的是逐字逐句的品读那么用Python来分析《红楼梦》则能让我们以更高效、更量化的方式解锁这部经典的文本密码。今天就来分享一套完整的《红楼梦》文本分析流程从分卷处理到分词再到用TF-IDF提取各卷核心关键词。一、前期准备数据与环境在开始代码编写前我们需要准备好基础素材1. 文本文件完整的《红楼梦》txt文件编码为utf-82. 辅助文件停用词表StopwordsCN.txt、自定义词库红楼梦词库.txt用于优化分词效果3. 环境依赖确保安装了pandas、jieba、scikit-learn等库可通过pip install pandas jieba scikit-learn快速安装。二、拆分《红楼梦》分卷文本《红楼梦》原著以“卷”“回”划分章节直接分析整本文本不利于聚焦局部内容因此第一步先将整书按“卷 第”的标识拆分成独立的分卷文件方便后续逐卷分析。import os # 创建分卷存储目录 output_dir r./分卷 if not os.path.exists(output_dir): os.makedirs(output_dir) # 读取整本《红楼梦》文本 file open(红楼梦.txt, encodingutf-8) flag 0 # 标记是否为首次创建分卷文件 juan_file None for line in file: # 识别分卷标识行 if 卷 第 in line: # 拼接分卷文件名 juan_name line.strip() .txt path os.path.join(output_dir, juan_name) print(f正在创建分卷文件{path}) # 首次创建文件直接打开非首次先关闭上一个文件再新建 if flag 0: juan_file open(path, w, encodingutf-8) flag 1 else: juan_file.close() juan_file open(path, w, encodingutf-8) continue # 将内容写入对应分卷文件 if juan_file: juan_file.write(line) # 关闭最后一个分卷文件和整书文件 if juan_file: juan_file.close() file.close()这段代码的核心逻辑是遍历整书文本的每一行当识别到包含“卷 第”的行时判定为新卷的开始随即创建对应的分卷txt文件并将后续内容写入该文件直到识别到下一个分卷标识。执行后所有分卷文件会被统一保存到“分卷”目录下方便后续调用。三、读取分卷文本构建文本数据集拆分完成后我们需要将所有分卷文件的路径和内容读取出来构建成结构化的DataFrame为后续分词和分析打下基础。import pandas as pd filePaths [] fileContents [] # 遍历分卷目录读取所有文件 for root, dirs, files in os.walk(r./分卷): for name in files: filePath os.path.join(root, name) filePaths.append(filePath) with open(filePath, r, encodingutf-8) as f: fileContent f.read() fileContents.append(fileContent) # 构建DataFrame corpos pd.DataFrame({ filePath: filePaths, fileContent: fileContents }) print(分卷文本数据集构建完成) print(corpos.head())通过os.walk遍历目录我们能自动获取所有分卷文件的路径再通过文件读取操作获取文本内容最终用pandas构建成包含“文件路径”和“文本内容”的数据集既方便查看也便于后续按行按卷处理。四、中文分词与停用词过滤中文文本分析的核心步骤之一是分词——将连续的文本拆分成单个词汇。这里我们使用jieba分词库并结合自定义词库和停用词表优化分词效果• 自定义词库补充《红楼梦》专属词汇如人名、地名避免分词时被拆分• 停用词表过滤无实际语义的词汇如“的”“了”“之”减少无效信息。import jieba # 加载自定义词库 jieba.load_userdict(r./红楼梦词库.txt) # 读取停用词表 stopwords pd.read_csv(r./StopwordsCN.txt, encodingutf-8, enginepython, index_colFalse) # 转换为集合提升查询效率 stopwords_set set(stopwords.iloc[:, 0].tolist()) # 打开文件存储分词结果 file_to_jieba open(r./分词后汇总.txt, w, encodingutf-8) # 逐卷分词 for index, row in corpos.iterrows(): juan_ci fileContent row[fileContent] # 分词 segs jieba.cut(fileContent) for seg in segs: seg_stripped seg.strip() # 过滤停用词和空字符串 if seg_stripped not in stopwords_set and len(seg_stripped) 0: juan_ci seg_stripped # 写入分词结果 file_to_jieba.write(juan_ci \n) file_to_jieba.close() print(分词完成结果已保存至「分词后汇总.txt」)五、用TF-IDF提取各卷核心关键词TF-IDF词频-逆文档频率是文本挖掘中常用的关键词提取方法核心思想是一个词汇在某篇文档中出现频率越高且在所有文档中出现频率越低就越能代表该文档的核心内容。我们用scikit-learn的TfidfVectorizer实现这一过程并提取每一卷的Top10核心关键词from sklearn.feature_extraction.text import TfidfVectorizer # 读取分词后的文本 inFile open(r./分词后汇总.txt, r, encodingutf-8) corpos inFile.readlines() inFile.close() # 初始化TF-IDF向量化器 vectorizer TfidfVectorizer() # 计算TF-IDF矩阵 tfidf vectorizer.fit_transform(corpos) # 获取所有词汇列表 wordlist vectorizer.get_feature_names_out() # 将TF-IDF矩阵转换为DataFrame方便查看 df pd.DataFrame(tfidf.T.todense(), indexwordlist) # 提取每一卷的Top10关键词 for i in range(len(corpos)): # 获取该卷所有词汇的TF-IDF值 featurelist df.iloc[:, i].tolist() # 构建词汇-权重字典 resdict dict(zip(wordlist, featurelist)) # 按TF-IDF值降序排序 resdict_sorted sorted(resdict.items(), keylambda x: x[1], reverseTrue) # 输出Top10关键词 print(f第{i1}卷的核心关键词: , resdict_sorted[0:10])执行这段代码后我们就能看到每一卷的核心关键词——比如某一卷的关键词可能是“宝玉”“黛玉”“大观园”另一卷可能是“王熙凤”“宁国府”等这些关键词能精准反映对应章节的核心内容。六、分析与延伸从代码到文本洞察通过这套流程我们不仅完成了《红楼梦》的文本拆分、分词和关键词提取更能从量化角度获得对文本的新认知1. 核心人物关联通过各卷关键词的重叠度分析宝玉、黛玉、宝钗等核心人物在不同章节的出场频次和核心度2. 情节脉络梳理某一卷若高频出现“抄检”“大观园”等词汇可快速定位到对应情节3. 风格特征挖掘对比不同卷的关键词分布能感知前八十回与后四十回在词汇使用、叙事焦点上的差异。七、总结用Python分析经典文本不是为了替代传统的文学品读而是为经典解读提供新的视角和工具。从分卷处理到TF-IDF关键词提取整个流程既体现了Python在文本处理上的高效性也让我们能以更客观、更量化的方式走进《红楼梦》的文本世界。当然这只是文本分析的入门玩法后续还可以基于这些数据做更多延伸比如词云可视化、人物关系网络分析、情感倾向分析等。经典之所以为经典就在于它能在不同的解读方式下持续焕发新的生命力而Python正是我们解锁这份生命力的一把新钥匙。
十年老兵被 AI 工具 “颠覆” 了认知,使用IntelliJ IDEA集成AI工具,自动写代码,生成项目,也太爽了 一、十年老兵被 AI 工具 “颠覆” 了认知 做 Java 开发十年,从手写 SSH 框架配置到 Spring Boot 自动装配,亲历了开发效率的一次次飞跃,但始终逃不过这些 “重复性折磨”: 新建项目时,要手动搭架构、导依赖、写配置&… 2026/7/7 17:59:46
SSH暴力破解与弱口令攻击分析:一次由弱口令引发的测试服沦陷 1. 攻击链还原信息收集 (低成本):攻击者使用 masscan、nmap等工具对目标IP段进行端口扫描,发现一台服务器(测试服)开放了 22端口。暴力破解 (极低成本):攻击者使用 hydra、medusa等工具,加载常见的用户名列… 2026/7/4 7:18:30
三防布定做厂家 在如今的市场上,三防布的需求越来越大,无论是船舶、汽车还是煤矿等行业,都离不开它。但找到一家靠谱的定做厂家可真不是一件容易的事儿。一、市场上的乱象与痛点据不完全统计,目前市场上声称能做三防布的厂家多达几百家。但真正能… 2026/7/5 7:34:45
QQ 邮箱验证码 vs 短信验证码:3 个维度成本与可靠性对比分析 QQ 邮箱验证码 vs 短信验证码:3 个维度成本与可靠性对比分析在小型项目开发中,验证码系统是身份验证的核心组件。作为技术负责人,我们常常面临一个关键决策:使用免费的 QQ 邮箱验证码,还是选择付费的短信验证码服务&am… 2026/7/8 2:27:27
【C++】015、函数参数:值传递,指针传递,引用传递的区别 一、本质区别1、值传递是赋值粘贴,函数内获取的副本,不影响外部2、指针传递的是“邮寄地址”,可通过地址间接修改外部对象3、引用传递的是别名绑定,可直接操作原对象二、比对对比维度值传递指针传递引用传递传递内容实参的副本&am… 2026/7/8 2:27:27
电玩城测评 3 种拳击机器人:海岸城实测,为什么有的只热闹一阵,有的能拉起 PK 复玩 电玩城老板看拳击机器人,第一眼通常会被“热闹”吸引:有人围着看,有人拿手机拍,孩子会喊,朋友会起哄。 但设备能不能长期跑起来,不能只看第一眼。很多新设备刚进场都热闹,真正拉开差距的是后面… 2026/7/8 2:25:27
ZYNQ XCZU27DR FreeRTOS TTC 定时器中断学习笔记 TTCTriple Timer Counter被称为三重定时器/计数器它是 PS 内部的一种硬件外设。一个 TTC 模块内部包含多个相互独立的定时器计数通道。每个通道都可以独立完成:周期定时;向上或向下计数;计数值匹配;溢出检测;产生中断&… 2026/7/8 2:25:27
第1篇:从“促销活动”的一堆 if-else 说起 第1篇:从“促销活动”的一堆 if-else 说起 摘要:电商促销的满减、打折、立减逻辑写在同一个方法里,导致代码臃肿、难以扩展。本文从真实痛点出发,揭示策略模式如何通过算法封装消除条件分支,并附上场景判断表。 本文是… 2026/7/8 2:25:27
AI4S不止分子药物:科研基础设施MedPeer打开全新增量空间 2026年全球AI4S融资热度持续走高,算力仿真、AI制药、新材料研发接连爆出大额融资,赛道热度空前。但纵观一级市场投资脉络,资本高度扎堆后端物质创制赛道,行业普遍陷入共识误区:AI4S价值落点,仅局限于研发新… 2026/7/8 2:21:26
BetterNCM安装器:高效管理网易云插件的最佳选择 BetterNCM安装器:高效管理网易云插件的最佳选择 【免费下载链接】BetterNCM-Installer 一键安装 Better 系软件 项目地址: https://gitcode.com/gh_mirrors/be/BetterNCM-Installer 还在为网易云音乐插件的繁琐安装流程而烦恼吗?BetterNCM安装器是… 2026/7/8 0:02:48
运动控制系统安全设置对比:ECI3808的3种限位保护与急停逻辑实现 运动控制系统安全机制深度解析:限位保护与急停逻辑的设计哲学在精密制造与自动化领域,运动控制系统的安全设计绝非简单的功能堆砌,而是一套融合了机械工程、电气原理和软件算法的防御体系。当一台数控机床以每分钟数万转的速度运转࿰… 2026/7/8 0:06:48
AI大模型应用开发:小白也能抓住的红利风口,收藏这篇入门指南! 文章指出,虽然微软等科技巨头在裁员,但英伟达等公司却在积极扩招AI相关人才,尤其是具身智能、仿真等领域。AI行业正在经历结构性调整,传统岗位被淘汰,而大模型应用开发等新岗位需求旺盛。对于想转行或学习AI的普通人来… 2026/7/8 0:10:49
6个月转型AI工程师:实战路径与核心技能 1. 项目概述:6个月转型AI工程师的可行性路径在2023年大模型技术爆发的背景下,AI工程师岗位需求同比增长217%(LinkedIn数据)。不同于传统算法工程师需要3-5年培养周期,现代AI工程师更侧重工程化落地能力。我在硅谷科技公… 2026/7/7 11:26:57
TPAFE0808与PIC18F87K22的多通道信号采集方案 1. 项目背景与核心需求在工业自动化、医疗设备和科研仪器等领域,多通道信号采集与系统监测是基础且关键的技术需求。传统方案往往面临通道数量不足、信号调理复杂、系统集成度低等问题。TPAFE0808作为一款8通道模拟前端芯片,与PIC18F87K22微控制器的组合… 2026/7/7 11:26:57
STC3115与PIC18LF26K80构建高精度电池管理系统 1. STC3115与PIC18LF26K80在电池管理系统中的核心价值在现代电子设备中,电池管理系统(BMS)的重要性不亚于设备的核心处理器。STC3115作为一款高精度电池电量监测IC,与PIC18LF26K80微控制器的组合,构成了一个既能精确监控又能智能管理的完整解… 2026/7/7 11:26:58