TF-IDF(词频 - 逆文档频率)作为经典的文本特征提取算法,在自然语言处理(NLP)领域应用广泛。它能将文本转化为可量化的数值特征,为后续的数据分析和建模提供基础。本文结合实际场景,介绍如何用 Python 实现 TF-IDF 的常见应用。

一、环境准备

首先确保安装必要的库,最常用的是 scikit-learn(提供成熟的 TF-IDF 工具)和 nltk(可选,用于文本预处理):

pip install scikit-learn nltk

二、核心工具:TfidfVectorizer

scikit-learn 中的 TfidfVectorizer 是实现 TF-IDF 的核心工具,它集成了文本分词、词频计算、IDF 加权等功能,无需手动编写复杂公式。基本用法如下:

from sklearn.feature_extraction.text import TfidfVectorizer# 示例文本数据
documents = ["Python是一种流行的编程语言,适合数据分析和机器学习","机器学习是人工智能的一个分支,依赖大量数据训练模型","数据分析常用Python工具,如Pandas和NumPy,处理结构化数据","人工智能包括机器学习、自然语言处理等多个领域"
]# 初始化TF-IDF向量器(默认分词会按空格和标点分割,支持中文)
tfidf = TfidfVectorizer(max_features=100,  # 保留Top N高频词stop_words=["是", "的", "一种"],  # 自定义停用词(过滤无意义词汇)lowercase=False  # 不强制转为小写(中文无需小写处理)
)# 拟合数据并转换为TF-IDF矩阵
tfidf_matrix = tfidf.fit_transform(documents)# 获取词汇表(所有分词后的词语)
words = tfidf.get_feature_names_out()
print("词汇表:", words)# 输出TF-IDF矩阵(每行对应一篇文档,每列对应一个词的TF-IDF值)
print("\nTF-IDF矩阵形状:", tfidf_matrix.shape)  # (文档数, 词汇数)

三、实战应用场景

1. 自动提取文档关键词

关键词提取是 TF-IDF 最经典的应用之一。通过对单篇文档的 TF-IDF 值排序,可快速定位核心词汇。

def extract_keywords(tfidf_matrix, words, doc_index, top_n=3):"""提取指定文档的Top N关键词"""# 获取该文档的TF-IDF向量doc_tfidf = tfidf_matrix[doc_index].toarray()[0]# 按TF-IDF值降序排序,返回词语和分数keyword_scores = sorted(zip(words, doc_tfidf), key=lambda x: x[1], reverse=True)# 过滤分数为0的词,取前N个return [word for word, score in keyword_scores if score > 0][:top_n]# 提取第1篇文档(索引0)的关键词
print("文档1关键词:", extract_keywords(tfidf_matrix, words, doc_index=0))
# 输出示例:['Python', '编程语言', '数据分析']

应用场景:论文摘要关键词自动生成、新闻主题标签推荐、文档快速摘要。

2. 文本相似度计算

通过比较两篇文档的 TF-IDF 向量相似度,可判断内容相关性(如查重、推荐相似文章)。

from sklearn.metrics.pairwise import cosine_similarity# 计算文档间的余弦相似度(值越接近1,相似度越高)
similarity_matrix = cosine_similarity(tfidf_matrix)
print("\n文档相似度矩阵:")
for i in range(len(similarity_matrix)):for j in range(i+1, len(similarity_matrix)):print(f"文档{i+1}与文档{j+1}的相似度:{similarity_matrix[i][j]:.4f}")# 示例输出:文档2与文档4的相似度较高(都涉及“人工智能”“机器学习”)

应用场景:文章查重系统、推荐系统(如 “猜你喜欢”)、问答系统中匹配相似问题。

3. 文本分类预处理

TF-IDF 可将文本转化为机器学习模型能处理的数值特征,为分类任务提供输入。

from sklearn.model_selection import train_test_split
from sklearn.naive_bayes import MultinomialNB
from sklearn.metrics import accuracy_score# 准备带标签的文本数据(示例:科技类=0,教育类=1)
texts = ["Python用于数据分析和机器学习","人工智能技术在医疗领域的应用","中小学编程教育纳入课程体系","在线教育平台助力学生自主学习"
]
labels = [0, 0, 1, 1]  # 标签:科技=0,教育=1# 转换为TF-IDF特征
tfidf = TfidfVectorizer()
X = tfidf.fit_transform(texts)
y = labels# 划分训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.25, random_state=42)# 用朴素贝叶斯模型分类
model = MultinomialNB()
model.fit(X_train, y_train)# 预测并评估准确率
y_pred = model.predict(X_test)
print("\n分类准确率:", accuracy_score(y_test, y_pred))  # 示例:准确率1.0# 预测新文本类别
new_text = ["机器学习课程走进高中课堂"]
new_text_tfidf = tfidf.transform(new_text)
print("新文本预测类别:", model.predict(new_text_tfidf))  # 输出:1(教育类)

应用场景:垃圾邮件识别、情感分析(正面 / 负面评价)、新闻分类(科技 / 体育 / 娱乐)。

4. 搜索引擎基础

在简易搜索引擎中,可通过 TF-IDF 计算查询词与文档的相关性,返回最匹配的结果。

def search(query, documents, tfidf):"""根据查询词返回相关文档排序"""# 将查询词转换为TF-IDF向量query_tfidf = tfidf.transform([query])# 计算与所有文档的相似度similarities = cosine_similarity(query_tfidf, tfidf_matrix).flatten()# 按相似度降序返回文档索引return [documents[i] for i in similarities.argsort()[::-1] if similarities[i] > 0]# 搜索示例
query = "Python 数据分析"
print("\n搜索结果:")
for doc in search(query, documents, tfidf):print("-", doc)
# 输出:优先返回包含“Python”和“数据分析”的文档

应用场景:站内搜索、文档检索系统、智能客服知识库查询。

四、进阶技巧与优化

  1. 中文分词优化
    TfidfVectorizer 默认按标点和空格分词,对中文不够友好。可结合 jieba 进行精准分词:

    import jieba
    from sklearn.feature_extraction.text import TfidfVectorizer# 自定义分词函数
    def jieba_tokenizer(text):return jieba.lcut(text)  # 精确分词# 初始化向量器时指定分词函数
    tfidf = TfidfVectorizer(tokenizer=jieba_tokenizer)
    
  2. 停用词处理
    过滤无意义词汇(如 “的”“在”“吗”)可提升效果,可使用 nltk 或自定义停用词表:

    from nltk.corpus import stopwords
    # 下载英文停用词(中文需自定义)
    import nltk
    nltk.download('stopwords')
    english_stopwords = stopwords.words('english')
    tfidf = TfidfVectorizer(stop_words=english_stopwords)
    
  3. 参数调优

    max_features:限制词汇表大小,避免维度灾难;                                              ngram_range:支持词组特征(如 (1,2) 表示同时考虑单个词和词组);                      min_df/max_df:过滤在太少 / 太多文档中出现的词(如 min_df=2 表示只保留至少在 2 篇文档中出现的词)。

五、局限性与替代方案

TF-IDF 虽简单高效,但存在局限性:

忽略词语语义关系(如 “电脑” 和 “计算机” 无法识别为同义词);

对短文本效果较差,依赖词频统计;

无法捕捉上下文信息。

替代方案:

词向量(Word2Vec、GloVe):保留语义关系;

BERT 等预训练模型:捕捉上下文语义,适用于复杂 NLP 任务。

总结

TF-IDF 作为文本特征提取的 “基石算法”,凭借简单、高效、可解释性强的特点,在关键词提取、相似度计算、文本分类等场景中仍被广泛使用。通过 scikit-learn 等工具,我们可以快速将其应用到实际项目中,解决文本分析的基础问题。对于更复杂的语义理解需求,可结合词向量或预训练模型进一步优化,但 TF-IDF 仍是入门 NLP 的必备技能。

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

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

相关文章

Redis 缓存问题详解及解决方案

一、缓存击穿 (Cache Breakdown) 原理: 某个热点 Key 突然过期,同时大量并发请求该 Key,导致请求直接穿透缓存击穿到数据库。 解决方案: 互斥锁 (Mutex Lock) 当缓存失效时,仅允许一个线程重建缓存,其他线程…

一周一个数据结构 第一周 --- 顺序表(下)

文章目录一、ArrayList的构造二、ArrayList常见操作三、ArrayList的遍历四、ArrayList练习1.【小练习】2.杨辉三角3.简单的洗牌算法五、ArrayList小结在上一章节中,我们通过代码示例以及画图的方式详细了解了顺序表,并模拟实现了它。那么,是不…

OpenCV的关于图片的一些运用

一、读取图片通过cv2库中的imread()方法读取图片代码:import cv2 a cv2.imread(1.png) cv2.imshow(tu,a) b cv2.waitKey(4000) # 图片执行时间 cv2.destroyAllWindows() # 关闭所有端口 print("图像形状(shape):",a.shape) print…

【数据结构——并查集】

引入 并查集(Disjoint Set Union,DSU)是一种用于管理元素分组的数据结构。 合并(Union):将两个不相交的集合合并为一个集合。 查找(Find):确定某个元素属于哪个集合&…

在 Vue 中使用 ReconnectingWebSocket实现即时通讯聊天客服功能

在 Vue 中使用 ReconnectingWebSocketReconnectingWebSocket 是一个自动重连的 WebSocket 实现,非常适合在 Vue 项目中使用。下面是如何在 Vue 中集成和使用它的方法:搜索 "程序员老狼"安装 ReconnectingWebSocket首先,你需要安装…

智能体革命:网络安全人的角色重塑与突围指南

AI赋能千行百业的趋势不可逆转,当AI学会渗透测试,安全工程师的出路在哪里? 2025年8月7日,OpenAI正式发布GPT-5的消息刷屏科技圈。这个达到博士生水平的“统一”人工智能模型,将AI幻觉率降低60%,成本下降45%…

用于水T1值和脂肪分数量化的上半身自由呼吸磁共振指纹成像|文献速递-医学影像算法文献分享

Title题目Upper-body free-breathing Magnetic Resonance Fingerprinting applied tothe quantification of water T1 and fat fraction用于水T1值和脂肪分数量化的上半身自由呼吸磁共振指纹成像 01文献速递介绍磁共振指纹成像(MRF)是十年前推出的一种高…

Apache RocketMQ:消息可靠性、顺序性与幂等处理的全面实践

Apache RocketMQ 是一个高性能、高可靠的分布式消息中间件,广泛应用于异步通信、事件驱动架构和分布式系统中。本文深入探讨 RocketMQ 的消息可靠性、顺序性和幂等处理机制,结合 Redisson 分布式锁实现幂等消费,提供详细的代码示例和实践建议…

无服务器日志分析由 Elasticsearch 提供支持,推出新的低价层

作者:来自 Elastic Log Analytics Elastic Observability Logs Essentials 在 Elastic Cloud Serverless 上提供成本效益高、无麻烦的日志分析。 SREs 可以摄取、搜索、丰富、分析、存储和处理日志,而无需管理部署的运营开销。[](https://www.elastic.co…

(Arxiv-2025)Phantom-Data:迈向通用的主体一致性视频生成数据集

Phantom-Data:迈向通用的主体一致性视频生成数据集 paper是字节发布在Arxiv2025的工作 paper title:Phantom-Data: Towards a General Subject-Consistent Video Generation Dataset Code:链接 Abstract 近年来,主体到视频&#…

如何解决pip安装报错ModuleNotFoundError: No module named ‘mlflow’问题

【Python系列Bug修复PyCharm控制台pip install报错】如何解决pip安装报错ModuleNotFoundError: No module named ‘mlflow’问题 摘要 在Python开发中,pip install 报错是一种常见问题,尤其是在使用集成开发环境(IDE)如PyCharm时…

2020/12 JLPT听力原文 问题一 3番

3番:会社で女の人と男の人が話しています。女の人は倉庫に入るとき、どの順番で入口のボタンを押さなければなりませんか。 女:すみません。地下の倉庫に行って、資料を取ってきたいんですが、入口の開け方がわからなくて… 男:ああ、最近、管…

C#/.NET/.NET Core技术前沿周刊 | 第 49 期(2025年8.1-8.10)

前言 C#/.NET/.NET Core技术前沿周刊,你的每周技术指南针!记录、追踪C#/.NET/.NET Core领域、生态的每周最新、最实用、最有价值的技术文章、社区动态、优质项目和学习资源等。让你时刻站在技术前沿,助力技术成长与视野拓宽。 欢迎投稿、推荐…

基于强化学习的目标跟踪 研究初探

强化学习 目标跟踪Visual tracking by means of deep reinforcement learning and an expert demonstratorYOLO 检测下基于 ETC-DDPG 算法的无人机视觉跟踪基于特征与深度强化学习方法的机器人视觉伺服技术研究高性能可拓展视频目标跟踪算法研究基于目标运动与外观特征的多目标…

排序与查找,简略版

数组的排序 排序的基本介绍 排序是将一组数据,按照一定顺序进行排列的过程 排序的分类: 内部排序: 一次性适用数据量小的情况 将需要处理的数据都加载到内部存储器中进行排序。包括交换式排序,选择式排序,插入式排序 外…

打靶日常-XSS(反射型和存储型)

目录 小皮: 1. 2.这里需要登录,我们之前爆破出账号密码在这里就可以用​编辑 登录之后:​编辑 使用工具: 先输入正确字符进行测试:aaa 进行测试: 3.换种控制台显示 结果:(使用f12大法) DVWA: 反射型XSS: 低: ​编辑 中:大小写绕过: ​编辑 也可以双写绕过: ​编…

二叉搜索树深度解析:从原理实现到算法应用----《Hello C++ Wrold!》(18)--(C/C++)

文章目录前言二叉搜索树(二叉排序树或二叉查找树)二叉搜索树的模拟实现二叉搜索树和有序数组二分查找的比较两个搜索模型作业部分前言 二叉搜索树(Binary Search Tree,简称 BST)作为一种重要的树形数据结构&#xff0…

牛客.空调遥控二分查找牛客.kotori和气球(数学问题)力扣.二叉树的最大路径和牛客.主持人调度(二)

目录 牛客.空调遥控 二分查找 牛客.kotori和气球(数学问题) 力扣.二叉树的最大路径和 牛客.主持人调度(二) 牛客.空调遥控 枚举n个空调之后,使数组有序,左右下标,用二分查找,然后一个求 长度就好 二分查找 /二分理…

《嵌入式Linux应用编程(二):标准IO高级操作与文件流定位实战》

今日学习内容1. 行输入函数安全实践(1) fgets vs gets函数安全特性换行符处理缓冲区保护fgets指定读取长度(size-1)保留\n并添加\0安全(防溢出)gets无长度限制将\n替换为\0危险2. Linux标准文件流文件流符号设备 标准输入stdin键盘…

Springboot2+vue2+uniapp 小程序端实现搜索联想自动补全功能

目录 一、实现目标 1.1 需求 1.2 实现示例图: 二、实现步骤 2.1 实现方法简述 2.2 简单科普 2.3 实现步骤及代码 一、实现目标 1.1 需求 搜索联想——自动补全 (1)实现搜索输入框,用户输入时能显示模糊匹配结果 &am…