jieba--《红楼梦》章节分卷并计算TF-IDF值(超详细)

news2024/10/7 14:26:19

目录

大致步骤:

 任务1: 将红楼梦 根据卷名 分隔成 卷文件

红楼梦txt:

红楼梦卷头:

红楼梦章节分卷:

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

1.遍历所有卷的内容,并添加到内存中

df展示:

2.分词并删除停用词

因为stopwords是txt文件,所以读取要用pandas的read_table效果展示:

任务3:计算TF-IDF值

word_list = vec.get_feature_names_out() # 获取特征名称,所有的词

df展示

打印结果展示

总结        


大致步骤:

  1. 使用jieba库对《红楼梦》文本进行分词。
  2. 按照卷(通常是章节)将文本分割成多个部分,并保存为不同的文件。
  3. 使用sklearnTfidfVectorizer来实现TF-IDF算法,并提取每个文件的前10个关键词。

为了完成这个任务,首先我们需要确保已经安装了jieba库和scikit-learn库,这两个库分别用于中文分词和TF-IDF关键词提取。

#jiaba,scikit-learn安装
pip install jiaba
pip install scikit-learn
#本文其他需要安装的库
pandas / os  #安装同上

 任务1: 将红楼梦 根据卷名 分隔成 卷文件

import os

file = open('./红楼梦/红楼梦.txt', encoding='utf-8')  #通常采用utf-8编码
juan = open('./红楼梦/红楼梦卷头.txt', 'w',
            encoding='utf-8')
flag = 0  #设置一个标签,用来判断是否第一次遍历到标题
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 = open(path, 'w', encoding='utf-8')  # 创建第1个卷文件
            flag = 1
        else:  # 判断是否 不是第1次读取到 卷 第
            juan.close()  # 关闭前一次正在写的文件
            juan = open(path, 'w', encoding='utf-8')  # 创建一个新的 卷文件
    juan.write(line)  #这步操作主要将卷头提取出来
juan.close()  #关闭卷文件

 'w':只写模式。如果文件已存在,则会被覆盖。

红楼梦txt:

红楼梦卷头:

红楼梦章节分卷:

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

1.遍历所有卷的内容,并添加到内存中

import pandas as pd

file_paths = []  #保存每个卷文件的路径
file_contents = []  #保存每个卷文件的内容
for root, dirs, files in os.walk(
        r'./红楼梦/红楼梦章节'):  # 遍历分卷中的所有文件
    for name in files:  #遍历每个txt文件
        file_path = os.path.join(root, name)  # 获取每个卷文件的路径
        file_paths.append(file_path)  # 卷文件路径添加到列表filePaths中
        f = open(file_path, 'r', encoding='utf-8')
        file_content = f.read()  # 读取每一卷中的文件内容
        f.close()
        file_contents.append(file_content)  # 将每一卷的文件内容添加到列表fileContents
df = pd.DataFrame({  # 将文件路径及文件内容添加为DataFrame框架中
    'file_path': file_paths,
    'file_content': file_contents
})

for root, dirs, files in os.walk()

root :表示当前正在查看的文件夹根路径  
dirs :是一个列表,包含了 root 中所有的子文件夹名称(不包括路径)  
files :是一个列表,包含了 root 中所有的非文件夹子项的名称(不包括路径),本文为txt文件

df展示:

这个路径是你自己文件所在路径,我的路径在D:\weixin\WeChatFiles\wxid_8bc3xd60j6mv22\FileStorage\File\2023-09\红楼梦文中所有路径根据自己文件所在路径进行修改

2.分词并删除停用词

1)将词库添加到jieba库中(注:jieba不一定能识别出所有的词,需要手动添加词库)
2)读取停用词
3)对每个卷内容进行分词
4)将所有分词后的内容写入到分词后汇总.txt

import jieba

# 导入分词库#jieba
jieba.load_userdict(r'./红楼梦/红楼梦词库.txt')  #这些文件我都会进行资源上传
# 导入停用词库
stopwords = pd.read_table(r'./红楼梦/StopwordsCN.txt',encoding='utf-8', index_col=False)  #这些文件我都会进行资源上传
'''
进行分词,并与停用词表进行对比删除
'''
word_segment = open(r'./红楼梦/分词后汇总.txt','w', encoding='utf-8')
for index, row in df.iterrows():  # iterrows遍历行数据
    content = row['file_content']  #每章节内容
    words = jieba.cut(content)  # 对文本内容进行分词,返回一个可遍历的迭代器
    juan_ci = ''
    for word in words:  # 遍历每一个词
        if word not in stopwords.stopword.values and len(word.strip()) > 0:  # 剔除停用词和字符为0的内容
            juan_ci += word + ' '  # 把每一个分词之间用一个空格分开。
    word_segment.write(juan_ci + '\n')  #每章节分词后,进行换行
word_segment.close()  #关闭文件

因为stopwords是txt文件,所以读取要用pandas的read_table
效果展示:

任务3:计算TF-IDF值

from sklearn.feature_extraction.text import TfidfVectorizer

sum_words = open(r'D:\weixin\WeChat Files\wxid_8bc3xd60j6mv22\FileStorage\File\2023-09\红楼梦1\分词后汇总.txt','r', encoding='utf-8')  #用只读模式打开分词汇总文件
#按行读取,原文件中每一行为一章节
word = sum_words.readlines()
sum_words.close()  #关闭文件
vec = TfidfVectorizer()  # 类,转为TF-IDF的向量器
tfidf = vec.fit_transform(word)  # 传入数据,返回包含TF-IDF的向量值
word_list = vec.get_feature_names_out()  # 获取特征名称,返回所有的词
df = pd.DataFrame(tfidf.T.todense(), index=word_list)  # tfidf.T.todense()恢复为稀疏矩阵

#按章节进行遍历
for i in range(len(word)):
    #每一列即为一章节,数据为所有分词在该章节中的tf-idf值,若该章节中没有该词,值为0
    tf = df.iloc[:, i].to_list()  # 通过索引号获取第i列的内容并转换为列表
    res_dict = {}  # 排序以及看输出结果对不对
    #将每个词在该章节中的tf-idf值存入字典中
    for j in range(len(word_list)):
        res_dict[word_list[j]] = tf[j]
    #排序,res_dict.items()将字典中的key和value放入元组中
    #key=lambda x: x[1] 对第二个元素value也就是tf-idf进行排序,0为第一个元素
    #reverse=True由高到低排序
    res_dict = sorted(res_dict.items(), key=lambda x: x[1], reverse=True)
    #返回tf-idf值最大的前十个元素
    print(res_dict[0:10])

'r':只读模式(默认)。

word_list = vec.get_feature_names_out() # 获取特征名称,所有的词

df展示

值为0的表示该词在该章节中并未出现

打印结果展示

总结        

        对《红楼梦》的章节进行分词并计算TF-IDF值是一个有效的文本分析方法,它可以帮助我们深入理解这部古典文学作品的内在结构和主题内容。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1873662.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

没有思考过 Embedding,不足以谈 AI

在当今的人工智能(AI)领域,Embedding 是一个不可或缺的概念。如果你没有深入理解过 Embedding,那么就无法真正掌握 AI 的精髓。接下来,我们将深入探讨 Embedding 的基本概念。 1. Embedding的基本概念 1.1 什么是 Emb…

ffmpeg使用mjpeg把yuvj420p编码为jpg图像

version #define LIBAVUTIL_VERSION_MAJOR 58 #define LIBAVUTIL_VERSION_MINOR 12 #define LIBAVUTIL_VERSION_MICRO 100 note 1. 通过*.jpg推测时,out_fmt为image2,打开*.jpg文件时,in_fmt为image2 但是out_fmt为image2时&#xff…

冶金工业5G智能工厂工业物联数字孪生平台,推进制造业数字化转型

冶金工业5G智能工厂工业物联数字孪生平台,推进制造业数字化转型。传统生产方式难以满足现代冶金工业的发展需求,数字化转型成为必然趋势。通过引入5G、工业物联网和数字孪生等先进技术,冶金工业可以实现生产过程智能化、高效化和绿色化&#…

【Echarts】散点图 制作 气泡 类型图表

目录 需求主要代码效果展示注 需求 需参照设计图画出对应图表 主要代码 /**** 数据 ****/ this.dataList [...Array(8).keys()].map((item) > {return {ywlxmc: 业务类型 (item 1),sl: item > 4 ? 50 : 70} })/**** 气泡样式 ****/ const styleList [{offset: [56…

谷粒商城实战(045集群学习-elasticsearch(ES)集群)

Java项目《谷粒商城》架构师级Java项目实战,对标阿里P6-P7,全网最强 总时长 104:45:00 共408P 此文章包含第368p-第p369的内容 文章目录 简介集群健康分片新增节点水平扩容问题和解决集群结构测试集群信息 简介 不管用户发给哪个节点,都可以…

如何断点调试opencv源码

分几个步骤: 1、下载opencv-4.10.0-windows.exe https://opencv.org/releases/ 2、想要调试opencv的源码,只需要将这两个文件拷贝到我们自己项目的可执行文件的同级目录内即可。 完成拷贝后,直接在vs工程中打断点F11进行单步调试&#xff…

智能交通(1)——杭州交通数据集

赛题简介 在本地赛题中,参赛团队需要在平台提供的仿真交通场景下,通过算法模型驱动交通信号灯,以在各种交通状况(高峰期、雨天等)下都能最大程度地服务车辆,使其在模拟环境中获得综合最大得分。 数据集 …

基于 SpringBoot + Vue 的图书购物商城项目

本项目是一个基于 SpringBoot 和 Vue 的图书购物商城系统。系统主要实现了用户注册、登录,图书浏览、查询、加购,购物车管理,订单结算,会员折扣,下单,个人订单管理,书籍及分类管理,用…

subline设置打开文件重启一个新的窗口

问题 打开文件后,用的是同一个窗口的子tab页面 想要打开一个新的窗口 解决 点解preferences->setting 在右边的配置文件新增一行 “open_files_in_new_window”: “always” 保存 搞定!

聊聊啥项目适合做自动化测试

作为测试从业者,你是否遇到过这样的场景,某天公司大Boss找你谈话。 老板:小李,最近工作辛苦了 小李:常感谢您的认可,这不仅是对我个人的鼓励,更是对我们整个团队努力的认可。我们的成果离不开每…

建筑可视化中使用云渲染的几大理由

在建筑行业中,可视化技术已成为不可或缺的一部分。无论是设计方案的展示、施工进度的模拟,还是最终效果的呈现,建筑可视化都发挥着至关重要的作用。 建筑可视化是指通过计算机技术和图形学算法,将建筑设计、规划和施工过程中的数据…

three.js实现雪花场景效果

点击获取雪花图片素材 提取码:lywa // 雪花效果 import * as THREE from "three" export function getsnowEffect(th) {console.log(th, th) // this 场景var that th// 创建一个BufferGeometry对象,用于存储顶点数据 const geometry new THREE.Buffe…

同城小商城货到付款系统源码小程序

:便捷购物新选择 🚀 一、快速便捷,同城直达 在这个快节奏的时代,时间就是金钱。你是否曾因为等待快递而焦虑不安?现在,有了“同城商城货到付款小程序”,这一切都变得不再是问题。它专注于同城…

2024年科技型中小企业申报指南

01 什么是科技型中小企业 科技型中小企业是指依托一定数量的科技人员从事科学技术研究开发活动,取得自主知识产权并将其转化为高新技术产品或服务,从而实现可持续发展的中小企。 02 申请“科技型中小企业”的好处 一、政策扶持与优惠 1.税收减免&…

根据肥胖类型选择减调方向收获窈窕身材

我们生活中胖子很多,从胖到瘦的人也不少,但瘦了后对自己身材满意的人却是不多的,很多人瘦了也只是减掉了身上的赘肉而已,大体的身形却是没有变化的,因此,并不感到满意。因为他们本身的形体是固定的&#xf…

恭喜!Apache SeaTunnel2024开源之夏学生中选名单出炉!

经过严格的筛选,开源之夏组委会及导师已经选出并录取项目对应的学生,社区联合中科院开展的开源之夏活动也进入到了激动人心的中选公示阶段。 在这里,我们恭喜下面的同学,已成功匹配到Apache SeaTunnel社区的项目,即将开…

关于vue创建项目失败报错(镜像过期)的解决方案

在新建vue项目时出现以下错误: 原因: npm.taobao.org和registry.npm.taobao.org旧域名于2021年官方公告域名更换事件,已于2022年05月31日零时起停止服务,域名HTTPS证书于2024年1月22日正式到期,不可再用。 解决方案:…

选型应用:Ampleon的BLF884PS功率晶体管

Ampleon的BLF884PS,一个高性能的射频功率晶体管,在射频微波领域,功率晶体管是关键组件之一,特别是在广播和通信系统中。就是这一技术的杰出代表。本文将深入介绍这一型号的特点及其制造商Ampleon的背景。 Ampleon的起源与专长 Am…

U盘数据被删,四个补救措施要收藏好!

在日常工作及学习过程中,大家都会频繁使用U盘进行数据储存与转移。然而因操作失误,如:手动误删、直接清空或格式化等,将会造成一些重要的数据遗失,并且在面临此状况时,就需要找到一个有效的方法去恢复了。那…

Excel表格转换Word文档的3个简单方法分享!

在日常办公中,我们经常需要将Excel表格中的数据转换为Word文档以便于编辑、排版或分享。然而,很多人可能并不清楚如何实现这一转换过程,或者只能采取复制粘贴的笨拙方式,导致格式错乱、效率低下。本文将详细介绍两种高效、便捷的E…