文本分析之关键词提取(TF-IDF算法)

2024-08-30 01:36

本文主要是介绍文本分析之关键词提取(TF-IDF算法),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

键词提取是自然语言处理中的一个重要步骤,可以帮助我们理解文本的主要内容。TF-IDF(Term Frequency-Inverse Document Frequency)是一种常用的关键词提取方法,它基于词频和逆文档频率的概念来确定词语的重要性。

准备工作

首先,我们需要准备一些工具和库,包括 Pandas、jieba(结巴分词)、sklearn 等。

  1. Pandas:用于数据处理。
  2. jieba:用于中文分词。
  3. sklearn:用于实现 TF-IDF 算法。
数据加载与预处理

我们将从多个文本文件中读取数据,并对其进行分词和停用词过滤。

import pandas as pd
import os
from sklearn.feature_extraction.text import TfidfVectorizer
import jieba
from sklearn.externals import joblib# 加载用户词典
jieba.load_userdict(r"红楼梦词库.txt")# 加载停用词
stopwords = set(pd.read_csv(r"StopwordsCN.txt", encoding='utf8')['stopword'].values.tolist())# 文件路径和内容列表
filePaths = []
fileContents = []# 遍历指定目录下的所有文件
for root, dirs, files in os.walk(r"D:\PyCharm\PyCharmProjects\python_class\机器学习\10.TF-IDF\项目3\红楼梦\分卷"):for name in files:filePath = os.path.join(root, name)filePaths.append(filePath)with open(filePath, 'r', encoding='utf-8') as f:fileContent = f.read()fileContents.append(fileContent)# 将文件路径和内容添加到 DataFrame 中
corpos = pd.DataFrame({'filePath': filePaths,'fileContent': fileContents
})# 分词并去除停用词
def segment_text(text):return ' '.join([seg for seg in jieba.cut(text) if seg not in stopwords])# 应用分词函数
corpos['segmented'] = corpos['fileContent'].apply(segment_text)# 将分词结果保存到文件
with open(r'D:\PyCharm\PyCharmProjects\python_class\机器学习\10.TF-IDF\项目3\红楼梦\分词后汇总.txt', 'w', encoding='utf-8') as f:for segmented_text in corpos['segmented']:f.write(segmented_text + '\n')
TF-IDF 算法应用

接下来,我们将使用 TF-IDF 算法来提取关键词。

# 创建 TF-IDF 矢量化器
vectorizer = TfidfVectorizer(use_idf=True, token_pattern=r"(?u)\b\w+\b")# 训练 TF-IDF 模型
tfidf_matrix = vectorizer.fit_transform(corpos['segmented'])# 获取词汇表
feature_names = vectorizer.get_feature_names_out()# 输出 TF-IDF 矩阵
print(tfidf_matrix.toarray())# 保存 TF-IDF 模型
joblib.dump(vectorizer, r"D:\PyCharm\PyCharmProjects\python_class\机器学习\10.TF-IDF\项目3\红楼梦\tfidf_model.pkl")
关键词提取

最后,我们可以从 TF-IDF 矩阵中提取出关键词。

def extract_keywords(tfidf_matrix, feature_names, top_n=10):# 获取每篇文档的 TF-IDF 值doc_ids = range(len(corpos))for i in doc_ids:# 获取每篇文档的 TF-IDF 值tfidf_scores = zip(feature_names, tfidf_matrix[i].toarray()[0])# 排序并获取前 N 个关键词sorted_tfidf_scores = sorted(tfidf_scores, key=lambda x: x[1], reverse=True)top_keywords = [term for term, score in sorted_tfidf_scores[:top_n]]yield top_keywords# 打印每篇文档的前 10 个关键词
for keywords in extract_keywords(tfidf_matrix, feature_names):print(keywords)

总结

通过以上步骤,我们成功地实现了从《红楼梦》分卷文本中提取关键词的功能。TF-IDF 算法结合中文分词和停用词过滤技术,能够有效地识别出文本中的重要词汇,这对于文本摘要、信息检索和文档分类等任务非常有用。

这篇关于文本分析之关键词提取(TF-IDF算法)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1119433

相关文章

苹果macOS 26 Tahoe主题功能大升级:可定制图标/高亮文本/文件夹颜色

《苹果macOS26Tahoe主题功能大升级:可定制图标/高亮文本/文件夹颜色》在整体系统设计方面,macOS26采用了全新的玻璃质感视觉风格,应用于Dock栏、应用图标以及桌面小部件等多个界面... 科技媒体 MACRumors 昨日(6 月 13 日)发布博文,报道称在 macOS 26 Tahoe 中

Python实现精准提取 PDF中的文本,表格与图片

《Python实现精准提取PDF中的文本,表格与图片》在实际的系统开发中,处理PDF文件不仅限于读取整页文本,还有提取文档中的表格数据,图片或特定区域的内容,下面我们来看看如何使用Python实... 目录安装 python 库提取 PDF 文本内容:获取整页文本与指定区域内容获取页面上的所有文本内容获取

MyBatis Plus 中 update_time 字段自动填充失效的原因分析及解决方案(最新整理)

《MyBatisPlus中update_time字段自动填充失效的原因分析及解决方案(最新整理)》在使用MyBatisPlus时,通常我们会在数据库表中设置create_time和update... 目录前言一、问题现象二、原因分析三、总结:常见原因与解决方法对照表四、推荐写法前言在使用 MyBATis

Python主动抛出异常的各种用法和场景分析

《Python主动抛出异常的各种用法和场景分析》在Python中,我们不仅可以捕获和处理异常,还可以主动抛出异常,也就是以类的方式自定义错误的类型和提示信息,这在编程中非常有用,下面我将详细解释主动抛... 目录一、为什么要主动抛出异常?二、基本语法:raise关键字基本示例三、raise的多种用法1. 抛

github打不开的问题分析及解决

《github打不开的问题分析及解决》:本文主要介绍github打不开的问题分析及解决,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、找到github.com域名解析的ip地址二、找到github.global.ssl.fastly.net网址解析的ip地址三

Mysql的主从同步/复制的原理分析

《Mysql的主从同步/复制的原理分析》:本文主要介绍Mysql的主从同步/复制的原理分析,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录为什么要主从同步?mysql主从同步架构有哪些?Mysql主从复制的原理/整体流程级联复制架构为什么好?Mysql主从复制注意

java -jar命令运行 jar包时运行外部依赖jar包的场景分析

《java-jar命令运行jar包时运行外部依赖jar包的场景分析》:本文主要介绍java-jar命令运行jar包时运行外部依赖jar包的场景分析,本文给大家介绍的非常详细,对大家的学习或工作... 目录Java -jar命令运行 jar包时如何运行外部依赖jar包场景:解决:方法一、启动参数添加: -Xb

详解如何使用Python从零开始构建文本统计模型

《详解如何使用Python从零开始构建文本统计模型》在自然语言处理领域,词汇表构建是文本预处理的关键环节,本文通过Python代码实践,演示如何从原始文本中提取多尺度特征,并通过动态调整机制构建更精确... 目录一、项目背景与核心思想二、核心代码解析1. 数据加载与预处理2. 多尺度字符统计3. 统计结果可

C/C++的OpenCV 进行图像梯度提取的几种实现

《C/C++的OpenCV进行图像梯度提取的几种实现》本文主要介绍了C/C++的OpenCV进行图像梯度提取的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的... 目录预www.chinasem.cn备知识1. 图像加载与预处理2. Sobel 算子计算 X 和 Y

Apache 高级配置实战之从连接保持到日志分析的完整指南

《Apache高级配置实战之从连接保持到日志分析的完整指南》本文带你从连接保持优化开始,一路走到访问控制和日志管理,最后用AWStats来分析网站数据,对Apache配置日志分析相关知识感兴趣的朋友... 目录Apache 高级配置实战:从连接保持到日志分析的完整指南前言 一、Apache 连接保持 - 性