本文將詳細介紹如何使用Python和機器學習技術對《紅樓夢》進行深入的文本分析和處理,包括文本分卷、分詞、停用詞處理、TF-IDF特征提取以及文本可視化等關鍵技術。
一、項目概述
本項目的目標是對中國古典文學名著《紅樓夢》進行全面的自動化處理和分析,主要包括以下幾個核心環節:
??文本預處理??:將完整文本按章節自動分割
??分詞處理??:使用中文分詞技術處理古典文學文本
??特征提取??:應用TF-IDF算法提取文本關鍵特征
??可視化分析??:對分析結果進行直觀展示
??主題建模??:探索文本的潛在主題結構
二、關鍵技術介紹
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)
??技術要點解析??:
??分卷標記識別??:利用"卷 第"作為章節分割的標識符,這是處理古典文學文本的特殊考慮
??動態文件創建??:根據檢測到的分卷標記動態創建新文件
??上下文管理??:使用
with
語句確保文件操作后自動關閉,避免資源泄露??編碼處理??:明確指定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:正在遍歷的目錄路徑:
??遞歸目錄遍歷??:使用
os.walk
全面掃描指定目錄及其子目錄??路徑處理??:
os.path.join
確保跨平臺路徑兼容性
dirs :當前目錄下的所有子目錄名稱列表
files:當前目錄下的所有非目錄文件名稱列表? files = ['第一回.txt', '前言.txt', '注釋.txt']
??數據結構化??:將文件路徑和內容組織為Pandas DataFrame,便于后續分析
??內存管理??:逐文件讀取,避免大文件內存問題
??擴展應用??:
可添加文件元信息(如文件大小、修改時間等)
實現增量讀取,處理超大型文本
添加文本預處理(如去除空白字符、標點符號等)
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. 技術挑戰
古典文學與現代漢語的差異帶來的分詞挑戰
專有名詞(如人物別名)的識別問題
詩詞等特殊文體的處理
3. 未來方向
結合人物關系網絡分析
情感分析追蹤情節情緒變化
不同版本的比較研究
與其他古典名著的對比分析
通過本項目,我們展示了如何將現代文本挖掘技術應用于古典文學研究,為文學研究提供了量化分析的新視角。這種跨學科方法不僅適用于《紅樓夢》,也可推廣到其他文學作品的數字化研究。