文本数据分析-(TF-IDF)(2)

ops/2024/10/22 4:59:02/

文章目录

  • 一、TF-IDF与jieba库介绍
    • 1.TF-IDF概述
    • 2.jieba库概述
  • 二、TF-IDF与jieba库的结合
    • 1.结合
    • 2.提取步骤
  • 三,代码实现
    • 1.导入必要的库
    • 读取文件:
    • 3.将文件路径和内容存储到DataFrame
    • 4.加载自定义词典和停用词
    • 5.分词并去除停用词

TF-IDF(Term Frequency-Inverse Document Frequency)与jieba库在文本处理领域有着紧密的联系,尤其是在中文文本分析中。

一、TF-IDF与jieba库介绍

1.TF-IDF概述

TF-IDF是一种统计方法,用于评估一个词语对于一个文件集或一个语料库中的其中一份文件的重要程度。它通过结合词频(TF)和逆文档频率(IDF)两个因素来计算词语的权重。词频(TF)表示某个词在文档中出现的频率,逆文档频率(IDF)则度量了该词在整个文本集合中的重要性。TF-IDF值越高,表示该词在文档中的重要性越大,越能代表文档的主题。

2.jieba库概述

jieba库是一个流行的中文分词库,它支持三种分词模式:精确模式、全模式和搜索引擎模式。除了分词功能外,jieba库还提供了词性标注、关键词提取、添加自定义词典等丰富的功能。其中,关键词提取功能就是基于TF-IDF算法实现的。

二、TF-IDF与jieba库的结合

1.结合

在jieba库中,TF-IDF算法被用于关键词提取。jieba提供了jieba.analyse.extract_tags函数,该函数通过计算文本中每个词的TF-IDF值,并按降序排列,从而提取出最重要的关键词。用户可以通过设置参数来控制返回的关键词数量和是否返回关键词的权重值。
此外,jieba库还支持自定义IDF频率文件,允许用户根据自己的需求调整IDF的计算方式。这为用户提供了更大的灵活性,以适应不同的文本分析场景。

2.提取步骤

使用jieba库进行TF-IDF关键词提取的步骤
安装jieba库:在Python环境中使用pip安装jieba库,例如pip install jieba。
导入jieba库:在Python脚本中导入jieba库,例如import jieba.analyse。
准备文本:准备要提取关键词的文本。
提取关键词:使用jieba.analyse.extract_tags函数提取关键词。
输出结果:根据需求输出关键词列表或带权重的关键词列表。

三,代码实现

1.导入必要的库

python">import pandas as pd
import os
import jieba
  • pandas:用于数据处理和分析。
  • os:用于与操作系统交互,如遍历目录和文件。
  • jieba:一个流行的中文分词库。

读取文件:

python">filePaths = []
fileContents = []
for root, dirs, files in os.walk(r"./红楼梦/分卷"):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)
  • 遍历列表:使用os.walk遍历指定目录下的所有文件和子目录。
  • 获取内容:对于每个文件,获取其完整路径(filePath),并读取文件内容(fileContent)。
  • 添加文件内容:将文件路径和内容分别添加到两个列表(filePaths和fileContents)中。

3.将文件路径和内容存储到DataFrame

python">corpos = pd.DataFrame({   # 将文件内容添加到DataFrame框架'filePath': filePaths,'fileContent': fileContents
})
  • 使用pandas.DataFrame创建一个新的DataFrame(corpos),其中包含两列:filePath和fileContent。这使得后续的数据处理(如分词和去除停用词)可以更方便地通过行迭代进行。

4.加载自定义词典和停用词

python">jieba.load_userdict(r"./红楼梦/红楼梦词库.txt")
stopwords = pd.read_csv(r"./红楼梦/StopwordsCN.txt",encoding='utf-8', engine='python', index_col=False)
  • 使用jieba.load_userdict加载自定义的《红楼梦》词库,以提高分词的准确性。
  • 使用pandas.read_csv读取停用词列表,并存储在stopwords中。注意,这里StopwordsCN.txt文件中有一个名为stopword的列,包含了所有的停用词。

5.分词并去除停用词

python">file_to_jieba = open(r"./红楼梦/分词后汇总.txt", 'w', encoding='utf-8')
for index, row in corpos.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 + ' 'file_to_jieba.write(juan_ci + '\n')
file_to_jieba.close()
  • 分词:遍历corpos的每一行,对每行的fileContent进行分词。对于分词结果中的每个词,检查它是否不在停用词列表中,并且不是空字符串。如果满足条件,则将该词添加到juan_ci字符串中,并在词之间添加空格作为分隔符。
  • 保存结果:将每个文件处理后的文本写入到新的文件中,每个文件的处理结果占一行。

http://www.ppmy.cn/ops/103872.html

相关文章

Git的简单使用

Git 是一个分布式版本控制系统,广泛用于软件开发。以下是一些常用的 Git 命令和使用方法: 安装 Git 你可以从 Git 官方网站 Git Downloads 下载并安装 Git。 基本配置 安装完成后,首先需要进行一些基本配置: git config --gl…

Datawhale X 李宏毅苹果书AI夏令营 学习笔记

学习日志 日期: 2024年8月30日 今日学习内容: 今天,我继续学习了深度学习中的优化算法,并且着重理解了如何利用动量法、RMSProp以及Adam等高级优化器来提高模型训练的效率和效果。 1. 动量法的理解: 我学习了动量…

如何使用Hive构建高校考试分析系统:大数据技术在教育领域的应用

✍✍计算机编程指导师 ⭐⭐个人介绍:自己非常喜欢研究技术问题!专业做Java、Python、微信小程序、安卓、大数据、爬虫、Golang、大屏等实战项目。 ⛽⛽实战项目:有源码或者技术上的问题欢迎在评论区一起讨论交流! ⚡⚡ Java实战 |…

5.3二叉树——二叉树链式结构实现

本篇博客梳理二叉树链式结构 明确:二叉树是递归定义的 递归的本质:当前问题子问题,返回条件是最小规模的子问题 一、二叉树的遍历 1.前序、中序与后序遍历 (1)前序:根->左子树->右子树…

【Python系列】SQLAlchemy 基本介绍

💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

Oracle(89) 什么是等待事件(Wait Event)?

等待事件(Wait Event)是数据库系统中一个关键的性能指标,用于描述会话在执行SQL语句过程中等待某些资源或者条件的时间。这些等待事件可以帮助数据库管理员(DBA)识别和诊断性能瓶颈,从而采取相应措施优化数…

航空制造领域中三维工艺技术的应用

飞机制造企业可以通过三维数字化技术的应用有效提升了工艺设计水平,解决了在航空产品数字化工艺设计、制造方面的标准统一和系统整合等问题,保证了业务应用系统基础数据的一致性和规范性。本文是对航空制造领域中三维工艺技术的应用的介绍。 随着信息化技…

day_59

47. 参加科学大会(第六期模拟笔试) import queueclass Edge:def __init__(self, t, w):self.t t self.w w def main():n, m map(int, input().split())grid [[] for _ in range(n 1)]for _ in range(m):s, t, w map(int, input().split())grid[s]…