当前位置: 首页 > ai >正文

TF-IDF提取关键词(附实战案例)

详细介绍 TF-IDF

TF-IDF(Term Frequency-Inverse Document Frequency)是一种用于信息检索与文本挖掘的常用加权技术,其核心思想是通过衡量词语在文本中的重要程度来实现文本特征提取,广泛应用于搜索引擎排序、文本分类、关键词提取等领域。

一、TF-IDF 的核心原理

TF-IDF 的核心逻辑基于两个假设:

  1. 一个词语在某篇文本中出现的频率越高,对该文本的主题越重要(TF 维度)。
  2. 一个词语在整个语料库的所有文本中出现的频率越低,其区分不同文本的能力越强(IDF 维度)。

最终,某个词语在某篇文本中的 TF-IDF 权重为TF 值与 IDF 值的乘积,权重越高则该词语对文本的代表性越强。

二、TF(词频)的计算

TF(Term Frequency)指某个词语在一篇文本中出现的频率,用于衡量词语在单篇文本中的重要性。

常见计算方式

  1. 原始词频:词语在文本中出现的次数与文本总词数的比值
    公式:


    例:若文本 “我爱自然,自然很美” 总词数为 6,“自然” 出现 2 次,则 TF (自然,d)=2/6≈0.33。

  2. 对数归一化:避免高频词权重过高,公式为 TF(t,d)=1+log(出现次数)(若出现次数为 0 则取 0)。
    例:“自然” 出现 2 次,TF=1+log (2)≈1.69。

  3. 布尔值:仅标记是否出现,出现则为 1,否则为 0。

三、IDF(逆文档频率)的计算

IDF(Inverse Document Frequency)指词语在整个语料库中出现的文档比例的反比,用于衡量词语的 “独特性”—— 越稀有(仅在少数文档中出现)的词语,IDF 越高。

常见计算方式

1、基本公式

  • 分母加 1 是为了避免 “包含词语 t 的文档数为 0” 时出现除以 0 的错误(平滑处理)。
  • 例:语料库有 1000 篇文档,“自然” 出现在 100 篇文档中,则 IDF (自然)=log (1000/(100+1))≈log (9.9)≈2.30。
  • 若词语 “量子” 仅出现在 1 篇文档中,IDF=log (1000/(1+1))≈log (500)≈6.21,远高于 “自然”,说明 “量子” 更具区分度。

2、其他变体

  • 无平滑处理:

              (可能出现除 0 错误)。

  • 加 1 平滑且分子加 1:

                进一步稳定数值。

四、TF-IDF 的最终计算

某个词语在某篇文本中的 TF-IDF 权重为 TF 与 IDF 的乘积:

示例

假设:

  • 文本 d 中 “自然” 的 TF=0.33,
  • 语料库中 “自然” 的 IDF≈2.30,
    则 TF-IDF (自然,d)=0.33×2.30≈0.76。

五、TF-IDF 的应用场景

  1. 关键词提取:通过计算文本中所有词语的 TF-IDF 权重,取权重最高的词语作为关键词。
    例:科技文章中 “人工智能” TF 较高且 IDF 较高,易被提取为关键词;而 “的”“是” 等高频虚词 IDF 极低,权重接近 0,会被忽略。

  2. 文本分类与聚类:将文本转换为 TF-IDF 向量(每个维度对应一个词语的 TF-IDF 值),作为机器学习模型的输入特征。

  3. 搜索引擎排序:在搜索时,计算查询词与文档的 TF-IDF 匹配度,匹配度高的文档排名更靠前。

  4. 相似度计算:通过比较两篇文本的 TF-IDF 向量余弦相似度,衡量文本内容的相似性。

六、TF-IDF 的优缺点

优点

  • 简单高效:计算逻辑直观,易于实现,对硬件资源要求低。
  • 实用性强:能有效过滤 “的”“是” 等无意义的高频词(虚词),突出有实际意义的词语(实词)。
  • 可解释性好:权重高低可直接对应词语的重要性,结果易理解。

缺点

  • 忽略语义关系:仅基于词频统计,无法识别同义词(如 “电脑” 和 “计算机” 被视为不同词语)或上下文语义。
  • 对低频词不友好:若词语在单篇文本中出现 1 次但在语料库中稀有,可能被赋予过高权重,而实际重要性可能较低。
  • 静态权重:IDF 值依赖于语料库,若语料库更新,需重新计算,无法动态适应新数据。

七、TF-IDF 的扩展与改进

为弥补缺陷,实际应用中常结合以下方法:

  • 结合词向量:如 Word2Vec、BERT 等,保留语义信息。
  • n-gram 模型:将词语组合(如 “自然语言”)作为特征,捕捉短语信息。
  • 加权调整:对专业领域词汇手动调整 IDF 权重,提升领域适应性。

TF-IDF 实战案例:基于 sklearn 的文本关键词提取与分析

在文本挖掘中,TF-IDF 是提取文本关键信息的经典方法。本文将通过实际案例,使用scikit-learn库中的TfidfVectorizer工具对文本语料进行分析,展示 TF-IDF 的计算过程与应用价值。

一、案例背景与数据准备

1. 语料库内容

本次使用的语料库(task2_1.txt)包含 6 篇文本,内容如下:

This is the first document
This document is the second document
And this is the third one
Is this the first document
This line has several words
This is the final document

2. 核心目标

  • 计算每篇文本中词语的 TF-IDF 权重
  • 提取每篇文本的关键词(TF-IDF 权重最高的词语)

二、代码实现与解析

1. 环境准备

需安装scikit-learnpandas库:

pip install scikit-learn pandas

2. 完整代码与步骤说明

# 导入必要库
from sklearn.feature_extraction.text import TfidfVectorizer
import pandas as pd# 1. 读取语料库
infale = open('task2_1.txt')  # 打开文本文件
corpus = infale.readlines()   # 按行读取文本,每行为一篇文档
infale.close()  # 关闭文件# 2. 初始化TF-IDF向量器并计算权重
vectorizer = TfidfVectorizer()  # 默认参数:过滤停用词(无,需手动设置)、分词方式为空格分割
tfidf = vectorizer.fit_transform(corpus)  # 拟合语料并转换为TF-IDF矩阵# 3. 查看TF-IDF矩阵(稀疏矩阵形式)
print("TF-IDF稀疏矩阵:")
print(tfidf)  # 输出格式:(文档索引, 词语索引) 权重值# 4. 获取词语列表(特征名)
wordlist = vectorizer.get_feature_names_out()  # 注意:新版本sklearn使用get_feature_names_out()
print("\n词语列表:")
print(wordlist)  # 输出所有不重复的词语# 5. 转换为DataFrame便于查看
df = pd.DataFrame(tfidf.T.todense(), index=wordlist)  # 转置后行=词语,列=文档
print("\nTF-IDF权重矩阵:")
print(df)# 6. 提取每篇文档的关键词(权重最高的词语)
col_max_rows = df.idxmax(axis=0)  # 按列(文档)取最大值对应的行名(词语)
print("\n每篇文档的关键词:")
print(col_max_rows)

三、结果分析

1. 词语列表

语料库中提取的不重复词语共 12 个

['and', 'document', 'final', 'first', 'has', 'is', 'line', 'one', 'several', 'second', 'the', 'third', 'this', 'words']

2. TF-IDF 权重矩阵关键值

词语文档 1(第 1 行)文档 2(第 2 行)文档 3(第 3 行)文档 4(第 4 行)文档 5(第 5 行)文档 6(第 6 行)
first高(0.47)00高(0.47)00
second0高(0.43)0000
third00高(0.47)000
final00000高(0.47)
line0000高(0.47)0

3. 每篇文档的关键词

0      first
1     second
2      third
3      first
4       line
5      final
  • 文档 1 和文档 4 均含 “first”,且该词在其他文档中极少出现,因此权重最高
  • 文档 2 的 “second”、文档 3 的 “third”、文档 5 的 “line”、文档 6 的 “final” 均为各自独有的标志性词语,成为关键词

四、案例结论

  1. TF-IDF 的核心作用:成功过滤了 “this”“is”“the” 等高频通用词(权重低),突出了 “first”“second” 等具有区分度的词语。
  2. 关键词提取逻辑:每篇文档的关键词均为在该文档中高频出现且在其他文档中稀有的词语,符合文本主题特征。
  3. 实际应用价值:该方法可直接用于文本分类、搜索引擎排序等场景,例如通过关键词快速判断文档主题相关性。

http://www.xdnf.cn/news/17471.html

相关文章:

  • 商业解决方案技术栈总结
  • CVPR医学图像三套创新方案:通用分割+3D高效解码+SSM肿瘤定位(附链接)
  • 算法训练营day44 动态规划⑪ 1143.最长公共子序列、1035.不相交的线、53. 最大子序和、392.判断子序列
  • 【Redis】持久化方案——RDB和AOF
  • Vue3从入门到精通: 2.5 Vue3组件库开发与设计系统构建
  • 海关 瑞数 失信企业 逆向 分析 后缀 rs
  • Java高并发场景下的缓存穿透问题定位与解决方案
  • MySQL的存储引擎:
  • Java中new的相关知识
  • TDengine IDMP 快速体验(方式二 通过 docker)
  • 系统测试讲解 - Java使用selenium实现滑块验证的处理详解
  • Qt 框架全面解析:从基础到应用
  • 亚麻云之静态资源管家——S3存储服务实战
  • 在Word和WPS文字一页中实现一栏与多栏混排
  • 瑞芯微 RK3588 平台驱动开发 学习计划
  • OpenEnler等Linux系统中安装git工具的方法
  • 机器学习-----K-means算法介绍
  • 数据类型全解析
  • PostgreSQL因为A/B switch以及group表过多导致WAL full的情况讨论
  • 冒泡排序实现以及优化
  • django基于Python的设计师作品平台的数据可视化系统设计与实现
  • 数字图像处理2——图像增强
  • Java设计模式之开闭原则介绍与说明
  • TypeScript中的type和interface的区别是什么?
  • 红楼梦文本数据分析
  • LeetCode 869.重新排序得到 2 的幂:哈希表+排序(一次初始化)
  • 前端开发的奇技淫巧 --- 持续更新中
  • 使用线性降维方法进行数据降维
  • 使用tcp ntrip 协议 接收数据报错 java.net.SocketException: Connection reset
  • MariaDB 数据库管理与web服务器