当前位置: 首页 > news >正文

机器学习案例——《红楼梦》文本分析与关键词提取

红楼梦》作为中国古典文学巅峰之作,其丰富的内涵和复杂的结构一直是文学研究和文本分析的重要对象。本文将详细介绍如何运用Python技术对《红楼梦》进行系统化的文本分析,包括分卷处理、分词技术、停用词过滤以及TF-IDF关键词提取等关键步骤。

一、文本预处理:分卷处理

1.1 分卷逻辑实现

import os# 初始化计数器
b = 0# 打开红楼梦全文文件
with open('红楼梦.txt', 'r', encoding='utf-8') as file:for line in file:# 检查是否为分卷标题行if '卷 第' in line:# 创建分卷文件名name = line.strip() + '.txt'# 构建分卷文件路径path = os.path.join('.\\红楼梦\\分卷', name)print("正在创建分卷文件:", path)# 创建新分卷文件afile = open(path, 'w', encoding='utf-8')b = 1  # 标记进入正文部分continue# 跳过非正文内容if '手机电子书' in line or b == 0:continueelse:# 将正文内容写入分卷文件afile.write(line)

分卷内容如下

1.2 分卷语料库构建

import os
import pandas as pd# 初始化存储路径和内容的列表
paths = []
contents = []for (dirpath, dirnames, filenames) in os.walk('.\红楼梦\分卷'):for filename in filenames:# 构建完整文件路径filepath = os.path.join(dirpath, filename)paths.append(filepath)# 读取文件内容with open(filepath, 'r', encoding='utf-8') as f:contents.append(f.read())# 创建语料库DataFrame
corpus = pd.DataFrame({'filepath': paths,  # 文件路径列'content': contents  # 文件内容列

该部分代码:

  • 使用os.walk遍历分卷目录
  • 将每个分卷文件路径和内容存入DataFrame
  • 构建结构化语料库,便于后续分析

二、中文分词处理

1. 自定义词典与分词

import jieba# 加载自定义词典
jieba.load_userdict(r'红楼梦词库.txt')# 读取停用词表
stop_dict = pd.read_csv('StopwordsCN.txt',encoding='utf-8',engine='python',index_col=False)# 创建分词结果文件
with open('红楼梦\分词汇总.txt','w',encoding='utf-8') as file_to_jieba:for index, row in corpus.iterrows():space = ''  # 初始化分词结果字符串filepath = row['filepath']  # 获取文件路径content = row['content']  # 获取文件内容# 使用jieba进行分词seg_list = jieba.cut(content)# 过滤停用词和非空词for word in seg_list:if (word not in stop_dict.stopword.values and len(word.strip()) > 0):space += word + ' '  # 用空格分隔词语# 写入分词结果file_to_jieba.write(space + '\n')

  1. ​自定义词典​​:加载"红楼梦词库.txt"提高专有名词识别准确率  
  2. ​停用词过滤​​:去除无实际意义的虚词和常见词
  3. ​分词优化​​:确保每个有效词语用空格分隔

三、TF-IDF关键词提取

3.1 TF-IDF原理简介

F-IDF(词频-逆文档频率)通过两个维度的计算评估词语重要性:

  1. TF(词频):词语在当前文档中出现的频率

    • 计算公式:TF(t,d) = (t在d中出现的次数)/(d中所有词语的总数)
  2. IDF(逆文档频率):衡量词语在整个语料库中的普遍重要性

    • 计算公式:IDF(t) = log(总文档数/(包含t的文档数+1))
  3. TF-IDF值:TF × IDF

    • 值越高表示词语对当前文档越重要

 实现代码解析

from sklearn.feature_extraction.text import TfidfVectorizer
import pandas as pd# 读取分词结果
with open('./红楼梦/分词汇总.txt', 'r', encoding='utf-8') as file:content = file.readlines()# 初始化TF-IDF向量器
vectorizer = TfidfVectorizer()# 计算TF-IDF矩阵
tfidf = vectorizer.fit_transform(content)# 获取特征词列表
vocabulary = vectorizer.get_feature_names()# 创建TF-IDF数据框
df = pd.DataFrame(data=tfidf.T.todense(),  # 转置并转换为密集矩阵index=vocabulary)  # 以词语作为行索引# 跳过前8行(可能是标点符号等)
df = df.iloc[8:]# 对每回进行TF-IDF排序并输出前10个关键词
for i in df.columns:# 按降序排序results = df.sort_values(by=i, ascending=False)# 输出当前回数和前10个关键词print(f'第{i+1}回:\n', results.iloc[:10,i])

运行上述代码后,我们将得到每个分卷的TF-IDF权重最高的前10个关键词。这些关键词可以反映:

  1. ​章节主题​​:高频关键词往往指向该章节的核心内容
  2. ​人物关系​​:主要人物的出现频率变化

  3. ​情节发展​​:关键事件和场景的分布

例如,某章节的关键词可能是"宝玉"、"黛玉"、"诗社"等,反映了该章节的主要内容。

http://www.lryc.cn/news/622188.html

相关文章:

  • 103、【OS】【Nuttx】【周边】文档构建渲染:Sphinx 配置文件
  • RabbitMQ核心架构与应用
  • Nginx性能优化与安全配置:打造高性能Web服务器
  • 模型驱动与分布式建模:技术深度与实战落地指南
  • 【慕伏白】CTFHub 技能树学习笔记 -- Web 前置技能之HTTP协议
  • 【Docker】搭建一个高性能的分布式对象存储服务 - MinIO
  • LeetCode热题100--146.LRU缓存--中等
  • 附046.集群管理-EFK日志解决方案-Filebeat
  • 20250815在荣品RD-RK3588-MID开发板的Android13下点卡迪的7寸LCD屏
  • 商城开发中,有哪些需要关注的网络安全问题
  • Android按电源键关机弹窗的删除
  • 紫金桥RealSCADA:国产工业大脑,智造安全基石
  • 金融业务安全增强方案:国密SM4/SM3加密+硬件加密机HSM+动态密钥管理+ShardingSphere加密
  • Redisson分布式锁实战指南:原理、用法与项目案例
  • 第五天~提取Arxml中描述信息New_CanCluster--Expert
  • 神经网络 小土堆pytorch记录
  • 关系型数据库核心组件:视图、函数与存储引擎详解
  • Vue3从入门到精通: 4.4 复杂状态管理模式与架构设计
  • Redis 05 Redis cluster
  • 《Cocos游戏开发入门一本通》第一章
  • 後端開發Python篇
  • windows下hashcat使用gpu破解execl打开密码
  • C++ 优选算法 力扣 1004. 最大连续1的个数 II 滑动窗口 (同向双指针)优化 每日一题 详细题解
  • C#WPF实战出真汁06--【系统设置】--餐桌类型设置
  • Transformer实战(4)——从零开始构建Transformer
  • 如何解决pip安装报错ModuleNotFoundError: No module named ‘fairseq’问题
  • AI优质信息源汇总:含X账号,Newsletter,播客,App
  • [优选算法专题二滑动窗口——长度最小的子数组]
  • 杭州网站建设,外贸独立站搭建攻略分享
  • 应急救援智能接处警系统——科技赋能应急,筑牢安全防线