当前位置:网站首页>使用scikit-learn计算文本TF-IDF值
使用scikit-learn计算文本TF-IDF值
2022-08-04 17:39:00 【51CTO】
一、TF-IDF介绍
(一)术语介绍
TF-IDF(Term Frequency-InversDocument Frequency)是一种常用于信息处理和数据挖掘的加权技术。该技术采用一种统计方法,根据字词的在文本中出现的次数和在整个语料中出现的文档频率来计算一个字词在整个语料中的重要程度。它的优点是能过滤掉一些常见的却无关紧要本的词语,同时保留影响整个文本的重要字词。计算方法如下面公式所示。

其中,式中tfidfi,j 表示词频tfi,j和倒文本词频idfi的乘积。TF-IDF值越大表示该特征词对这个文本的重要性越大。
TF(Term Frequency)表示某个关键词在整篇文章中出现的频率。
IDF(InversDocument Frequency)表示计算倒文本频率。文本频率是指某个关键词在整个语料所有文章中出现的次数。倒文档频率又称为逆文档频率,它是文档频率的倒数,主要用于降低所有文档中一些常见却对文档影响不大的词语的作用。
下面公式是TF词频的计算公式:

其中,ni,j为特征词ti在文本dj中出现的次数,是文本dj中所有特征词的个数。计算的结果即为某个特征词的词频。
下面公式是IDF的计算公式:

其中,|D|表示语料中文本的总数,|Dti|表示文本中包含特征词ti的数量。分母+1是为了防止该词语在语料库中不存在,即分母为0,
关于这部分的介绍,也可参考 阮一峰的博客 http://www.ruanyifeng.com/blog/2013/03/tf-idf.html
(二)例子
假设有一篇文章包含了10000个词组,其中“中国”、“石油”、出现100次,“开采”出现200次,“的”出现500次(假设没有去除停用词)
语料库中共有1000篇文档,其中包含“中国”的文档有99篇,包含“石油”的文档59篇,包含“开采”的文档有19篇,包含“的”的文档有999篇
1 计算词频
根据公式:词频 = 某个词组在文章中出现次数/该文章总词组数
TF(中国)= 100/10000 = 0.01
TF(石油)= 100/10000 = 0.01
TF(开采)= 200/10000 = 0.02
TF(的)= 500/10000 = 0.05
2 计算逆文档频率
根据公式:逆文档频率 = log[语料库中文档总数/(包含该词组的文档数 + 1)]
这里的log表示以10为底
IDF(中国)= log(1000/100) = 1
IDF(石油)= log(1000/60) = 1.221
IDF(开采)= log(1000/20) = 1.7
IDF(开采)= log(1000/1000) = 0
由上述结果可以发现,当某个词在语料库中各个文档出现的次数越多,它的IDF值越低,当它在所有文档中都出现时,其IDF计算结果为0,而通常这些出现次数非常多的词或字为“的”、“我”、“吗”等,它对文章的权重计算起不到较大的作用。
3 计算TF-IDF值
根据公式:TF-IDF = 词频 * 逆文档频率
TF-IDF(中国) = 0.01 * 1 = 0.01
TF-IDF(石油) = 0.01 * 1.221 = 0.01221
TF-IDF(开采) = 0.02 * 1.7 = 0.0034
TF-IDF(的) = 0.05 * 0 = 0
通过计算结果可以发现,如果只选取一个关键词,则整篇文章是关于“开采”的;如果选取两个关键词,则整篇文章是关于“开采”、“石油”的。
二、用scikit-learn计算TF-IDF值
(一)例1
运行结果:
分析:
1.CountVectorizer
CountVectorizer类会将文本中的词语转换为词频矩阵,例如矩阵中包含一个元素a[i][j],它表示j词在i篇文档中出现的频次。它通过fit_transform函数计算各个词语出现的次数,通过get_feature_names()可获取词袋中所有文本的关键字(英语是按字母顺序排列的),通过toarray()可看到词频矩阵的结果。
从结果可以看出,总共出现了三个词:
[‘aaa’, ‘bbb’, ‘ccc’]
同时在输出每个句子中包含特征词的个数。例如,第一句“aaa ccc aaa aaa”,它对应的词频为[3, 0, 1],即’aaa’出现了3次,’bbb’出现了0次,’ccc’出现了1次。
2.TfidfTransformer
TfidfTransformer用于统计vectorizer中每个词语的TF-IDF值。
具体计算过程可以参考sklearn的官方文档
http://scikit-learn.org/stable/modules/feature_extraction.html#text-feature-extraction
中的4.2.3.4部分。
sklearn的计算过程有两点要注意:
一是sklean计算对数log时,底数是e,不是10
二是参数smooth_idf默认值为True,若改为False,即
则计算方法略有不同,导致结果也有所差异:
(二)例2
这个例子旨在演示从文档里读入中文内容,并输出关键词和TF-IDF值
1 新建test.txt文件,内容如下
2 程序
运行结果:
三、参考
(1) http://www.ruanyifeng.com/blog/2013/03/tf-idf.html
(3) http://scikit-learn.org/stable/modules/feature_extraction.html#text-feature-extraction
TopCoder & Codeforces & AtCoder交流QQ群:648202993更多内容请关注微信公众号
边栏推荐
- 88.(cesium之家)cesium聚合图
- yarn详细入门教程
- mysqlbinlog 超过500g自动删除,保留7个,求大深给个版本
- (1), the sequential storage structure of linear table chain storage structure
- 企业调查相关性分析案例
- WPF 修改 ItemContainerStyle 鼠标移动到未选中项效果和选中项背景
- Cron表达式
- 【 Gazebo introductory tutorial] speak the second model library into robot modeling and visualization (editor) model
- 我的大一.
- 《机器学习理论到应用》电子书免费下载
猜你喜欢

Flutter实战-请求封装(四)之gzip报文压缩

知乎高赞:拼多多和国家电网,选哪个?

Liunx删除乱码文件

.NET云原生应用发展论坛--8月7日邀你一起云上探索

《机器学习的随机矩阵方法》

Clearance sword refers to Offer——The sword refers to Offer II 010. and the sub-array of k

About the two architectures of ETL (ETL architecture and ELT architecture)

租房小程序登顶码云热门

Digital-intelligent supply chain management system for chemical manufacturing industry: build a smart supply system and empower enterprises to improve production efficiency

数字化金融企业的产品体系长啥样?
随机推荐
开发一套高容错分布式系统
第一章 对象和封装
小程序学习目标
【web自动化测试】Playwright快速入门,5分钟上手
信息系统项目管理师必背核心考点(六十)项目集管理
【日记】nodejs构建API框架以及RESTful API 和 JSON-RPC的取舍
如何模拟后台API调用场景,很细!
arm交叉编译
js函数传参是按值传递还是按引用传递?
面试官:可以谈谈乐观锁和悲观锁吗
软件测试高频面试题真实分享/网上银行转账是怎么测的,设计一下测试用例。
关于大学生内卷的文献综述
R语言使用ggpubr包的ggsummarystats函数可视化柱状图(通过ggfunc参数设置)、在可视化图像的下方添加描述性统计结果表格、palette参数配置柱状图及统计数据的颜色
集群监控——Zabbix使用
荣耀互联对外开放,赋能智能硬件合作伙伴,促进全场景生态产品融合
Learning and Exploration-Introducing Baidu Statistics to the Website
LeetCode Question of the Day - 1403. Minimum Subsequence in Non-Increasing Order
Cron表达式
框架整合(二)- 使用Apache ShardingSphere实现数据分片
About the two architectures of ETL (ETL architecture and ELT architecture)
