机器学习实战篇--TF-IDF实战--名著红楼梦的文本数据处理
目录
《红楼梦》文本分析实战:从分卷处理到关键词提取
一、项目背景引入
1. 项目背景
2. 数据集说明
3. 整体需求分析
二、数据分析:《红楼梦》文本分卷处理
1. 需求分析
2. 完整代码实现(带注释)
3. 代码分步解析
3.1 初始化参数
3.2 逐行处理文本(核心逻辑)
3.3 广告与空白行过滤
3.4 分卷文件创建与管理
3.5 内容写入与资源清理
4. 代码总结
三、关键词提取:基于分词的文本预处理
1. 需求分析
2. 完整代码实现(带注释)
3. 代码分步解析
3.1 收集分卷文件路径与内容
3.2 用DataFrame结构化管理数据
3.3 加载自定义资源提升分词效果
3.4 分词处理与停用词过滤
4. 代码总结
四、TF-IDF模拟:提取各卷核心关键词
1. 需求分析
2. 完整代码实现(带注释)
3. 代码分步解析
3.1 读取分词后的文本数据
3.2 计算TF-IDF矩阵
3.3 构建TF-IDF数据框
3.4 定义与应用关键词提取函数
3.5 打印结果
4. 代码总结
五、泛用性:代码的扩展与适配场景
1. 核心逻辑与可修改点
2. 典型应用场景
2.1 其他古典文学分析(如《三国演义》)
2.2 学术论文结构化解析
2.3 企业客服记录分析
3. 总结
《红楼梦》文本分析实战:从分卷处理到关键词提取
一、项目背景引入
1. 项目背景
在数字人文与文本挖掘技术快速发展的背景下,古典文学作品的自动化分析成为研究新趋势。《红楼梦》作为中国古典小说的巅峰之作,以其复杂的人物关系、细腻的情节描写和深厚的文化内涵,一直是文学研究的核心对象。但传统的人工分析方式存在效率低、主观性强、难以量化等问题,亟需通过技术手段实现结构化、自动化的文本解析。
本项目旨在通过编程工具对《红楼梦》全文进行系统化处理,从原始文本中提取有价值的信息(如分卷结构、核心关键词等),为文学研究者提供数据支持,帮助快速定位关键内容、梳理情节脉络、分析主题变化,实现"技术辅助文学研究"的目标。
2. 数据集说明
红楼梦.txt:
本项目使用的核心数据为《红楼梦》全文文本文件(红楼梦.txt
),包含小说完整内容(91万个字符)。由于文本来源为网络公开资源,存在以下特点:
-
包含天然分卷标记:文本中以"卷 第 X"(如"上卷 第一回""上卷 第二回""下卷 第二十回")作为分卷分隔符,可直接作为结构化处理的依据;
-
存在冗余信息:夹杂"手机电子书·大学生小说网"等转载平台的广告内容,需预处理去除;
-
格式特征:保留了原文的换行、空格等排版格式,处理时需兼顾内容提取与格式保留。
3. 整体需求分析
为实现"结构化解析《红楼梦》文本并提取核心信息"的目标,项目需完成以下核心任务:
-
文本清洗与分卷:过滤冗余广告内容,根据"卷 第 X"标记自动拆分全文为独立分卷文件,保留原文格式;
-
分词与预处理:对分卷文本进行精准分词,过滤无意义词汇(如"的""了"),加载专属词库识别小说中的人名、地名等专有名词;
-
关键词提取:通过TF-IDF算法量化词语在各卷中的重要性,提取每卷的核心关键词,反映各卷主题特征;
-
工具通用性:确保代码可扩展,通过简单修改适配其他文本(如其他古典小说、学术论文、企业文档等)的分析场景。
二、数据分析:《红楼梦》文本分卷处理
1. 需求分析
分卷处理是文本结构化的基础步骤,核心需求包括:
-
广告过滤:精准识别并去除包含"手机电子书·大学生小说网"的广告行,同时处理广告后的空白行(避免冗余空行进入分卷文件);
-
自动分卷:根据文本中"卷 第 X"的标记,自动创建独立分卷文件(如"01_卷 第一.txt"),文件名需包含分卷编号和标记,便于识别;
-
格式保留:写入分卷文件时保留原文的换行、空格等格式,维持文本原貌;
-
资源安全:确保文件操作过程中,前一卷文件在新卷创建前正确关闭,避免文件句柄泄露。
2. 完整代码实现(带注释)
import os # 用于文件路径处理和操作系统交互# 1. 初始化参数
file = open('红楼梦.txt', encoding='utf-8') # 打开源文件,指定utf-8编码避免乱码
flag = 0 # 标记是否已创建过分卷文件(0=未创建,1=已创建)
juan_file = None # 存储当前打开的分卷文件对象,初始化为None
i = 1 # 分卷编号,从1开始计数
skip_blank_lines = False # 标记是否跳过空白行(处理广告后的空行)# 2. 逐行处理文本
for line in file:stripped_line = line.strip() # 去除行首尾空白,用于判断标记和广告# 2.1 处理广告后的空白行if skip_blank_lines:if stripped_line == '': # 若为空白行,直接跳过continueelse: # 若遇到非空白行,关闭跳过模式skip_blank_lines = False# 2.2 过滤广告行if '手机电子书·大学生小说网' in stripped_line:skip_blank_lines = True # 开启跳过空白行模式,处理广告后的空白行continue # 跳过当前广告行# 2.3 识别分卷标记并创建新文件if '卷 第' in stripped_line:# 生成分卷文件名(格式:两位编号_卷标记.txt)juan_name = f"{i:02d}_{stripped_line}.txt"i += 1 # 编号自增# 构建分卷文件路径(保存在"分卷"文件夹下)path = os.path.join('分卷', juan_name)print(f"创建分卷文件:{path}") # 打印路径,便于查看进度# 关闭上一个分卷文件(若已创建)if flag == 1 and juan_file is not None:juan_file.close()# 创建并打开当前分卷文件(写入模式)juan_file = open(path, 'w', encoding='utf-8')flag = 1 # 更新标记为"已创建"continue # 跳过分卷标记行(不写入文件)# 2.4 写入内容到当前分卷文件if juan_file is not None:juan_file.write(line) # 写入原始行(保留格式)# 3. 清理资源:关闭所有文件
if juan_file is not None:juan_file.close() # 关闭最后一个分卷文件
file.close() # 关闭源文件
3. 代码分步解析
3.1 初始化参数
import os # 用于文件路径处理和操作系统交互
file = open('红楼梦.txt', encoding='utf-8') # 打开源文件,指定utf-8编码避免乱码
flag = 0 # 标记是否已创建过分卷文件(0=未创建,1=已创建)
juan_file = None # 存储当前打开的分卷文件对象,初始化为None
i = 1 # 分卷编号,从1开始计数
skip_blank_lines = False # 标记是否跳过空白行(处理广告后的空行)
-
os
模块:处理跨平台路径拼接,确保在Windows/macOS/Linux下均能正常生成文件路径; -
flag
与juan_file
:用于跟踪当前分卷文件状态,确保新卷创建前关闭旧卷; -
skip_blank_lines
:专门处理广告后的空白行,避免冗余空行写入分卷文件。
3.2 逐行处理文本(核心逻辑)
for line in file:stripped_line = line.strip() # 去除行首尾空白,用于判断标记和广告
遍历源文件每一行,通过strip()
处理后的数据用于判断是否为广告行或分卷标记行,原始line
用于保留格式写入分卷文件。
3.3 广告与空白行过滤
# 处理广告后的空白行
if skip_blank_lines:if stripped_line == '': # 若为空白行,直接跳过continueelse: # 若遇到非空白行,关闭跳过模式skip_blank_lines = False# 过滤广告行
if '手机电子书·大学生小说网' in stripped_line:skip_blank_lines = True # 开启跳过空白行模式,处理广告后的空白行continue # 跳过当前广告行
-
当检测到广告行时,开启
skip_blank_lines
模式,后续空白行将被连续跳过; -
直到遇到非空白行时,关闭跳过模式,恢复正常写入,确保广告及冗余空行被彻底过滤。
3.4 分卷文件创建与管理
if '卷 第' in stripped_line:# 生成分卷文件名(格式:两位编号_卷标记.txt)juan_name = f"{i:02d}_{stripped_line}.txt"i += 1 # 编号自增# 构建分卷文件路径(保存在"分卷"文件夹下)path = os.path.join('分卷', juan_name)print(f"创建分卷文件:{path}") # 打印路径,便于查看进度# 关闭上一个分卷文件(若已创建)if flag == 1 and juan_file is not None:juan_file.close()# 创建并打开当前分卷文件(写入模式)juan_file = open(path, 'w', encoding='utf-8')flag = 1 # 更新标记为"已创建"continue # 跳过分卷标记行(不写入文件)
-
文件名采用"两位编号+卷标记"格式(如"01_卷 第一.txt"),确保分卷按顺序排列;
-
通过
os.path.join
创建路径,自动适配不同系统的路径分隔符(如Windows的\`和macOS的
/`); -
每次创建新卷前关闭旧卷,避免文件资源泄露。
3.5 内容写入与资源清理
# 写入内容到当前分卷文件
if juan_file is not None:juan_file.write(line) # 写入原始行(保留格式)# 清理资源:关闭所有文件
if juan_file is not None:juan_file.close() # 关闭最后一个分卷文件
file.close() # 关闭源文件
-
用原始
line
写入内容,保留原文的换行、空格等格式; -
处理结束后强制关闭所有文件,确保资源释放。
4. 代码总结
本部分代码通过"广告过滤→分卷识别→文件管理→内容写入"的流程,实现了《红楼梦》文本的自动化分卷处理,既保证了内容的准确性(过滤冗余),又保留了文本原貌(格式保留),为后续的关键词提取奠定了结构化数据基础。
详细流程总结概括:
1.遇到包含 "手机电子书・大学生小说网" 的广告行,跳过该行并忽略后续的空白行
2. 遇到包含 "卷 第" 的分卷标记行,创建新的分卷文件(关闭上一个分卷文件)
3.其他内容行则写入当前打开的分卷文件
- 打开《红楼梦》源文件
- 逐行读取并处理内容:
- 处理完成后,关闭所有打开的文件
代码的特点和作用:
- 自动分卷:根据文本中的 "卷 第 X" 标记自动创建多个分卷文件
- 广告过滤:去除包含特定广告内容的行及其后的空白行
- 格式保留:写入文件时使用原始行内容,保留了原文的格式和换行
- 路径处理:使用 os.path.join 处理路径,确保在不同操作系统上都能正常工作
- 安全处理:确保所有打开的文件最终都会被关闭,避免资源泄露
三、关键词提取:基于分词的文本预处理
1. 需求分析
分词是文本从"原始字符串"到"结构化词语"的关键转换步骤,核心需求包括:
-
数据收集:批量读取"分卷"文件夹下的所有分卷文件,获取文件路径与内容,便于关联分析;
-
精准分词:针对《红楼梦》中的专有名词(如人名"贾宝玉"、地名"大观园"),通过加载专属词库提升分词准确性;
-
噪音过滤:去除无实际意义的停用词(如"的""了""在")和空字符串,减少分析干扰;
-
结果保存:将每卷的分词结果按顺序保存,保持分卷与分词结果的对应关系,为后续TF-IDF分析提供输入。
2. 完整代码实现(带注释)
import pandas as pd # 用于数据结构化管理
import os # 用于遍历文件夹和文件路径处理
import jieba # 中文分词工具# 1. 收集分卷文件路径与内容
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', encoding='utf-8') as f: # 用with语句自动管理文件关闭fileContent = f.read()fileContents.append(fileContent)# 2. 用DataFrame结构化管理数据(路径+内容)
corpos = pd.DataFrame({'filePath': filePaths,'fileContent': fileContents
})# 3. 加载自定义资源提升分词效果
jieba.load_userdict("红楼梦词库.txt") # 加载专属词库(含人名、地名等)# 读取停用词表(过滤无意义词汇)
stopwords = pd.read_csv("stopwordsCN.txt",encoding='utf8',engine='python',index_col=False
)
stopwords_list = stopwords['stopword'].tolist() # 转换为列表便于查询# 4. 分词处理与停用词过滤
with open('分词后汇总.txt', 'w', encoding='utf-8') as file_to_jieba:# 遍历每一卷内容for index, row in corpos.iterrows():juan_ci = '' # 存储当前卷的分词结果fileContent = row['fileContent'] # 获取当前卷文本# 分词(精确模式)segs = jieba.cut(fileContent, cut_all=False)# 过滤停用词和空字符串for seg in segs:if seg not in stopwords_list and len(seg.strip()) > 0:juan_ci += seg + ' ' # 用空格分隔词语# 写入当前卷的分词结果(每行对应一卷)file_to_jieba.write(juan_ci + '\n')
3. 代码分步解析
3.1 收集分卷文件路径与内容
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', encoding='utf-8') as f: # 用with语句自动管理文件关闭fileContent = f.read()fileContents.append(fileContent)
-
os.walk
:递归遍历"分卷"文件夹,获取所有分卷文件的路径; -
with
语句:自动处理文件关闭,避免手动关闭遗漏导致的资源泄露; -
最终
filePaths
与fileContents
一一对应,确保后续可通过路径追溯原始文件。
3.2 用DataFrame结构化管理数据
corpos = pd.DataFrame({'filePath': filePaths,'fileContent': fileContents
})
通过pandas.DataFrame
将分散的"文件路径"和"内容"关联为表格数据,便于按行(分卷)批量处理,支持索引、筛选等操作(如后续需单独处理某几卷时更便捷)。
3.3 加载自定义资源提升分词效果
jieba.load_userdict("红楼梦词库.txt") # 加载专属词库(含人名、地名等)# 读取停用词表(过滤无意义词汇)
stopwords = pd.read_csv("stopwordsCN.txt",encoding='utf8',engine='python',index_col=False
)
stopwords_list = stopwords['stopword'].tolist() # 转换为列表便于查询
-
专属词库:
红楼梦词库.txt
包含小说中高频出现的专有名词(如"林黛玉""怡红院"),避免被jieba误拆(如"林黛玉"不拆分为"林""黛玉"); -
停用词表:
stopwordsCN.txt
包含中文中无实际意义的虚词(如"的""了"),转换为列表后可通过in
快速判断是否为停用词,提升过滤效率。
3.4 分词处理与停用词过滤
with open('分词后汇总.txt', 'w', encoding='utf-8') as file_to_jieba:# 遍历每一卷内容for index, row in corpos.iterrows():juan_ci = '' # 存储当前卷的分词结果fileContent = row['fileContent'] # 获取当前卷文本# 分词(精确模式)segs = jieba.cut(fileContent, cut_all=False)# 过滤停用词和空字符串for seg in segs:if seg not in stopwords_list and len(seg.strip()) > 0:juan_ci += seg + ' ' # 用空格分隔词语# 写入当前卷的分词结果(每行对应一卷)file_to_jieba.write(juan_ci + '\n')
-
jieba.cut
:采用精确模式(cut_all=False
)对文本分词,平衡分词精度与效率; -
过滤逻辑:仅保留"非停用词"且"非空字符串"的词语,确保结果无噪音;
-
结果保存:按分卷顺序写入
分词后汇总.txt
,每行对应一卷的分词结果,为后续TF-IDF分析提供标准化输入。
4. 代码总结
本部分代码通过"数据收集→结构化管理→分词优化→过滤保存"的流程,将分卷文本转换为干净的词语集合,既解决了中文分词的专有名词识别问题,又去除了无意义词汇,为后续的关键词提取(如TF-IDF)提供了高质量的输入数据。
代码详细流程总结:
- 收集数据:遍历 "分卷" 文件夹下的所有文件,获取它们的路径和内容
- 组织数据:用 DataFrame 将文件路径和内容关联起来,便于管理
- 准备工具:加载专业词库提升分词准确性,加载停用词表用于过滤无意义词汇
- 处理数据:对每一卷内容进行分词,过滤掉停用词和空字符串
- 保存结果:将处理后的分词结果写入 "分词后汇总.txt" 文件
代码的关键作用:
- 将原始文本转换为结构化的词语集合,为后续的文本分析(如词频统计、情感分析等)做准备
- 通过专业词库提高《红楼梦》这类特定文本的分词准确性
- 过滤停用词减少噪音,让分析更聚焦于有实际意义的词汇
- 保持卷与卷之间的结构,便于后续按卷进行对比分析
四、TF-IDF模拟:提取各卷核心关键词
1. 需求分析
关键词提取是文本主题分析的核心步骤,针对《红楼梦》分卷文本,需求包括:
-
量化词语重要性:通过TF-IDF算法综合考虑"词在当前卷的出现频率(TF)"和"词在所有卷的出现频率(IDF)",评估词语对单卷的代表性;
-
提取核心关键词:为每卷筛选TF-IDF值最高的前N个词语(如前10),反映该卷的主题特色(如某卷高频出现"葬花""黛玉",则可能围绕黛玉葬花情节);
-
结果可视化:以清晰的格式输出各卷关键词及其TF-IDF值,便于直观对比不同卷的主题差异。
2. 完整代码实现(带注释)
import pandas as pd # 用于数据结构化展示
from sklearn.feature_extraction.text import TfidfVectorizer # TF-IDF工具# 1. 读取分词后的文本数据(输入:每行为一卷的分词结果)
with open('分词后汇总.txt', 'r', encoding='utf-8') as infile:corpus = infile.readlines() # corpus为列表,每个元素对应一卷的分词文本# 2. 初始化TF-IDF向量器并计算矩阵
vectorizer = TfidfVectorizer() # 初始化向量器(默认参数:过滤停用词、按词频加权)
tfidf_matrix = vectorizer.fit_transform(corpus) # 拟合语料并转换为TF-IDF矩阵# 获取词汇表(所有不重复词语)
wordlist = vectorizer.get_feature_names_out() # 较新版本sklearn推荐使用该方法# 3. 构建TF-IDF数据框(词语为行,分卷为列)
tfidf_df = pd.DataFrame(tfidf_matrix.T.todense(), # 矩阵转置(行=词语,列=分卷)并转为稠密矩阵index=wordlist # 行索引设为词语
)# 4. 定义提取单卷Top N关键词的函数
def get_top_keywords(col, top_n=10):"""提取某一卷(列)中TF-IDF值最高的前N个词语"""non_zero_words = col[col > 0] # 筛选在该卷中出现过的词语(TF-IDF>0)return non_zero_words.nlargest(top_n).items() # 按值降序取前N个# 5. 提取所有卷的关键词并打印结果
top_keywords_result = tfidf_df.apply(lambda col: get_top_keywords(col, top_n=10), # 应用函数,每卷取前10关键词axis=0 # 按列(分卷)应用
)# 遍历结果并打印(分卷编号从1开始)
for doc_idx, top_items in enumerate(top_keywords_result, start=1):print(f"第{doc_idx}卷的核心关键词:{list(top_items)[:10]}")
3. 代码分步解析
3.1 读取分词后的文本数据
with open('分词后汇总.txt', 'r', encoding='utf-8') as infile:corpus = infile.readlines() # corpus为列表,每个元素对应一卷的分词文本
-
corpus
(语料库)是列表类型,每个元素为一卷的分词结果(词语用空格分隔),与分卷顺序严格对应; -
用
with
语句读取文件,确保资源安全释放。
3.2 计算TF-IDF矩阵
vectorizer = TfidfVectorizer() # 初始化向量器(默认参数:过滤停用词、按词频加权)
tfidf_matrix = vectorizer.fit_transform(corpus) # 拟合语料并转换为TF-IDF矩阵# 获取词汇表(所有不重复词语)
wordlist = vectorizer.get_feature_names_out() # 较新版本sklearn推荐使用该方法
-
TfidfVectorizer
:自动完成"词汇表构建→词频统计→IDF计算→TF-IDF值转换"的全流程; -
tfidf_matrix
:形状为(分卷数,词汇数)的稀疏矩阵,每个元素[i,j]
表示"第i卷中第j个词的TF-IDF值"; -
wordlist
:包含所有不重复词语的列表,顺序与矩阵列索引对应,用于后续结果标注。
3.3 构建TF-IDF数据框
tfidf_df = pd.DataFrame(tfidf_matrix.T.todense(), # 矩阵转置(行=词语,列=分卷)并转为稠密矩阵index=wordlist # 行索引设为词语
)
-
矩阵转置后,数据框形状为(词汇数,分卷数),行索引为词语,列索引为分卷编号,便于按"词语→分卷"查看TF-IDF值;
-
todense()
:将稀疏矩阵转为稠密矩阵(适合小数据量),方便后续按列筛选。
3.4 定义与应用关键词提取函数
def get_top_keywords(col, top_n=10):"""提取某一卷(列)中TF-IDF值最高的前N个词语"""non_zero_words = col[col > 0] # 筛选在该卷中出现过的词语(TF-IDF>0)return non_zero_words.nlargest(top_n).items() # 按值降序取前N个# 提取所有卷的关键词
top_keywords_result = tfidf_df.apply(lambda col: get_top_keywords(col, top_n=10), # 应用函数,每卷取前10关键词axis=0 # 按列(分卷)应用
)
-
get_top_keywords
函数:仅关注在当前卷中出现过的词语(col>0
),按TF-IDF值降序取前10,确保结果有实际意义; -
apply
方法:批量应用函数到每一列(分卷),高效获取所有卷的关键词。
3.5 打印结果
for doc_idx, top_items in enumerate(top_keywords_result, start=1):print(f"第{doc_idx}卷的核心关键词:{list(top_items)[:10]}")
-
以"第X卷的核心关键词:[(词1, 值1), (词2, 值2), ...]"的格式输出,直观展示各卷主题;
-
enumerate(..., start=1)
确保分卷编号从1开始,与实际分卷顺序一致。
4. 代码总结
本部分代码通过TF-IDF算法量化了词语对各卷的重要性,成功提取出每卷的核心关键词。这些关键词不仅能反映单卷的主题(如涉及"葬花"的卷以"黛玉""葬花"为核心),还能通过卷间对比分析情节发展(如某人物关键词从高频到低频的变化可能暗示角色淡出),为《红楼梦》的主题研究提供了量化依据。
代码详细流程总结:
- 数据输入:读取分词后的文本,构建语料库
- 特征提取:使用 TF-IDF 算法将文本转换为数值特征矩阵
- 数据整理:将 TF-IDF 矩阵转换为 DataFrame,方便按词语和文档查看
- 关键词提取:定义函数并应用到每个文档,提取 TF-IDF 值最高的前 10 个词
- 结果输出:按卷打印核心关键词及其 TF-IDF 值
关键概念解释:
- TF-IDF 值:综合考虑词语在当前文档中的出现频率(TF)和在所有文档中的出现频率(IDF),值越高表示该词在当前文档中越重要、越有代表性
- 核心关键词:TF-IDF 值高的词语,通常是该卷中出现较频繁且在其他卷中出现较少的特色词汇,能反映该卷的主要内容
五、泛用性:代码的扩展与适配场景
1. 核心逻辑与可修改点
项目整体流程可概括为:
原始文本收集→分卷/分块处理→分词与过滤→TF-IDF关键词提取→结果输出
核心可修改点(适配不同场景):
-
文本来源:修改输入路径(如从"红楼梦.txt"改为"会议纪要文件夹");
-
分块规则:调整分块标记(如从"卷 第 X"改为"章节X""日期X");
-
分词资源:替换专属词库(如"红楼梦词库.txt"→"医学词库.txt")和停用词表;
-
算法参数:调整TF-IDF的
min_df
(最小文档频率)、top_n
(关键词数量)等。
2. 典型应用场景
2.1 其他古典文学分析(如《三国演义》)
-
修改点:分块标记改为"第X回";词库替换为"三国人名地名库"(如"诸葛亮""赤壁");
-
作用:提取每回核心战役、人物关键词,分析军事策略或人物影响力变化。
2.2 学术论文结构化解析
-
修改点:分块规则按"摘要""引言""实验结果"等标题拆分;停用词添加学术虚词(如"研究表明");
-
作用:快速提取各部分核心术语(如"实验方法:随机森林""结论:准确率92%),生成论文摘要。
2.3 企业客服记录分析
-
修改点:文本来源为"客服对话.txt";分块按"对话ID"拆分;词库添加产品术语(如"APP闪退""退款");
-
作用:提取高频问题关键词(如"登录失败"出现30次),定位客户痛点。
3. 总结
本项目代码并非仅适用于《红楼梦》,而是一套"文本结构化处理+关键词提取"的通用工具。通过简单修改分块规则、分词资源和输入来源,可快速适配文学研究、学术分析、企业数据分析等多场景,核心价值是降低长文本处理成本,实现关键信息的自动化提取与量化分析。