机器学习——TF-IDF实战(红楼梦数据处理)

红楼梦文本数据

有上图可知,我们的文本中存在电子书.......,章节内容开始......,和一些网址广告,所以我们对他们进行相应处理

将红楼梦 根据卷名 分隔成 卷文件

以下代码的主要功能是将《红楼梦》的文本文件按照 "卷 第 X" 的标记进行分卷处理,生成多个分卷文件,并过滤掉包含特定广告内容的行。下面将逐行详细解释这段代码的功能和作用:

python 复制代码
for line in file:   #开始遍历整个红楼梦
    if '卷 第' in line:   #找到标题
        juan_name = line.strip() +'.txt'
        path = os.path.join('.\\红楼梦\\分卷' , juan_name)#构建一个完整的路径
        print(path)
        if flag == 0:       #判断是否  是第1次读取到 卷 第
            juan_file = open(path,'w',encoding='utf-8')  #创建第1个卷文件
            flag = 1
        else:               #判断是否 不是第1次读取到 卷 第
            juan_file.close()   #关闭第1次及 上一次的文件对象
            juan_file = open(path,'w',encoding='utf-8')  #创建一个新的 卷文件
        continue
    juan_file.write(line)
juan_file.close()

注释:

os 是python标准库,不需要安装,是一个关于操作系统的库

flag=0,用来标记当前是不是在第一次保存文件,如果没有的话,下一行代码中的'w',会创建一个文本并写入

运行结果:

对每个卷进行分词,并删除包含停用词的内容

任务:

a、遍历所有卷的内容,并添加到内存中

python 复制代码
import pandas as pd #数据预处理的库
import os
filePaths = []#保存文件的路径
fileContents = []#保存文件路径对应的内容
for root, dirs, files in os.walk(r".\红楼梦\分卷"):  # os.walk是直接对文件夹进行遍历  #os.listdir()遍历分卷中的所有文件
    for name in files:
        filePath = os.path.join(root, name)     #获取每个卷文件的路径
        print(filePath)
        filePaths.append(filePath)              #卷文件路径添加到列表filePaths中
        f = open(filePath, 'r', encoding='utf-8')
        fileContent = f.read()  #读取每一卷中的文件内容
        f.close()
        fileContents.append(fileContent)    #将每一卷的文件内容添加到列表fileContents
corpos = pd.DataFrame({     #将文件路径及文件内容添加为DataFrame框架中
    'filePath': filePaths,
    'fileContent': fileContents})
print(corpos)

注释:os.walk是直接对文件夹进行遍历 #os.listdir()遍历分卷中的所有文件

b、将词库添加到jieba库中(注:jieba不一定能识别出所有的词,需要手动添加词库)

如下图所示,导入红楼梦的专属词库

python 复制代码
import jieba
jieba.load_userdict(r".\红楼梦\红楼梦词库.txt") #导入分词库,把红楼梦专属的单词添加到jieba词库中。

c、读取停用词(删除无用的关键词)

如上图所示的一些图会对我们分词有影响,所以需要删除这些

python 复制代码
#导入停用词库  ,把无关的词提出。
stopwords = pd.read_csv(r"./红楼梦分析/StopwordsCN.txt",
encoding='utf8', engine='python',index_col=False)  #engine读取文件时的解析引擎
  • stopwords 为停用词表,用于过滤"的"、"了"等无实际意义的词。

d、对每个卷内容进行分词,将分词进行比较,删除停用词

python 复制代码
# # '''进行分词,并与停用词表进行对比删除'''
file_to_jieba = open(r'./红楼梦/分词后汇总.txt','w',encoding='utf-8')#创建一个新文本
for index, row in corpos.iterrows():    #iterrows遍历行数据
    juan_ci = ''  #空的字符串
    filePath = row['filePath']
    fileContent = row['fileContent']
    segs = jieba.cut(fileContent)       #对文本内容进行分词,返回一个可遍历的迭代器
    for seg in segs:        #遍历每一个词
        if seg not in stopwords.stopword.values and len(seg.strip())>0 :#剔除停用词和字符为0的内容
            juan_ci += seg+' '      #juanci = '手机 电子书 '
    file_to_jieba.write(juan_ci+'\n')
file_to_jieba.close()

e、将所有分词后的内容写入到分词后汇总.txt

运行结果:

最终生成的分词文件每行对应一回,词语之间以空格分隔

计算TF-IDF值

python 复制代码
from sklearn.feature_extraction.text import TfidfVectorizer
import pandas as pd

inFile = open(r".\红楼梦\分词后汇总.txt", 'r',encoding='utf-8')
corpus = inFile.readlines()#返回一个列表,列表一个元素就是一行内容,一行内容一篇分词后的文章

vectorizer = TfidfVectorizer()        #类,转为TF-IDF的向量器
tfidf = vectorizer.fit_transform(corpus)          #传入数据,返回包含TF-IDF的向量值
wordlist = vectorizer.get_feature_names()    #获取特征名称,所有的词

df = pd.DataFrame(tfidf.T.todense(), index=wordlist)#tfidf.T.todense()恢复为稀疏矩阵

for i in range(len(corpus)):#排序,将重要的关键词排序在最前面
    featurelist = df.iloc[:,i].to_list()         #通过索引号获取第i列的内容并转换为列表

    resdict = {}        #排序以及看输出结果对不对
    for j in range(0, len(wordlist)):
        resdict[wordlist[j]] = featurelist[j]  #[('贾宝玉',0.223),()]
    resdict = sorted(resdict.items(), key=lambda x: x[1], reverse=True)#字典的键值对,元组数据类型返回
    print('第{}回的核心关键词:'.format(i+1),resdict[0:10])

注释:sorted(resdict.items(), key=lambda x: x[1], reverse=True) 按值降序排序

运行结果:

输出结果如上图所示,可以反映该回的核心内容与人物。

该案例应用场景

​​文学/历史文本分析​​

修改点:分块规则按"回目""章节标题"拆分(如《三国演义》《史记》)

补充词库添加古代人名、地名、官职(如"丞相""节度使")。

作用:提取每章节核心人物、事件关键词,分析情节发展脉络(如"某章节关键词以'战争''计谋'为主,反映军事主题")。

​​学术论文/报告整理​​

修改点:分块规则按"摘要""引言""实验部分"等标题拆分;停用词表添加学术通用虚词(如"研究表明""综上所述")。

作用:快速提取各部分核心术语(如实验方法、结论关键词),生成论文结构摘要。

​​企业文档/客服记录分析​​

修改点:文本来源读取"客服对话记录""会议纪要"文件夹;分块规则按"日期""对话ID"拆分单条记录;补充词库添加企业产品名、行业术语(如"APP闪退""退款流程")。

作用:提取高频问题关键词(如"登录失败""物流延迟"),定位客户需求或业务痛点。

​​社交媒体/舆情分析​​

修改点:文本来源读取"微博评论""论坛帖子"文本文件;停用词表添加网络流行虚词(如"哈哈哈""绝了")。

作用:按时间段或话题分块,提取热点关键词(如某事件的讨论焦点),辅助舆情监控。

相关推荐
2401_894828123 小时前
从原理到实战:随机森林算法全解析(附 Python 完整代码)
开发语言·python·算法·随机森林
B站计算机毕业设计超人3 小时前
计算机毕业设计Python知识图谱中华古诗词可视化 古诗词情感分析 古诗词智能问答系统 AI大模型自动写诗 大数据毕业设计(源码+LW文档+PPT+讲解)
大数据·人工智能·hadoop·python·机器学习·知识图谱·课程设计
玄同7653 小时前
Python「焚诀」:吞噬所有语法糖的终极修炼手册
开发语言·数据库·人工智能·python·postgresql·自然语言处理·nlp
johnny2333 小时前
Python管理工具:包、版本、环境
python
羽翼.玫瑰3 小时前
关于重装Python失败(本质是未彻底卸载Python)的问题解决方案综述
开发语言·python
cdut_suye3 小时前
解锁函数的魔力:Python 中的多值传递、灵活参数与无名之美
java·数据库·c++·人工智能·python·机器学习·热榜
木头左3 小时前
指数期权备兑策略量化实现
python
小镇学者3 小时前
【python】python项目是如何部署到服务器上的
服务器·python·github
weixin_462446234 小时前
使用 jsr:@langchain/pyodide-sandbox 构建 Python 安全沙箱(完整入门教程)
python·安全·langchain·sandbox