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

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.dtcms.com/a/324041.html

相关文章:

  • ​LabVIEW键盘鼠标监控
  • Python 2025:最新技术趋势与展望
  • [激光原理与应用-223]:机械 - 机加厂加工机械需要2D还是3D图?
  • 红楼梦文本数据分析
  • Fish shell的abbr命令行参数介绍和Bat文件查看工具
  • 诺基亚就4G/5G相关专利起诉吉利对中国汽车及蜂窝模组企业的影响
  • (一)Tailwindcss
  • 【开源】分层状态机(HFSM)解析:复杂逻辑的清晰表达与FPGA实现(附完整的Verilog交通灯案例及仿真)
  • Loki+Alloy+Grafana构建轻量级的日志分析系统
  • aurora接口ufc控流设计
  • Rust面试题及详细答案120道(11-18)-- 控制流与函数
  • Docker 镜像常见标签(如 `标准`、`slim`、`alpine` 和 `noble`)详细对比
  • 利用 SD-WAN 技术优化机房运维与网络安全评估的最佳实践
  • 2025下半年AI技术热点全景透视:从多模态革命到具身智能爆发
  • SpringMVC的知识点总结
  • Microsoft Store​​ 总是打不开页面怎么办
  • LeetCode131~150题解
  • opencv:图像轮廓检测与轮廓近似(附代码)
  • 浏览器CEFSharp88+X86+win7 之js交互开启(五)
  • 人工智能系列(8)如何实现无监督学习聚类(使用竞争学习)?
  • Lua基础+Lua数据类型
  • Java学习第一百二十一部分——HTTP
  • 超越基础!一文掌握CNN/Transformer/MoE架构,实战多模态AI(第三章)
  • 《解锁 C++ 基础密码:输入输出、缺省参数,函数重载与引用的精髓》
  • NLP 2025全景指南:从分词到128专家MoE模型,手撕BERT情感分析实战(第四章)
  • FlinkSQL Joins全解析
  • Spring基于XML的自动装配
  • 低版本 IntelliJ IDEA 使用高版本 JDK 语言特性的问题
  • IntelliJ IDEA 2025.2 重磅发布
  • 第16届蓝桥杯Scratch选拔赛初级及中级(STEMA)2025年1月12日真题