TF-IDF算法详解及sklearn代码实现

2023-05-16

目录

 

1.基本介绍

(1)TF(词频 Term Frequency)

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

(3)TF-IDF=TF*IDF

代码实现:

(1)sklearn代码实现

(2)Jieba实现TF-IDF算法


1.基本介绍

定义:TF-IDF(Term Frequency-Inverse Document Frequency, 词频-逆文本频率)。TF指词频,IDF指的是逆文本频率。TF-IDF是一种用于信息检索与数据挖掘的常用加权技术可以评估一个词在一个文件集或者一个语料库中对某个文件的重要程度。一个词语在一篇文章中出现的次数越多,同时在所有文章中出现的次数越少,越能够代表该文章的中心意思,字词的重要性随着它在文件中出现的次数成正比增加,但同时会随着它在语料库中出现的频率成反比下降,这就是TF-IDF的含义。适用于信息检索、文本挖掘的常用加权技术。

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

(1)TF(词频 Term Frequency)

词频表示词条(关键字)在文本中出现的频率。这个数字通常会被归一化(一般是词频除以文章总词数), 以防止它偏向长的文件。

公式:

 

 词条W在一个文件中出现的次数/该文件中所有词条数目

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

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

某一特定词语的IDF,可以由总文件数目除以包含该词语的文件的数目,再将得到的商取对数得到,主要思想是在语料库中包含某个词条的文档越少,该词条IDF越大,说明这个词就有很强的类别区分能力。

公式:

 其中,|D|是语料库中文件总数, |{j:ti∈dj}| 表示包含词语 ti 的文件数目(即 ni,j≠0 的文件数目)。如果该词语不在语料库中,就会导致分母为零,因此一般情况下使用 1+|{j:ti∈dj}|

则公式为:

 所有文件个数/出现该词条W的文件个数

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

(3)TF-IDF=TF*IDF

即某一个文件中高频出现的词条,以及该词条在整个语料库文件中低频出现的现象,可以产生出高权重的TF-IDF。因此,TF-IDF倾向于过滤掉常见的词语,保留重要的词语。即:字词的重要性随着它在文件中出现的次数成正比增加,但同时会随着它在语料库中出现的频率成反比下降。

代码实现:

(1)sklearn代码实现

from sklearn.feature_extraction.text import CountVectorizer
from sklearn.feature_extraction.text import TfidfTransformer

x_train = ['TF-IDF 主要 思想 是','算法 一个 重要 特点 可以 脱离 语料库 背景',
           '如果 一个 网页 被 很多 其他 网页 链接 说明 网页 重要']
#将文本中的词语转换为词频矩阵,矩阵元素a[i][j] 表示j词在i类文本下的词频
vectorizer = CountVectorizer(max_features = 10)
#计算每一个词语的TF-IDF权值
tf_idf_transformer = TfidfTransformer()
#计算每一个词语出现的次数#将文本转换为词频并计算tf-idf;fit_transform()方法用于计算每一个词语出现的次数
X = vectorizer.fit_transform(x_train)
tf_idf = tf_idf_transformer.fit_transform(X)
#将tf-idf矩阵抽取出来,元素a[i][j]表示j词在i类文本中的tf-idf权重
x_train_weight = tf_idf.toarray()
print('输出X_train文本变量:')
print(x_train_weight)

 注意:!!!:如果直接将tf_idf的结果打印输出来,会是下面这种样子:以稠密的方式给出结果,因为TF-IDF矩阵的维度是字典长度的平方,使用toarray()方法可以将结果展开成稀疏矩阵的样式。

稀疏矩阵样式:

 

其中关于函数CountVectorizer():

CountVectorizer是属于常见的特征数值计算类,是一个文本特征提取方法。对于每一个训练文本,它只考虑每种词汇在该训练文本中出现的频率。CountVectorizer会将文本中的词语转换为词频矩阵,它通过fit_transform函数计算各个词语出现的次数。

 其详细参数为:

CountVectorizer(input='content', encoding='utf-8',  decode_error='strict', strip_accents=None, lowercase=True, preprocessor=None, tokenizer=None, stop_words=None, 
token_pattern='(?u)\b\w\w+\b', ngram_range=(1, 1), analyzer='word', max_df=1.0, min_df=1, max_features=None, vocabulary=None, binary=False, dtype=<class 'numpy.int64'>)

 一般要设置的参数是:ngram_range,max_df,min_df,max_features等,具体情况具体分析

    用数据输入形式为列表,列表元素为代表文章的字符串,一个字符串代表一篇文章,字符串是已经分割好的。CountVectorizer同样适用于中文;

    CountVectorizer是通过fit_transform函数将文本中的词语转换为词频矩阵,矩阵元素a[i][j] 表示j词在第i个文本下的词频。即各个词语出现的次数,通过get_feature_names()可看到所有文本的关键字,通过toarray()可看到词频矩阵的结果。
 

(2)Jieba实现TF-IDF算法

import jieba.analyse
 
text='关键词是能够表达文档中心内容的词语,常用于计算机系统标引论文内容特征、信息检索、系统汇集以供读者检阅。关键词提取是文本挖掘领域的一个分支,是文本检索、文档比较、摘要生成、文档分类和聚类等文本挖掘研究的基础性工作'
 
keywords=jieba.analyse.extract_tags(text, topK=5, withWeight=False, allowPOS=())
print(keywords)

1.)    jieba.analyse.extract_tags(sentence, topK=20, withWeight=False, allowPOS=())
2.)    sentence 为待提取的文本
3.)    topK 为返回几个 TF/IDF 权重最大的关键词,默认值为 20
4.)    withWeight 为是否一并返回关键词权重值,默认值为 False
5.)    allowPOS 仅包括指定词性的词,默认值为空,即不筛选

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

TF-IDF算法详解及sklearn代码实现 的相关文章

随机推荐

  • COCO image caption数据集格式

    最近在做image caption的任务 xff0c 因为有自己的数据集 xff0c 因此需要自己创建字典 annotation等信息 而COCO官方针对coco image caption任务的数据集写了一个API接口 xff08 pyc
  • OpenCV的highgui模块

    Opencv把用于操作系统 文件系统以及摄像机等硬件设备交互的函数纳入到highgui xff08 High level Graphical User Interface 模块中 xff0c 我们可以利用该模块方便地打开窗口 显示图像 读出
  • 我程序人生的启蒙书

    是这本书 xff0c 大一的我接触了c和c 43 43 xff0c 为数学专业的我打开了通往另一个世界的道路 xff0c 做一名优秀的程序员 是这本书 xff0c 大一的我开始废寝忘食的学习 xff0c 自习室里往往就放着这一本数 xff0
  • 解决当使用element table fix column 固定列时,滚动条在固定列下方无法滚动

    解决当使用element table fix column 固定列时 xff0c 滚动条在固定列下方无法滚动 在全局css中添加这行代码 xff0c 提高滚动条在z轴的坐标 建议使用下面的代码 xff0c 使用参考文章里面的代码会导致 右f
  • 使用funcraft管理阿里云函数计算

    Fun 是一个用于支持Serverless应用部署的工具 xff0c 能帮助您便捷地管理函数计算 API 网关和日志服务等资源 它通过一个资源配置文件 xff08 template yml xff09 xff0c 协助您进行开发 构建和部署
  • 阿里云 ServerLess:Todo list 应用安装

    安装Node js环境 执行如下命令 xff0c 下载Node js安装包 xff1a wget https npm taobao org mirrors node v12 4 0 node v12 4 0 linux x64 tar xz
  • 如何通过CSS绘制三角形和小箭头

    1 绘制三角形的作用 xff0c 主要是提供指示性 xff0c 如下图 2 那么如何画出三角形呢 xff1f 我们先看下border的用法 lt div class 61 34 box 34 gt lt div gt box box siz
  • 利用python pil 实现给图片上添加文字

    最近的一个工程项目是讲文字添加到图像上 使用了opencv xff0c 结果发现利用opencv给图像添加文字有局限 xff08 1 xff09 可利用的字体类型比较少 xff0c 需要安装Freetype扩展 xff0c 比较复杂 xff
  • Sklearn到底是什么?

    更多详细代码关注sklearn中文官方文档 xff1a http www scikitlearn com cn http lijiancheng0614 github io scikit learn index html 1 概念 Skle
  • esp8266 error: espcomm_open failed

    gpi0 没有接地 xff0c 接上地就可以了注意和usb分出的gnd接口接的是同一个地
  • 微信小程序quickstart项目中有关userInfoReadyCallback的解释

    userInfoReadyCallback 在index js中定义 xff0c 在app js中使用 附app js代码 xff1a app js App onLaunch function 展示本地存储能力 var logs 61 wx
  • 微信小程序引入模块中wxml、wxss、js

    先描述下目录结构 xff0c 见下图 UI页面见下图 其中ok按键是引入的log模块 xff0c log模块非page页 indexButton是index页本身拥有的组件 xff0c index页直接导入Log模块中的组件 xff0c c
  • PHP解析错误 PHP Parse error: syntax error, unexpected '[' in

    之前做了一次php后台代码在不同服务器的迁移 xff0c 代码迁移到新服务器上 xff0c 代码运行不了 xff0c 返回500内部错误 500 内部错误 xff0c 就查看服务器上 var log php fpm www error lo
  • 微信小程序使用video组件时的一些坑

    xff08 1 xff09 mp4视频用video组件播放会卡顿 绿屏 尤其是在快进 拖动时间条时 在video组件上 xff0c 试试加个custom cache 61 false 属性 xff0c 可以完美解决卡顿 绿屏的现象 xff0
  • java中JFrame中函数removeAll的用法

    解答链接 用baidu搜了半天搜不出来 xff0c 用google一下就出来了 下面用自己的代码来解释下removeAll xff08 xff09 的用法 注意一定要在getContentPane xff08 xff09 中用removeA
  • ROS中的package.xml详解

    span class token prolog lt xml version 61 34 1 0 34 gt span span class token tag span class token tag span class token p
  • (一)了解Freertos

    关于Freertos FreeRTOS非常适合使用微控制器或小型微处理器的深度嵌入式实时应用程序 这种类型的应用程序通常包含硬实时需求和软实时需求 软实时需求 是那些规定了一个时间截止日期的需求 但是违反这个截止日期并不会使系统崩溃 例如
  • 如何关闭iOS系统自动更新提示?

    原文链接 xff1a https www zhihu com question 37297197 打开iPhone或者iPad的Safari浏览器 xff0c 复制以下网址并从自带浏览器打开 https oldcat me web NOOT
  • 大数据高级开发工程师——大数据相关工具之三 Maxwell

    文章目录 大数据相关工具Maxwell数据实时同步工具Maxwell 简介Maxwell工作原理MySQL Binlog 介绍1 Binlog简介2 Binlog的日志格式 Mysql 实时数据同步方案对比开启MySQL的BinlogMax
  • TF-IDF算法详解及sklearn代码实现

    目录 1 基本介绍 xff08 1 xff09 TF xff08 词频 Term Frequency xff09 xff08 2 xff09 IDF xff08 逆向文件频率 Inverse Document Frequency xff09