1. 项目概述:用Python量化解读《红楼梦》
作为古典文学爱好者兼Python开发者,我一直想探索技术工具与传统文本分析的结合点。《红楼梦》这部包含近百万字的巨著,仅靠人工阅读很难系统把握其人物关系、情节脉络和语言特征。通过Python实现自动化文本处理,我们能够:
- 将全书120回按卷拆分,建立结构化数据集
- 采用TF-IDF算法量化各卷核心词汇
- 通过关键词分布透视情节发展与人物关系
- 为文学研究提供数据支撑的客观视角
这个项目特别适合:
- 文学专业研究者需要量化分析工具
- Python开发者想实践文本分析技术
- 跨领域学习者探索文理结合的可能性
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 核心工具与原理解析
2.1 技术栈选型考量
选择jieba+sklearn组合主要基于:
- jieba分词:专为中文优化的分词引擎,支持自定义词典(关键点:古典文学包含大量现代汉语不常用的专有名词)
- scikit-learn:提供成熟的TF-IDF实现,且与pandas数据结构无缝衔接
- pandas:处理分卷文本的元数据管理(如卷号与内容的映射关系)
注意:古典文本分析必须加载自定义词库。我们准备的"红楼梦词库.txt"包含587个专属词汇,如"蘅芜苑""癞头和尚"等,避免人物称谓被错误拆分。
2.2 TF-IDF算法深度解读
TF-IDF的核心计算公式:
code复制TF-IDF = 词频(TF) × 逆文档频率(IDF)
其中:
- 词频(TF):某词在当前文档的出现次数 ÷ 文档总词数
- 逆文档频率(IDF):log(总文档数 ÷ 包含该词的文档数)
以"宝玉"为例:
- 在某卷中出现50次,该卷共5000词 → TF=50/5000=0.01
- 全书120卷中90卷提到"宝玉" → IDF=log(120/90)≈0.117
- TF-IDF值=0.01×0.117=0.00117
这种计算方式能有效:
- 提升专属词汇权重(如仅某卷出现的"栊翠庵")
- 降低高频但无区分度的词汇(如"众人""说道")
3. 完整实现流程
3.1 文本预处理实战
文件拆分关键代码解析
python复制if '卷 第' in line: # 分卷标识检测
