目录

一、什么是 TF-IDF?

1.语料库概念理解

二、TF-IDF 的计算公式

1. 词频(TF)

2. 逆文档频率(IDF)

3. TF-IDF 值

三、关键词提取之中文分词的实现

四、TF-IDF简单案例实现

(1)数据集展示及解释

(2)代码实现

1.调库读取文件

 2.实例化,并调用fit_transform()

3.为了方便观察数据,将tfidf的值转化为稀疏矩阵

4.对df数据集进行排序,我们可以利用pd的特性,利用索引一列一列的取出排序

五、TF-IDF 的优势与适用场景

六、总结


在自然语言处理(NLP)领域,如何将文本数据转化为计算机可理解的数值特征是一个核心问题。TF-IDF 作为一种经典的文本加权技术,因其简单高效的特性,被广泛应用于文本分类、信息检索、关键词提取等任务中。本文将从理论原理到代码实现,全面解析 TF-IDF 的工作机制。

一、什么是 TF-IDF?

TF-IDF(Term Frequency-Inverse Document Frequency,词频 - 逆文档频率)是一种用于评估一个词对一个文档集或语料库中某个文档重要性的统计方法。其核心思想是:

  • 一个词在文档中出现的次数越多,对文档的重要性越高(词频 TF);
  • 一个词在整个语料库的文档中出现的次数越少,对区分文档的重要性越高(逆文档频率 IDF)。
  • 最终,一个词的 TF-IDF 值为TF 值 × IDF 值,值越高则该词对当前文档的代表性越强。

1.语料库概念理解

(1)语料库中存放的是在语言的实际使用中真实出现过的语言材料。

(2)语料库是以电子计算机为载体承载语言知识的基础资源。

(3)真实语料需要经过加工(分析和处理),才能成为有用的资源。

举例理解:假设有一个文件夹,文件夹里面有2000篇文章,想要提取出每篇文章中的关键词。

这里的文件夹内的文件就是一个语料库 ,而关键词要具有代表性,能够作为本文章与其他文章之间区分开来

二、TF-IDF 的计算公式

1. 词频(TF)

词频表示某个词在当前文档中出现的频率,计算公式为:

                      

例如:一篇文档总共有 100 个词,其中 “苹果” 出现了 5 次,则 “苹果” 在该文档中的 TF 值为 (5/100 = 0.05)。

2. 逆文档频率(IDF)

逆文档频率衡量词的普遍重要性,计算公式为:

                     

  • 分母加 1 是为了避免 “包含词 w 的文档数为 0” 时出现除以 0 的错误(平滑处理);
  • 若一个词在多数文档中都出现(如 “的”“是” 等停用词),其 IDF 值会很低;
  • 若一个词仅在少数文档中出现,其 IDF 值会很高。

例如:语料库有 1000 篇文档,其中 “苹果” 出现在 100 篇文档中,则 “苹果” 的 IDF 值为              

3. TF-IDF 值

最终,词w在文档d中的 TF-IDF 值为两者的乘积:

   

三、关键词提取之中文分词的实现

英文每个单词之间都有空格分开,中文之间则不存在这样的分隔符。

jieba分词的原理:

jieba是一个人工智能算法,jieba是基于隐马尔可夫链实现的,jieba分词的内部有点像辞海,分词的原理(以“我们在学Python办公自动化”为例)先找到’我‘,然后找到’我们’,其中'自动'和‘自动化都可以是一个词’。

lcut():jieba库里的一个方法,用来分词;cut_all是lcut中的一个参数,将参数设置为True,则函数会返回某一个句子的所有可能的切分结果。

add_word():向jieba的辞海中添加新的词,那么,我们下次进行分词时就能将句子中的词按照你添加的词进行分词。

load_userdict():将词库文件加载到jieba的辞海中,对文件的要求是一个词在文件中占一行,函数的参数是需要添加词库文件的路径。

lcut()方法:分词的结果

cut():分词的结果

四、TF-IDF简单案例实现

(1)数据集展示及解释

数据集总共有6行数据,整个数据集(即遮条数据)可以看成一个语料库,每一行可以看成一篇文章,每篇文章中有若干个词。

调用TF-IDF包,来计算每一行的关键词的TF-IDF的值,最终目标是实现把所有文章中的关键词都进行排序,并将排名前五的关键词都打印出来

(2)代码实现

1.调库读取文件

from sklearn.feature_extraction.text import TfidfVectorizer
import pandas as pd
inFile = open(r"task2_1.txt", "r")
corpos = inFile.readlines()

        cospos的数据类型及数据展示

 2.实例化,并调用fit_transform()

fit _transform作用:

fit 步骤:此步骤会分析输入的文本语料库(即 corpos),从中学习词汇表以及每个词的逆文档频率(IDF)值。词汇表涵盖了语料库中所有不同的词,而 IDF 值体现了每个词在整个语料库中的重要程度。
transform 步骤:在学习到词汇表和 IDF 值之后,该步骤会把输入的文本语料库转换为 TF-IDF 特征矩阵。TF-IDF 是一种衡量词在文档中重要性的统计方法,它综合考虑了词在文档中的出现频率(TF)以及词在整个语料库中的稀有程度(IDF)。

vectorizer=TfidfVectorizer()
tfidf=vectorizer.fit_transform(corpos)#打印tfidf的值
print(tfidf)

get_feature_names() 方法的作用就是返回这些特征(词汇)的名称,即这个数据集中所有单词,去重后的词汇集合

wordlist=vectorizer.get_feature_names()
print(wordlist)

wordlist的值,这里可以看出,它以列表的形式存储了所有词

tfidf值数据如下:

解释其含义:

以这个为例,(0,1)其中0是指这个词在数据集中处于那个文章中,这里是代表数据集的第一条数据“This is the first document”,这里的1是指在关键词列表(即wordlist)中的位置,可见这里的1对应word list中的第二个值document,0.4489258246711445这个数则是document的TF-IDF的值,表示这个词的重要程度。

3.为了方便观察数据,将tfidf的值转化为稀疏矩阵

df=pd.DataFrame(tfidf.T.todense(),index=wordlist)
print(df)

效果如下

这里的行是指每个单词,列是指这个单词位于那个文章中。

4.对df数据集进行排序,我们可以利用pd的特性,利用索引一列一列的取出排序

df.sort_value()排序,pandas类型数据排序,对值进行排序,因为pandas的数据有索引列

for i in range(len(corpos)):featurelist=df[[i]]feature_rank=featurelist.sort_values(by=i,ascending=False)    #对featurelist按数值排序,降序print(feature_rank.head(5))
#打印前五行的内容

这样就实现了对关键词进行排序,输出每篇文章前五的关键词

五、TF-IDF 的优势与适用场景

优势:

  1. 简单直观:原理易于理解,计算成本低;
  2. 效果稳定:在文本分类、关键词提取等任务中表现可靠;
  3. 可解释性强:权重直接反映词对文档的重要性。

适用场景:

  • 文本分类、情感分析;
  • 信息检索(如搜索引擎排序);
  • 关键词提取(如文章摘要生成);
  • 文档相似度计算。

六、总结

TF-IDF 作为一种经典的文本特征提取方法,以其简单高效的特点在 NLP 领域经久不衰。它通过词频和逆文档频率的加权,有效突出文档中的关键信息,为后续的文本分析任务奠定基础。

尽管近年来词向量(如 Word2Vec)、预训练模型(如 BERT)在语义理解上表现更优,但 TF-IDF 在轻量化场景、可解释性要求高的任务中仍不可替代。掌握 TF-IDF 的原理和实现,是入门文本处理的重要一步。

希望本文能帮助你理解 TF-IDF 的核心思想,欢迎在实际项目中尝试并优化这一方法!

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

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

相关文章

Flutter屏幕和字体适配(ScreenUtil)

一、简介 flutter_screenutil 是一个 Flutter 插件,专门用于处理屏幕适配问题。它简化了不同设备间尺寸差异的处理,确保你的应用在各种屏幕上都能保持良好的显示效果。开发者可以通过简单的调用来设置基于设计图尺寸的控件宽高和字体大小。 项目地址&a…

mimiconda+vscode

安装miniconda实现python包管理,并通过vscode进行编写python代码 miniconda简单介绍 Miniconda 是 Anaconda 公司的一个轻量级 Python 发行版本,它包含了最基本的包管理器 conda 和 Python 环境,只带最核心的组件,没有额外的大量科…

Windows文件时间修改指南:从手动到自动化

修改文件的时间属性可以满足多种需求。比如,它可以帮助整理文件,使得文件按照特定的时间顺序排列,有助于更好地管理资料。它的体积真小,才300多KB。能用来调整文件的创建时间、最后访问和修改时间。文件时间属性修改_NewFileTime.…

能刷java题的网站

以下是一些适合刷Java题的优质网站,涵盖从基础到进阶、算法面试及实战项目等多种需求: ​一、综合编程练习平台​ ​LeetCode​(leetcode.com) ​特点​:全球最知名的算法题库,含海量Java题目,分…

掘金数据富矿,永洪科技为山东黄金定制“数智掘金”实战营

在黄金开采的轰鸣声中,另一场静水深流的“掘金行动”正悄然展开。山东黄金集团,这个行业的巨头,在深挖地层宝藏的同时,也敏锐捕捉到数据洪流中蕴藏的价值富矿。然而,当海量业务数据汇聚,如何从中精准提炼决…

【论文阅读】BEVFormer论文解析及Temporal Self-Attention、Spatial Cross-Attention注意力机制详解及代码示例

BEVFormer: Learning Bird’s-Eye-ViewRepresentation from Multi-Camera Images via Spatiotemporal Transformers|Temporal Self-Attention、Spatial Cross-Attention注意力机制详解 BEVFormer(Bird’s-Eye-View Former)是一种先进的计算机视觉模型&am…

在 Ubuntu 中docker容器化操作来使用新建的 glibc-2.32

在 Ubuntu 中使用容器化操作来使用新建的 glibc-2.32,可以通过创建自定义 Docker 镜像来实现。以下是完整的解决方案: 方案 1:创建包含 glibc-2.32 的 Docker 镜像 1. 创建 Dockerfile dockerfile # 使用 Ubuntu 基础镜像 FROM ubuntu:20.04# 安装编译依赖 RUN apt-get …

GOOUUU ESP32-S3-CAM 果云科技开发板开发指南(二)(超详细!)Vscode+espidf 摄像头拍摄视频实时传输到LCD,文末附源码

书接上回,上一篇blog是使用esp32s3通过ov2640摄像头拍摄到一帧照片,并把它保存到了SD卡中,这第二篇就通过LCD将拍摄到的图片显示到LCD上,本次分享硬件使用的 ESP32-S3-CAM 果云科技开发板,并且使用了配套的LCD扩展板&a…

攻防世界-ics-05(远程文件执行)

一.审题大致浏览一下网页,发现就这边会有东西。看一下源码会不会有东西或者稍微点击一下这个页面的内容看会不会出现东西。点击了一下这个云平台设备维护中心发现url变了,是get的方法传page参数二.尝试漏洞类型自己这边试了sql注入发现不是,试…

Dell PowerEdge: Servers by generation (按代系划分的服务器)

Dell PowerEdge: Servers by generation {按代系划分的服务器}1. Table of 17th, 16th, 15th, and 14th Generation PowerEdge servers2. List of all PowerEdge server models including Type, CPU vendor, Generation, and Remote ManagementReferencesPowerEdge: Servers by…

Rust学习笔记(二)|变量、函数与控制流

本篇文章包含的内容1 变量与常量2 类型2.1 标量类型2.2 复合类型3 函数4 控制流4.1 分支4.2 循环1 变量与常量 在Rust中,使用let关键字声明一个变量,变量默认是不可变的。如果要声明可变变量,需要使用mut关键字将其声明为可变变量。 let x …

【渲染流水线】[几何阶段]-[图元装配]以UnityURP为例

【从UnityURP开始探索游戏渲染】专栏-直达 前情提要 【渲染流水线】主线索引-从数据到图像以UnityURP为例-CSDN博客 图元装配负责将离散顶点组装成完整几何图元(如点、线、三角形、三角形条带) (对渲染的探索是个持续不断完善的过程&#x…

jvm有哪些垃圾回收器,实际中如何选择?

7.G1收集器一款面向服务端应用的垃圾收集器。 特点如下: 并行与并发:G1能充分利用多CPU、多核环境下的硬 件优势,使用多个CPU来缩短Stop-The-World停顿时间。部分收集器原本需要停顿Java线程来执行GC动作,G1收 集器仍然可以通过并…

多语言与隐形攻击:LLM安全防线为何被频频突破?

你是否曾以为,只要加装了“防火墙”,大型语言模型(LLM)就能高枕无忧?Trendoyl 的实际测试却让我大吃一惊:即便部署了 Meta 的 Llama Guard,攻击者还是能轻松用多语种、字符混淆,甚至…

分布式光伏气象站:为光伏电站的 “气象感知眼”

分布式光伏气象站:为光伏电站的 “气象感知眼”柏峰 【BF-GFQX】在全球能源转型的浪潮中,分布式光伏发电凭借其就近消纳、清洁高效的优势,成为能源结构优化的重要力量。而分布式光伏气象站,作为光伏电站的 “智慧感知眼”&#xf…

TCP与UDP:如何选择最佳传输协议

应用场景选择如果需要可靠传输,首选 TCP如果需要传输的数据包很大,也首选 TCP绝大部分的场景,都可以优先考虑 TCPUDP 相比于 TCP,最大的优点在于传输效率有些情况,既需要可靠性又需要性能,这个时候时候就需…

《Leetcode》-面试题-hot100-栈

题目列表 20. 有效的括号 简单难度 leetcode链接 155. 最小栈 中等难度 leetcode链接 394. 字符串解码 中等难度 leetcode链接 739. 每日温度 中等难度 leetcode链接 84. 柱状图中最大的矩形 困难难度 leetcode链接 题目 (1)有效的括号 题目 给…

GPT-5、Claude-4 同台亮相!OneEval发布全新“大模型+知识库”评测白皮书!

OneEval官网地址:http://OneEval.OpenKG.cnOneEval文章链接:https://arxiv.org/abs/2506.12577要点导读 今年4月,OpenKG发布“大模型知识库”融合能力评估榜单OneEval v1.0。近期,OpenKG在此基础上,组织撰写了OneEv…

【最新版】沃德云商协系统全开源+uniapp小程序

一.介绍沃德云商协是一款基于FastAdmin(thinkphp)Uniapp开发的“多组织”的云服务平台,打造总商会、总协会、总校友会、工商联等多组织无障碍沟通合作平台,让各大分会、各大分校友会、分组织实现轻松管理,线上宣传展示…

Wireshark专家模式定位网络故障:14种TCP异常深度解剖

TCP连接如同精密运转的传送带,每一个异常数据包都是故障的早期信号。作为网络工程师的“外科手术刀”,Wireshark在TCP故障诊断领域的价值无可替代。本文将通过14个真实故障场景,揭示如何利用Wireshark专家系统(Expert System&…