首页 > 其他分享 >TF-IDF原理及Sklearn实现

TF-IDF原理及Sklearn实现

时间:2023-12-06 17:13:59浏览次数:30  
标签:idf IDF 词频 tf TF 文本 Sklearn

TF-IDF算法介绍

TF-IDF(term frequency–inverse document frequency,词频-逆向文件频率)是一种用于信息检索(information retrieval)与文本挖掘(text mining)的常用加权技术。

TF-IDF是一种统计方法,用以评估一字词对于一个文件集或一个语料库中的其中一份文件的重要程度。字词的重要性随着它在文件中出现的次数成正比增加,但同时会随着它在语料库中出现的频率成反比下降。

TF-IDF的主要思想是:如果某个单词在一篇文章中出现的频率TF高,并且在其他文章中很少出现,则认为此词或者短语具有很好的类别区分能力,适合用来分类。

总结就是, 一个词语在一篇文章中出现次数越多, 同时在所有文档中出现次数越少, 越能够代表该文章.

TF是词频(Term Frequency)

词频(TF)表示词条(关键字)在文本中出现的频率。

这个数字通常会被归一化(一般是词频除以文章总词数), 以防止它偏向长的文件。

其中 ni,j 是该词在文件 dj 中出现的次数,分母则是文件 dj 中所有词汇出现的次数总和;

问题:

但是, 需要注意, 一些通用的词语对于主题并没有太大的作用, 反倒是一些出现频率较少的词才能够表达文章的主题, 所以单纯使用是TF不合适的。权重的设计必须满足:一个词预测主题的能力越强,权重越大,反之,权重越小。所有统计的文章中,一些词只是在其中很少几篇文章中出现,那么这样的词对文章的主题的作用很大,这些词的权重应该设计的较大。IDF就是在完成这样的工作.

IDF是逆向文件频率(Inverse Document Frequency)

逆向文件频率 (IDF) :某一特定词语的IDF,可以由总文件数目除以包含该词语的文件的数目,再将得到的商取对数得到。

如果包含词条t的文档越少, IDF越大,则说明词条具有很好的类别区分能力。

 

TF-IDF实际上是:TF * IDF

 某一特定文件内的高词语频率,以及该词语在整个文件集合中的低文件频率,可以产生出高权重的TF-IDF。因此,TF-IDF倾向于过滤掉常见的词语,保留重要的词语

TF-IDF应用

(1)搜索引擎;(2)关键词提取;(3)文本相似性;(4)文本摘要

 

Sklearn 实现TF-IDF

 1 from sklearn.feature_extraction.text import CountVectorizer
 2 from sklearn.feature_extraction.text import TfidfTransformer
 3  
 4 x_train = ['TF-IDF 主要 思想 是','算法 一个 重要 特点 可以 脱离 语料库 背景',
 5            '如果 一个 网页 被 很多 其他 网页 链接 说明 网页 重要']
 6 x_test=['原始 文本 进行 标记','主要 思想']
 7  
 8 #该类会将文本中的词语转换为词频矩阵,矩阵元素a[i][j] 表示j词在i类文本下的词频
 9 vectorizer = CountVectorizer(max_features=10)
10 #该类会统计每个词语的tf-idf权值
11 tf_idf_transformer = TfidfTransformer()
12 #将文本转为词频矩阵并计算tf-idf
13 tf_idf = tf_idf_transformer.fit_transform(vectorizer.fit_transform(x_train))
14 #将tf-idf矩阵抽取出来,元素a[i][j]表示j词在i类文本中的tf-idf权重
15 x_train_weight = tf_idf.toarray()
16  
17 #对测试集进行tf-idf权重计算
18 tf_idf = tf_idf_transformer.transform(vectorizer.transform(x_test))
19 x_test_weight = tf_idf.toarray()  # 测试集TF-IDF权重矩阵
20  
21 print('输出x_train文本向量:')
22 print(x_train_weight)
23 print('输出x_test文本向量:')
24 print(x_test_weight)

 

TF-IDF算法的不足

TF-IDF 采用文本逆频率 IDF 对 TF 值加权取权值大的作为关键词,但 IDF 的简单结构并不能有效地反映单词的重要程度和特征词的分布情况,使其无法很好地完成对权值调整的功能,所以 TF-IDF 算法的精度并不是很高,尤其是当文本集已经分类的情况下。

在本质上 IDF 是一种试图抑制噪音的加权,并且单纯地认为文本频率小的单词就越重要,文本频率大的单词就越无用。这对于大部分文本信息,并不是完全正确的。IDF 的简单结构并不能使提取的关键词, 十分有效地反映单词的重要程度和特征词的分布情 况,使其无法很好地完成对权值调整的功能。尤其是在同类语料库中,这一方法有很大弊端,往往一些同类文本的关键词被盖。

TF-IDF算法实现简单快速,但是仍有许多不足之处:

(1)没有考虑特征词的位置因素对文本的区分度,词条出现在文档的不同位置时,对区分度的贡献大小是不一样的。

(2)按照传统TF-IDF,往往一些生僻词的IDF(反文档频率)会比较高、因此这些生僻词常会被误认为是文档关键词。

(3)传统TF-IDF中的IDF部分只考虑了特征词与它出现的文本数之间的关系,而忽略了特征项在一个类别中不同的类别间的分布情况。

(4)对于文档中出现次数较少的重要人名、地名信息提取效果不佳。

标签:idf,IDF,词频,tf,TF,文本,Sklearn
From: https://www.cnblogs.com/huangm1314/p/11334115.html

相关文章

  • Misc_XCTF_WriteUp | a_good_idea
    题目分析压缩包开出只汤姆:一番检查后在十六进制文件末尾发现zip压缩包文件头:更改文件后缀名为zip,在压缩包里开出两只汤姆和一个文本文件。txt内容:“trytofindthesecretofpixels”,直译为:“试着找出像素的秘密”。根据这条提示我们打开StegSolve分别查看两张......
  • Flask-Restful-Api
    restful属于一种快速构建api的一种工具,和django的还是不相同的安装pipinstallflask-restful可以和django一样进行定义类视图的方式但是falskrestful中可以直接返回字典格式,它自动转换为json格式给客户端基本的使用fromflaskimportFlaskfromflask_restfulimp......
  • CTFpwn格式化字符串两种应用及2023ISCTF的fmt题解wp
    三个例子的引入目前我遇到的格式化字符串漏洞(formatstring,后文简称fmt)主要存在于printf函数,本文也就以printf举例。例一,标准格式的printf read(0,buf,33);printf("%s",buf);例二,占位符与变量 printf("%d%c%s",a,b,c);//%d%c%s会访问变量以输出整型,字符等。其中a,b,c为三......
  • NCTF2022-Crypto WP
    superecc题目fromCrypto.Util.numberimport*fromsecretsimportINF,flagassertflag[:5]==b'nctf{'classsuper_ecc:def__init__(self):self.a=73101304688827564515346974949973801514688319206271902046500036921488731301311......
  • Keil(C/C++混编)printf问题
    C++不支持UseMicroLIB,解决Keil的printf问题,现象:Debug下,点击三次run可以运行,烧入芯片独立运行死机#ifdef__cplusplusextern"C"{#endif#defineDEFAULT_HANDLE0x100;/**UARTprototypefunctions*/charUART_read(void){return0;}voidUART_write(char......
  • Misc_XCTF_WriteUp | base64stego
    题目提示:菜狗经过几天的学习,终于发现了如来十三掌最后一步的精髓题目:分析尝试打开压缩包,发现需要密码。但准备爆破的时候被提示zip未被加密:猜测是zip伪加密,打开十六进制文件,发现数据区的全局方式位标记第2/4个数是偶数0,而目录区的第2/4是奇数9:将9改为偶......
  • DASCTF Apr.2023 X SU战队2023开局之战-pdf_converter(_revenge)web-wp
    继续刷题ing~这次是追溯到今年四月的这个DASCTF首赛,闲来无事就看看打打复现啥的,争取多积累几个解题姿势。但后面题环境开不了,就先没打复现,难绷。pdf_converter(_revenge)进去感觉像Thinkphp,用个以前做过的报错payload试试能不能出版本:/index.php?s=captcha还真是。直接去搜......
  • Kiractf
    信息收集主机发现和端口扫描只开放了80的web服务​​‍WEB打点访问首页有文件上传,肯定可以利用一波。language那个页面甚至文件包含都写脸上了。root@Locklytmp/kiractf»curlhttp://192.168.56.112<inputtype="submit"value="upload"onclick="windo......
  • BUUCTF-RE-49-[羊城杯 2020]easyre
    BUUCTF-RE-[羊城杯2020]easyre进入main,简单分析之后进入encode_oneint__cdeclmain(intargc,constchar**argv,constchar**envp){intv3;//eaxintv4;//eaxintv5;//eaxcharStr[48];//[rsp+20h][rbp-60h]BYREFcharStr1[64];//[rsp+50h]......
  • Web_XCTF_WriteUp | upload1
    题目分析根据题目可知该题考查文件上传漏洞。用BurpSuite的内置浏览器打开环境。新建记事本编写一句话木马脚本:<?php@eval($_POST['r00ts']);?>保存为jpg格式。打开拦截,上传脚本。拦截到数据包:将脚本后缀名更改为php后放行:打开中国蚁剑并初始化,在数据管......