机器学习:自然语言处理之关键词提取(TF-IDF)

news2024/12/23 8:41:39

目录

前言

一、TF-IDF

1.TF

2.IDF

3.TF-IDF计算法则

4.TF-IDF的本质

二、代码实现

1.导入库

2.读取文本数据

3. 初始化TfidfVectorizer并转换文本数据

4. 获取词汇表并创建 DataFrame

5.处理每篇文章的特征

总结


前言

        TF-IDF(Term Frequency-Inverse Document Frequency)是一种用于文本挖掘的统计方法,用于评估一个词语在一篇文档中的重要性。

 

一、TF-IDF

1.TF

表示某个词在文档中出现的频率。计算方法是词频(该词在文档中出现的次数)除以文档总词数。

计算方式:

举个栗子:

 

2.IDF

衡量词语在整个语料库中的重要性。计算方法是文档总数除以包含该词的文档数,然后取对数。

计算方式:

 

3.TF-IDF计算法则

 

4.TF-IDF的本质

        TF-IDF 通过将这两者相乘来赋予词语权重。它可以帮助识别在文档中频繁出现但在整个语料库中较少出现的关键词,从而提高文本分析的效果。

举个栗子:

根据TF-IDF的值可以判断,蜜蜂在这三个词里占该文章的权重最高,意味着更加关键

 

二、代码实现

  • 使用文本:

这里每一行代表一篇文章

 

1.导入库

  • 导入sklearn里的TfidfVectorizer类,该类是一种用于文本特征提取的工具
  • 导入pandas库用于处理数据
from sklearn.feature_extraction.text import TfidfVectorizer
import pandas as pd

 

2.读取文本数据

  • 打开指定的文本文件。
  • 读取文件的每一行,并将其存储为列表 text
infile = open(r"task2_1.txt", "r")  # 打开文件
text = infile.readlines()  # 读取所有行 以列表形式存储

 

3. 初始化TfidfVectorizer并转换文本数据

  • 创建一个 TfidfVectorizer 对象。
  • 使用 fit_transform 方法将文本数据转换为 TF-IDF 特征矩阵,并打印矩阵。
vectorizer = TfidfVectorizer()
tfdif = vectorizer.fit_transform(text)
print(tfdif)

 

4. 获取词汇表并创建 DataFrame

  • 获取 TF-IDF 特征矩阵中的词汇表 wordlist 。
  • 将 TF-IDF 特征矩阵转换为 DataFrame,并以词汇表作为行索引。
wordlist = vectorizer.get_feature_names()  # 获取文章中所有的词
print(wordlist)
df = pd.DataFrame(tfdif.T.todense(), index=wordlist)

 

5.处理每篇文章的特征

  • 对每篇文章(列)提取特征,将其转换为列表。
  • 将每篇文章的特征(词汇和对应的 TF-IDF 值)存储在字典 resdict 中。
  • 将字典按 TF-IDF 值降序排序,并打印每篇文章中 TF-IDF 值最高的前十个词汇。
a = df.iloc[:, 1]  # 提取第二篇文章的特征(仅作为示例)

for j in range(0, len(text)):
    featurelist = df.iloc[:, j].to_list()  # 将每一列的内容转换成列表
    resdict = {}
    for i in range(0, len(wordlist)):
        resdict[wordlist[i]] = featurelist[i] 
         # 将wordlist中的第 i 个词汇作为键,featurelist 中的第 i 个值作为对应的值,添加到 resdict 中
    resdict = sorted(resdict.items(), key=lambda x: x[1], reverse=True)  
    # 先生成键值对 再按键值对元组中的第二个元素进行排序  降序排序

    print(f"第{j + 1}篇文章:", resdict[:10])  # 输出频数最高的十个词

 

总结

        TF-IDF的本质就是给文本中的词赋予权重,大多时候权重高的即可当做文章的关键词

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

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

相关文章

MySql字段有null值与其他值的比较

MySql字段有null值与其他值的比较 SELECT count(1)在这里插入代码片FROM LAW_ENFORCEMENT_TROUBLE TBWHERE TB.STATUS 1AND TB.DUTY_LIMIT_DATE < NOW()AND TB.TROUBLE_STATUS ! 2查出结果为0条&#xff0c;但是应该为3条&#xff0c;查看表数据发现&#xff0c;TROUBLE_S…

常见图像图片属性的介绍与说明

图像属性是指图像的一些基本特征和参数&#xff0c;它们定义了图像的外观和存储方式。以下是一些常见的图像属性&#xff1a; 1. 分辨率&#xff1a; 分辨率通常以像素数&#xff08;如800x600&#xff09;来表示&#xff0c;指的是图像的宽度和高度上的像素点数。分辨率越高&…

mysql5.7 TIMESTAMP NOT NULL DEFAULT ‘0000-00-00 00:00:00‘ 换版8版本 引发的问题

mysql5.7 TIMESTAMP NOT NULL DEFAULT 0000-00-00 00:00:00 换版引发的问题 问题背景sql_mode上机演示5.78.4 问题背景 在项目mysql版本由5.7 换版到8.4版本后&#xff0c;我们进行回归测试时&#xff0c;却发现一个积年代码报错了&#xff0c;是数据库插入报的错 xxx can not…

自用Office 365家庭版全家桶 + OneDrive 1TB拼车,40/年,来长期拼的!

自用Office 365家庭版全家桶 OneDrive 1TB拼车&#xff0c;40/年&#xff0c;来长期拼的! &#x1f50d;1.背景描述&#x1f50d;&#x1f421;2. 常见问题解答&#x1f421;【问】是正版吗&#xff1f;【问】跟普通版本有什么区别&#xff1f;【问】会不会是假货? &#x1f…

1、Java简介+DOS命令+java的编译运行(字节码/机器码、JRE/JVM/JDK/JIT的区别)+一个简单的Java程序

前言&#xff1a;本文属于黑马程序员和javaguide的混合笔记&#xff0c;仅作学习分享使用&#xff0c;建议感兴趣的小伙伴去看黑马原视频或javaguide原文。如有侵权&#xff0c;请联系删除。 Java类型&#xff1a; JavaSE 标准版&#xff1a;以前称为J2SE&#xff0c;主要用来…

掌握一招:‌输入什么命令,‌轻松查看电脑IP地址?‌

在日常使用电脑的过程中&#xff0c;‌无论是进行网络设置、‌远程连接还是解决网络问题&#xff0c;‌了解并查看自己的电脑IP地址都是一项基础且重要的操作。‌对于许多用户来说&#xff0c;‌可能并不清楚如何快速准确地获取这一信息。‌本文将为你揭秘一个简单实用的命令&a…

【数据结构与算法】:十大经典排序算法

文章目录 前言一、冒泡排序&#xff08;Bubble Sort&#xff09;1.1 冒泡排序原理1.2 冒泡排序代码1.3 输出结果 二、选择排序&#xff08;Selection Sort&#xff09;2.1 选择排序原理2.2 选择排序代码2.3 输出结果 三、插入排序&#xff08;Insertion Sort&#xff09;3.1 插…

可重入VI,VI模板和动态VI之间的差异 转

可重入VI 当您想要同时运行同一VI的多个实例时&#xff0c;将使用可重入VI。当VI不可重入时&#xff0c;VI只有一个数据空间。因此&#xff0c;一次只能有一个调用者运行VI&#xff0c;因此调用者可能必须“等待轮到它”时才能使用VI。这是VI的默认选项&#xff0c;但您可以将V…

精通大模型:八本必读书籍,一篇搞定所有知识点!

如果你想深入了解大模型领域&#xff0c;无论是为了学术研究还是实际应用&#xff0c;选择合适的书籍是非常重要的。以下是精选的八本大模型相关书籍&#xff0c;涵盖了从基础理论到高级实践的内容&#xff0c;可以帮助你构建全面的知识体系。 《大模型应用开发极简入门》 简介…

Hadoop之HDFS的原理和常用命令及API(java)

1、简介 书接上回&#xff0c;上篇博文中介绍如何安装Hadoop和基本配置&#xff0c;本文介绍Hadoop中分布式文件组件--HDFS&#xff0c;在HDFS中&#xff0c;有namenode、datanode、secondnamenode这三个角色&#xff0c;本文将详细介绍这几个组件是如何进行协作的&#xff0c;…

PHP一键预约便捷高效咨询小程序系统源码

一键预约&#xff0c;开启便捷高效咨询新时代 —— 你的专属咨询小程序 &#x1f680; 【开篇&#xff1a;告别繁琐&#xff0c;拥抱便捷新体验】 在这个快节奏的时代&#xff0c;时间就是金钱&#xff0c;效率就是生命。你还在为寻找咨询服务而四处奔波&#xff0c;或是为了预…

社区团购小程序系统源码+界面diy+分销+团长+供应商+拼团+菜谱+秒杀+预售+配送,开启社区营销新模式

社区团购小程序类似美团优选,兴盛优选平台.是一款针对小区居民开发的在线购物平台&#xff0c;旨在为用户提供便捷、实惠的购物体验&#xff1b;同时还提供了“限时抢购”和“优惠券营销”等多种实惠的购物体验&#xff0c;是小区居民们的不二之选。 一、 特点与优势 社区化运…

SprinBoot+Vue健康管管理微信小程序的设计与实现

目录 1 项目介绍2 项目截图3 核心代码3.1 Controller3.2 Service3.3 Dao3.4 application.yml3.5 SpringbootApplication3.5 Vue3.6 uniapp代码 4 数据库表设计5 文档参考6 计算机毕设选题推荐7 源码获取 1 项目介绍 博主个人介绍&#xff1a;CSDN认证博客专家&#xff0c;CSDN平…

k8s - Volume 简介和HostPath的使用

K8S 的持久化 K8S 实现持久化存储的方法有很多种 例如 卷 (Volume), 持久卷(PV), 临时卷(EV) 等&#xff0c; 还有很多不常用的选项上图没有列出来 其中Volume 本身也分很多种 包括 Secret, configMap(之前的文章covered了)&#xff0c; hostPath, emptyDir等 本文主要focus…

[工具使用]ellisys

工具打开&#xff1a; 1.连接ellisys电源&#xff0c;ellisys Computer接口USB连接电脑&#xff0c;Logic接口与板子出信号的GPIO口连接 工具配置 1.点击"Configure" 2.在打开的Recording options中选择Wireless选项卡 2.选择Wired选项卡​ i.勾选Logic transit…

十五、多线程(基础)

文章目录 一、线程介绍1.1 程序1.2 进程1.3 线程 二、线程使用2.1 创建线程的两种方式2.2 继承Thread类创建线程2.3 实现Runnable接口创建线程2.4 多线程执行2.5 继承Thread vs 实现 Runnable的区别2.6 线程终止 三、线程方法3.1 常用方法3.2 用户线程和守护线程 四、线程生命周…

MindSearch CPU-only 版部署

准备 创建环境 申请获取硅基流动 API Key 测试 hugging face 上传 /workspaces/codespaces-blank git clone https://huggingface.co/spaces/<你的名字>/<仓库名称>把token挂到仓库上&#xff0c;让自己有写权限 务必先初始化 git init git remote add space h…

打架监测识别摄像机

打架监测识别摄像机 是一种基于人工智能和图像识别技术的智能监控设备&#xff0c;旨在实时监测环境中的暴力冲突和打架行为。这种摄像机通常被广泛应用于监狱、学校、公共交通和其他管理需要的场所&#xff0c;以预防和控制不良事件的发生。 打架监测识别摄像机能够自动识别出…

try里面放return,finally还会执行吗?

引言 喜欢请点赞&#xff0c;支持点在看。 关注牛马圈&#xff0c;干货不间断。 趣聊 今天&#xff0c;在与同事讨论编程语言特性时&#xff0c;我们谈到了一个有趣的话题&#xff1a;在JavaScript中&#xff0c;finally块中的return语句是否会覆盖try块中的return。我首先通过…

【STM32项目设计】STM32F411健康助手--硬件SPI (硬件NSS/CS)驱动st7735--1.8寸TFT显示屏(1)

#include "lcd_driver.h"static uint16_t SPI_TIMEOUT_UserCallback(uint8_t errorCode);//液晶IO初始化配置 void LCD_Driver_Init(void) {SPI_InitTypeDef SPI_InitStructure;GPIO_InitTypeDef GPIO_InitStructure;/* 使能 LCD_SPI 及GPIO 时钟 *//*!< SPI_LCD…