文本分析(非结构化数据挖掘)——特征词选择(基于TF-IDF权值)

news2025/4/2 10:17:42

TF-IDF是一种用于信息检索和文本挖掘的常用加权算法,用于评估一个词在文档或语料库中的重要程度。它结合了词频(TF)逆文档频率(IDF)两个指标,能够有效过滤掉常见词(如“的”、“是”等),同时突出对文档区分度高的关键词。

Get it :

  • TF-IDF 是什么:一种统计方法,衡量词在文档中的重要性。
  • 作用:TF-IDF主要用于关键词提取(也叫特征词提取)、文档相似度计算(将文档表示为 TF-IDF 向量,通过余弦相似度比较文档间的相似性)、文本分类与聚类
  • 适用场景:适合需要快速、可解释性强的文本分析任务。但对语义敏感的任务需结合深度学习方法。


一、TF(词频)

衡量一个词在当前文档文本中出现的频率,计算公式为:

或者:

意义:一个词在文档中出现的次数越多,可能越重要。

二、IDF(逆文档频率)

衡量一个词的普遍重要性,即它在整个IDF语料库中的罕见程度。计算公式为:

(加1是为了避免分母为0) 

IDF语料库:可以理解为一个txt文件,记录着每个词的IDF值。形如,

IDF
优惠8.5
包邮7.0
折扣8.0

意义:如果一个词在多数文档中都出现(如“的”),其IDF值会很低,反之则高。

三、TF-IDF的计算

TF-IDF有很多表达式形式,以其中一种简单的形式为例:

将TF和IDF相乘,得到词 t 在文档 d中的权重:

说明:某些计算分析工具(如python的jieba库)内置有官方的IDF语料库,无需自定义,只需要查表(IDF语料库)即可快速得到当前词的IDF值,而当前词的TF值就基于当前文本(即你要进行文本分析的文本、段落等) 来计算。因此,可以很快计算出TF-IDF。

核心思想:一个词在当前文档中出现次数多(TF高),且在语料库中罕见(IDF高),则TF-IDF值高,代表重要性强。

四、基于Python中jieba库的TF-IDF实现

方法:jieba.analyse.extract_tags()

方法的参数

参数名作用
topK返回关键词的数量。
withWeight是否返回关键词的权重值(True/False,默认 False)。
allowPOS指定保留的词性(如 ['n', 'v', 'ns'] 表示只提取名词、动词、地名)。默认为None,即不限词性

说明

  • 内置 IDF 语料库:jieba 自带一个预计算的 IDF 词典(基于大规模中文语料统计),默认无需自定义。

  • 用户可覆盖(自定义语料库):通过 jieba.analyse.set_idf_path() 加载自定义 IDF 文件(适用于专业领域或特殊需求)。

:大多数情况下,我们处理通用文本时,我们只需要使用内置的语料库即可,即直接调用jieba.analyse.extract_tags(),而不需要自定义语料库。当然了,可以自己去网上找语料库,又或者自己训练语料库(不建议)。

代码示例(使用内置语料库): 

import jieba.analyse

text = '无声的博弈:现代医疗体系中的生命与伦理在这个被科技重塑的时代,医疗早已超越了简单的治病救人范畴,演变成一场关乎生命质量、资源分配与社会公平的复杂博弈。当基因编辑技术让我们能够"设计"婴儿,当人工智能比医生更早发现癌症征兆,医疗的边界正在被不断拓展,同时也带来了一系列深刻的伦理困境。现代医疗体系呈现出明显的技术悖论。一方面,质子治疗、机器人手术等尖端技术创造了无数生命奇迹;另一方面,过度医疗、天价药费又使许多家庭陷入经济困境。美国国立卫生研究院的数据显示,约40%的医疗检查属于不必要的过度医疗,这不仅浪费资源,还可能给患者带来额外风险。这种技术崇拜背后的商业逻辑,常常使医疗偏离了"以患者为中心"的初衷。更为严峻的是全球医疗资源的结构性失衡。世界卫生组织报告指出,占全球人口84%的发展中国家只享有11%的医疗支出。在非洲部分地区,一位医生需要照顾上万名患者;而在发达国家,医疗资源过剩导致的"防御性医疗"屡见不鲜。这种不平等不仅体现在地域之间,即使在同一个国家,城乡差距、医保覆盖差异也制造着不同的生命预期。医疗本质上是对生命的敬畏与守护。古希腊医生希波克拉底誓言中"不伤害"的原则,至今仍是医者的基本信条。在技术狂奔的时代,我们更需要回归这一原点:医疗不是冰冷的仪器数据,而是对生命尊严的捍卫;不是商业利润的来源,而是社会良知的体现。当我们在ICU外做生死抉择时,真正考验的不是医疗水平,而是一个社会的文明程度。医疗的未来,应当是人本主义的复归。这需要建立更公平的资源分配机制,发展精准而适度的诊疗技术,培养既有专业能力又具人文关怀的医疗人才。唯有如此,医疗才能真正成为守护人类健康的坚固堡垒,而非加剧社会分化的又一鸿沟。'

# TF-IDF算法
keywords = jieba.analyse.extract_tags(
    text, 
    topK=5,                   # 提取前5个关键词
    withWeight=True,          # 返回权重值
    allowPOS=('n', 'vn', 'v') # 只提取名词、动名词、动词
)

print("TF-IDF关键词提取:")
for word, weight in keywords:
    print(f"{word}: {weight:.2f}")

# 输出如下:
# TF-IDF关键词提取:
# 医疗: 0.70
# 生命: 0.22
# 技术: 0.14
# 资源分配: 0.13
# 患者: 0.11

如果需要自定义语料库,则

import jieba.analyse

# 加载自定义IDF
jieba.analyse.set_idf_path("myIDF.txt")

text = "春季大促,全场优惠,满300包邮!"
keywords = jieba.analyse.extract_tags(text, topK=3)

还有就是,在计算TF-IDF之前,可以先加载停用词(过滤掉一些没有用的词,比如‘一些’,‘一个’等):

  • 停用词较多时:
import jieba.analyse

# 加载自定义IDF
jieba.analyse.set_idf_path("myIDF.txt")

# 设置停用词文件路径(停用词过多时)
jieba.analyse.set_stop_words("stop_words.txt")

text = "春季大促,全场优惠,满300包邮!"
keywords = jieba.analyse.extract_tags(text, topK=3)
  • 停用词较少时:
# 停用词较少时
from jieba.analyse import TFIDF

# 自定义停用词列表
stop_words = ["的", "是", "在", "了", "呢"]

# 初始化TF-IDF分析器并设置停用词
tfidf = TFIDF(stop_words=stop_words)

text = "深度学习是人工智能的核心技术。"
keywords = tfidf.extract_tags(text, topK=5)
print(keywords)  # 输出:['深度学习', '人工智能', '核心', '技术']

# 文章如有错误,欢迎大家指正。我们下期再见

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

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

相关文章

【JavaSE】小练习 —— 图书管理系统

【JavaSE】JavaSE小练习 —— 图书管理系统 一、系统功能二、涉及的知识点三、业务逻辑四、代码实现4.1 book 包4.2 user 包4.3 Main 类4.4 完善管理员菜单和普通用户菜单4.5 接着4.4的管理员菜单和普通用户菜单,进行操作选择(1查找图书、2借阅图书.....…

多线程(多线程案例)(续~)

目录 一、单例模式 1. 饿汉模式 2. 懒汉模式 二、阻塞队列 1. 阻塞队列是什么 2. 生产者消费者模型 3. 标准库中的阻塞队列 4. 自实现阻塞队列 三、定时器 1. 定时器是什么 2. 标准库中的定时器 欢迎观看我滴上一篇关于 多线程的博客呀,直达地址&#xf…

一个判断A股交易状态的python脚本

最近在做股票数据相关的项目,需要用到判断某一天某个时刻A股的状态,比如休市,收盘,交易中等,发动脑筋想了一下,这个其实还是比较简单的,这里我把实现方法分享给大家。 思路 当天是否休市 对于某…

闪记(FlashNote):让灵感快速成文的轻量级笔记工具

闪记(FlashNote):让灵感快速成文的轻量级笔记工具 你是否经常遇到这样的情况:桌面上放了一大堆的新建123.txt,想记录一个想法,应该是一键开个一个快捷键然后瞬间记录就自动保存了,现在的很多笔记…

《大模型部署》——ollama下载及大模型本地部署(详细快速部署)

ollama Ollama 是一款开源跨平台的大语言模型(LLM)运行工具,旨在简化本地部署和管理 AI 模型的流程。 下载ollama 进入官网下载https://ollama.com/ 选择需要的系统下载 下载完成后直接进行安装 下载大模型 选择想要部署的模型&#…

Geotools结合SLD实现矢量中文标注下的乱码和可用字体解析

目录 前言 一、需求溯源 1、原始的SLD渲染 2、最初的效果 二、问题修复 1、还是字符编码 2、如何选择可用的字体 3、如何查看支持的字体库 三、总结 前言 随着地理信息系统(GIS)技术的不断发展,矢量数据的可视化和标注成为了地理信息展…

基于Python与CATIA V5的斐波那契螺旋线自动化建模技术解析

引言 斐波那契螺旋线(Fibonacci Spiral)作为自然界广泛存在的黄金比例曲线,在工业设计、产品造型、机械工程等领域具有重要应用价值。本文将以Python控制CATIA V5进行参数化建模为例,深入解析三维CAD环境中复杂数学曲线的自动化生…

动态规划(11.按摩师)

题目链接:面试题 17.16. 按摩师 - 力扣(LeetCode) 解法: 状态表示: 对于简单的线性 dp ,我们可以⽤「经验 题⽬要求」来定义状态表⽰: 以某个位置为结尾,巴拉巴拉;…

CentOS下安装Docker,Docker下安装JDK\MYSQL\REDIS\NGINX

先用VM安装好Centos8.5,可以选择安装迷你版,我安装的是UI版。 然后用MobaXterm_Portable_v23.0_cn连上去,互访成功就可以往下操作。 1. 修改文件:就是要把之前的mirror替换成现在的vault cd /etc/yum.repos.d/sed -i s/mirrorl…

demo.launch(inbrowser=True, share=True)无法生成共享网址

Gradio 的共享功能无法正常工作,原因是缺少一个名为 frpc_windows_amd64_v0.3 用到代码 app.demo.launch(show_errorTrue, inbrowserTrue, shareTrue) show_errorTrue:这个参数的作用是当应用在启动过程中出现错误时,会显示错误信息。这对于调…

翻译: 人工智能如何让世界变得更美好二

Basic assumptions and framework 基本假设和框架 To make this whole essay more precise and grounded, it’s helpful to specify clearly what we mean by powerful AI (i.e. the threshold at which the 5-10 year clock starts counting), as well as laying out a fram…

【vue】editor富文本输入全英文,谷歌浏览器:元素不会自动换行bug

【vue】editor富文本输入全英文,谷歌浏览器:元素不会自动换行bug 解决方案:给元素一个宽度 100% .editor {width: 100%; }

# OpenCV实现人脸与微笑检测:从图像到视频的实战应用

OpenCV实现人脸与微笑检测:从图像到视频的实战应用 在计算机视觉领域,人脸检测和微笑检测是两个非常有趣且实用的任务。它们广泛应用于智能监控、社交媒体分析、人机交互等多个场景。本文将通过两个代码示例,详细介绍如何使用OpenCV实现人脸…

Kubernetes可视化面板——KubePi(Kubernetes Visualization Panel - kubepi)

Kubernetes可视化管理面板——KubePi 在云计算和容器化的大潮下,Kubernetes 已成为管理容器集群的事实标准。然而,面对复杂的集群管理和运维工作,一个直观、易用的可视化工具显得至关重要。KubePi 正是为此而生——一款专为简化 Kubernetes …

【区块链安全 | 第二十三篇】单位和全局可用变量(一)

文章目录 单位和全局可用变量(Units and Globally Available Variables)以太单位(Ether Units)时间单位(Time Units)保留关键字 单位和全局可用变量(Units and Globally Available Variables&am…

权重参数矩阵

目录 1. 权重参数矩阵的定义与作用 2. 权重矩阵的初始化与训练 3. 权重矩阵的解读与分析 (1) 可视化权重分布 (2) 统计指标分析 4. 权重矩阵的常见问题与优化 (1) 过拟合与欠拟合 (2) 梯度问题 (3) 权重对称性问题 5. 实际应用示例 案例1:全连接网络中的…

【现代深度学习技术】现代卷积神经网络06:残差网络(ResNet)

【作者主页】Francek Chen 【专栏介绍】 ⌈ ⌈ ⌈PyTorch深度学习 ⌋ ⌋ ⌋ 深度学习 (DL, Deep Learning) 特指基于深层神经网络模型和方法的机器学习。它是在统计机器学习、人工神经网络等算法模型基础上,结合当代大数据和大算力的发展而发展出来的。深度学习最重…

《异常检测——从经典算法到深度学习》30. 在线服务系统中重复故障的可操作和可解释的故障定位

《异常检测——从经典算法到深度学习》 0 概论1 基于隔离森林的异常检测算法 2 基于LOF的异常检测算法3 基于One-Class SVM的异常检测算法4 基于高斯概率密度异常检测算法5 Opprentice——异常检测经典算法最终篇6 基于重构概率的 VAE 异常检测7 基于条件VAE异常检测8 Donut: …

nut-ui下拉选的实现方式:nut-menu

nut-ui下拉选的实现方式:nut-menu 官方文档:https://nutui.jd.com/h5/vue/4x/#/zh-CN/component/menu 案例截图: nut-tab选项卡组件实现: 官方组件地址:https://nutui.jd.com/h5/vue/4x/#/zh-CN/component/tabs nut…

鸿蒙NEXT小游戏开发:扫雷

1. 引言 本文将介绍如何使用鸿蒙NEXT框架开发一个简单的扫雷游戏。通过本案例,您将学习到如何利用鸿蒙NEXT的组件化特性、状态管理以及用户交互设计来构建一个完整的游戏应用。 2. 环境准备 电脑系统:windows 10 工程版本:API 12 真机&…