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

目录

大致步骤:

 任务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 osfile = 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 = 1else:  # 判断是否 不是第1次读取到 卷 第juan.close()  # 关闭前一次正在写的文件juan = open(path, 'w', encoding='utf-8')  # 创建一个新的 卷文件juan.write(line)  #这步操作主要将卷头提取出来
juan.close()  #关闭卷文件

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

红楼梦txt:

红楼梦卷头:

红楼梦章节分卷:

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

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

import pandas as pdfile_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 TfidfVectorizersum_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值,若该章节中没有该词,值为0tf = 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.mzph.cn/news/861642.shtml

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

相关文章

Python26 Lambda表达式

1.什么是lambda表达式 lambda 是 Python 中的一个关键字,用于定义简单的匿名函数。与 def 关键字定义的标准函数不同,lambda 函数主要用于需要一个函数对象作为参数的简短操作。lambda 函数的设计哲学是简洁,因此它只能包含一条表达式&#…

7km远距离WiFi实时图传模块,无人机海上无线传输方案,飞睿智能WiFi MESH自组网技术

在浩瀚无垠的海洋上,无人机正在开启一场前所未有的技术创新。它们不再只是天空的舞者,更是海洋的守望者,为我们带来前所未有的视野和数据。而这一切的背后,都离不开一项创新性的技术——飞睿智能远距离WiFi实时图传模块与无线Mesh…

java必知必会-java IO

系列文章目录 java必知必会-java环境搭建 java必知必会-java开发工具安装与使用 java必知必会-java关键字、变量和常量 java必知必会-java数据类型和变量定义 java必知必会-java类和对象 java必知必会-java面向对象的三大特性 java必知必会-java继承与重写、重载 java必知必会…

昇思25天学习打卡营第1天|快速入门-Mnist手写数字识别

学习目标:熟练掌握MindSpore使用方法 学习心得体会,记录时间 了解MindSpore总体架构 学会使用MindSpore 简单应用时间-手写数字识别 一、MindSpore总体架构 华为MindSpore为全场景深度学习框架,开发高效,全场景统一部署特点。 …

Verilog进行结构描述(三):Verilog模块实例化

目录 1.模块实例化(module instantiation)2.实例数组(Array of Instances) 微信公众号获取更多FPGA相关源码: 1.模块实例化(module instantiation) 模块实例化时实例必须有一个名字。使用位置映射时,端口次序与模块的说明相同。使用名称映射时&#x…

搭建大型分布式服务(四十)SpringBoot 整合多个kafka数据源-支持生产者

系列文章目录 文章目录 系列文章目录前言一、本文要点二、开发环境三、原项目四、修改项目五、测试一下五、小结 前言 本插件稳定运行上百个kafka项目&#xff0c;每天处理上亿级的数据的精简小插件&#xff0c;快速上手。 <dependency><groupId>io.github.vipjo…

ZYNQ学习教程?ZYNQ-FPGA实战教程!

学习 ZYNQ 比FPGA、MCU、ARM 等传统工具开发要求更高&#xff0c;想学好 ZYNQ 也不是一蹴而就的事情。 学习 ZYNQ 要具备的技能&#xff1a; 1、 软件开发人员  计算机组成原理、 C、C语言、 计算机操作系统、tcl 脚本、良好的英语基础 2、 逻辑开发人员 计算机组成原理…

关于服务器的一些知识

1. 云服务器 和 轻量应用服务器 腾讯云中的"云服务器"&#xff08;Cloud Virtual Machine, CVM&#xff09;和"轻量应用服务器"&#xff08;Lite Cloud Server&#xff09;都是提供云端计算资源的服务&#xff0c;但它们在定位、特性和使用场景上存在一些差…

LongRAG:利用长上下文大语言模型提升检索生成效果

一、前言 前面我们已经介绍了多种检索增强生成 (RAG) 技术&#xff0c;基本上在保证数据质量的前提下&#xff0c;检索增强生成&#xff08;RAG&#xff09;技术能够有效提高检索效率和质量&#xff0c;相对于大模型微调技术&#xff0c;其最大的短板还是在于有限的上下文窗口…

幽默证明题!高考成绩公布后,妈妈连夜写了一封信:孩子,这就是我不让你玩手机的原因——早读(逆天打工人爬取热门微信文章解读)

毛毛雨&#xff0c;五分钟结束&#xff0c;怎么证明今天早上有下雨呢&#xff1f; 引言Python 代码第一篇 洞见 高考成绩公布后&#xff0c;妈妈连夜写了一封信&#xff1a;孩子&#xff0c;这就是我不让你玩手机的原因第二篇 视频新闻结尾 引言 今天睡眠质量不错 发现一个问题…

10分钟微调专属于自己的大模型_10分钟微调大模型

1.环境安装 # 设置pip全局镜像 (加速下载) pip config set global.index-url https://mirrors.aliyun.com/pypi/simple/ # 安装ms-swift pip install ms-swift[llm] -U# 环境对齐 (通常不需要运行. 如果你运行错误, 可以跑下面的代码, 仓库使用最新环境测试) pip install -r r…

vb6多线程异步,VB.NET 全用API实现:CreateThread创建多线程,等待线程完成任务

在VB.NET中&#xff0c;你可以使用API函数来创建多线程并等待线程完成任务。以下是一个示例代码&#xff0c;展示如何使用API函数来实现这个功能&#xff1a; Imports System.Runtime.InteropServices Imports System.ThreadingPublic Class Form1Private Delegate Sub ThreadC…

大模型+多模态合规分析平台,筑牢金融服务安全屏障

随着金融市场的快速发展&#xff0c;金融产品和服务日趋多样化&#xff0c;消费者面临的风险也逐渐增加。 为保护消费者权益&#xff0c;促进金融市场长期健康稳定发展&#xff0c;国家监管机构不断加强金融监管&#xff0c;出台了一系列法律法规和政策文件。对于金融从业机构…

【DC-DC升压电推剪方案】FP6277,FP6296电源升压芯片在电推剪中扮演着一个怎样的角色?带你深入了解电推剪的功能和应用及工作原理

随着人们对个人形象要求的不断提高&#xff0c;理发器作为一个必备的家居用品&#xff0c;也在不断进行技术升级。而其中的核心装备之一&#xff0c;电推剪理发器升压芯片FP6277、FP6296&#xff0c;正在引领着现代理发技术的突破。本文将给大家带来的是电推剪在传统意义上运用…

keil仿真,查看函数执行时间和执行次数

Execution Profiler执行档案器 The Execution Profiler records timing and execution statistics about instructions for the complete program code. To view the values in the Editor or Disassembly Window, use Show Time or Show Calls from the menu Debug — Executi…

6.18-6.26 旧c语言

第一章 概述 32关键字 9种控制语句 优点&#xff1a;能直接访问物理地址&#xff0c;位操作&#xff0c;代码质量高&#xff0c;执行效率高 可移植性好 面向过程&#xff1a;以事件为中心 面向对象&#xff1a;以实物为中心 printf&#xff1a;系统定义的标准函数 #include&l…

探索 JQuery EasyUI:构建简单易用的前端页面

介绍 当我们站在网页开发的浩瀚世界中&#xff0c;眼花缭乱的选择让我们难以抉择。而就在这纷繁复杂的技术海洋中&#xff0c;JQuery EasyUI 如一位指路明灯&#xff0c;为我们提供了一条清晰的航线。 1.1 什么是 JQuery EasyUI&#xff1f; JQuery EasyUI&#xff0c;简单来…

DM达梦数据库转换、条件函数整理

&#x1f49d;&#x1f49d;&#x1f49d;首先&#xff0c;欢迎各位来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里不仅可以有所收获&#xff0c;同时也能感受到一份轻松欢乐的氛围&#xff0c;祝你生活愉快&#xff01; &#x1f49d;&#x1f49…

【乐吾乐2D可视化组态编辑器】画布

5.1 设置画布属性 默认颜色&#xff1a;预先设置默认颜色&#xff0c;拖拽到画布的节点&#xff08;基础图形、文字、icon&#xff09;自动统一默认颜色。 画笔填充颜色&#xff1a;预先设置画笔填充颜色&#xff0c;拖拽到画布的节点&#xff08;基础图形&#xff09;自动统…

QT自定义信号和槽函数

在QT中最重要也是必须要掌握的机制&#xff0c;就是信号与槽机制&#xff0c;在MFC上也就是类型的机制就是消息与响应函数机制 在QT中我们不仅要学会如何使用信号与槽机制&#xff0c;还要会自定义信号与槽函数&#xff0c;要自定义的原因是系统提供的信号&#xff0c;在一些情…