本项目以'文本结构化→特征量化→结果分析'为核心逻辑,先将非结构化的全文 txt 拆分为结构化章节文件,再通过分词和 TF-IDF 算法实现词汇重要性量化,可快速适配其他长篇文本的分析需求。
关键技术点包括:正则匹配定位章节、jieba 分词适配古典文学、TF-IDF 算法量化词汇重要性。
一、技术栈准备
本次实战所需的核心库:
- 基础库:
os(文件/路径处理)、re(正则匹配)、pandas(数据结构化); - 中文处理:
jieba(中文分词),支持自定义词库; - 算法库:
sklearn.feature_extraction.text.TfidfVectorizer(TF-IDF 特征提取)。
二、实战步骤:从文本拆分到关键词提取
(一)步骤 1:拆分《红楼梦》为 120 个章节文件
import os
import re
import pandas as pd
# ===================== 核心优化:适配文本格式 + 解决报错 =====================
# 1. 确保保存目录存在(避免路径不存在报错)
output_dir = r'.\红楼梦\分卷 1'
os.makedirs(output_dir, exist_ok=True)
# 2. 打开源文件(使用 with 语句自动关闭,更安全)
with open(r'.\红楼梦\红楼梦.txt', encoding='utf-8') as file:
flag = 0 # 用来标记当前是不是在第一次保存文件
juan_file = None # 初始化文件对象,避免未定义报错
# 定义:清理 Windows 非法文件名字符(解决 OSError 报错)
def clean_filename(filename):
illegal_chars = r'[\\/:*?"<>|,。?!;:"''《》()()【】]'
clean_name = re.sub(illegal_chars, '', filename)
return clean_name[:50] + '.txt' # 限制文件名长度,避免超长
# 定义:精准匹配'卷 + 回'标题(适配文本中'上卷 第一回 XXX'格式)
chapter_pattern = re.compile(r'^[ \s]*([上下]卷\s+第 [一二三四五六七八九十百零]+回.*)$', re.MULTILINE)
line file:
line_strip = line.strip()
= chapter_pattern.(line_strip)
:
juan_title = .group().strip()
juan_name = clean_filename(juan_title)
path = os.path.join(output_dir, juan_name)
()
flag == :
juan_file:
juan_file.close()
juan_file = (path, , encoding=)
juan_file.write(line)
flag =
:
juan_file.close()
juan_file = (path, , encoding=)
juan_file.write(line)
juan_file :
juan_file.write(line)
juan_file:
juan_file.close()
()



