文本数据分析-(TF-IDF)(1)

embedded/2024/10/18 21:02:51/

文章目录

  • 一、TF-IDF简介
    • 1.意义
    • 2.TF与IDF
      • 1).TF(Term Frequency)
      • 2).IDF(Inverse Document Frequency)
      • 3).TF-IDF
  • 二、应用
  • 三、代码实现
    • 1.文件读取
    • 2.数据预处理
    • 3.排序和输出
    • 4.全部代码

一、TF-IDF简介

1.意义

TF-IDF(Term Frequency-Inverse Document Frequency)是一种在文本挖掘中广泛使用的特征向量化方法,用于评估一个词语对于一个文件集或一个语料库中的其中一份文件的重要程度。TF-IDF的主要思想是:如果某个词语或短语在一篇文章中出现的频率(TF,Term Frequency)高,并且在其他文章中很少出现(即IDF,Inverse Document Frequency,逆文档频率高),则认为这个词或者短语具有很好的类别区分能力,适合用来分类。

2.TF与IDF

1).TF(Term Frequency)

TF即词频,是指某个词语在文章中出现的次数。这个数字通常会被归一化(一般是词频除以文章总词数),以防止它偏向长的文件。
TF的计算公式为:
词频 ( T F ) = 某个词在文章中出现的次数 文章的总次数 词频(TF) = \frac{某个词在文章中出现的次数}{文章的总次数} 词频(TF)=文章的总次数某个词在文章中出现的次数

2).IDF(Inverse Document Frequency)

IDF即逆文档频率,其主要思想是:如果包含某个词语的文档越少,则IDF越大,说明这个词语具有很好的类别区分能力。

IDF的计算公式为:
I D F ( t ) = l o g N d f ( t ) + 1 ​ IDF(t)=log\frac{N}{df(t)+1} ​ IDF(t)=logdf(t)+1N

其中,

  • N 是文档集的总文档数。
  • df(t) 是包含词语 t 的文档数。分母加1是为了避免分母为0的情况。

3).TF-IDF

TF-IDF的计算公式则是TF和IDF的乘积:

其中,
T F − I D F ( t , d ) = T F ( t , d ) × I D F ( t ) TF-IDF(t,d)=TF(t,d)×IDF(t) TFIDF(t,d)=TF(t,d)×IDF(t)

  • TF(t,d) 是词语 t 在文档 d 中的词频。
  • IDF(t) 是词语 t 的逆文档频率。

二、应用

在文本挖掘和搜索引擎中,TF-IDF常被用于评估一个词语对于一个文件集或一个语料库中的其中一份文件的重要程度,进而可以用于信息检索、文本挖掘、用户建模、特征词权重计算等。通过计算文档中每个词的TF-IDF值,可以构建文档的向量表示,进而用于各种文本处理任务,如分类、聚类、相似度计算等。

三、代码实现

在Python中,scikit-learn库提供了TfidfVectorizer类,可以很方便地计算TF-IDF值。例如:
下列六行英语位于task2_1.txt文本中,代码很好地实现了从文本文件中读取数据,使用TfidfVectorizer计算TF-IDF值,并将结果转换为DataFrame以便进一步分析。
在这里插入图片描述

1.文件读取

from sklearn.feature_extraction.text import TfidfVectorizer
import pandas as pdinfile = open('task2_1.txt','r')corpus = infile.readlines()

打开一个名为 task2_1.txt 的文件,并以只读模式(‘r’)读取其内容。然后使用 readlines() 方法将整个文件的内容读入到一个列表中,其中每个元素都是文件中的一行。这个列表被赋值给变量 corpus。

2.数据预处理

vectorizer = TfidfVectorizer()
tfidf = vectorizer.fit_transform(corpus)
print(tfidf)
wordlist = vectorizer.get_feature_names_out() #获取特征名称,所有的词
print(wordlist)
df = pd.DataFrame(tfidf.T.todense(),index=wordlist)
print(df)
  • 计算TF-IDF:vectorizer 是 TfidfVectorizer 类的一个实例,它负责将文本转换为 TF-IDF
    特征。fit_transform 方法首先学习 corpus中的词汇表(即所有独特的词),然后计算每个文档(或语料库中的每个文本项)中这些词的 TF-IDF 值。
  • 获取特征名称:拟合数据后获取词汇表中所有特征(即词汇表中的词)的名称。
  • 构建DataFrame:使用了tfidf.T.todense()来转置矩阵并转换为密集格式,以便可以将其用作DataFrame的数据。

3.排序和输出

for i in range(0,6):featurelist = df.iloc[:,i].to_list()# featurelist = df.to_numpy().tolist()resdict = {} #排序看看输出结果对不对for j in  range(0,len(wordlist)):resdict[wordlist[j]] = featurelist[j]resdict = sorted(resdict.items(),key=lambda x:x[1],reverse=True)print(resdict)

选取所有的第 i 列,并将其转换为列表。然后创建了一个字典,并根据TF-IDF值对其进行了排序。

4.全部代码

from sklearn.feature_extraction.text import TfidfVectorizer
import pandas as pdinfile = open('task2_1.txt','r')corpus = infile.readlines()vectorizer = TfidfVectorizer()
tfidf = vectorizer.fit_transform(corpus)
print(tfidf)
wordlist = vectorizer.get_feature_names_out() #获取特征名称,所有的词
print(wordlist)
df = pd.DataFrame(tfidf.T.todense(),index=wordlist)
print(df)
for i in range(0,6):featurelist = df.iloc[:,i].to_list()# featurelist = df.to_numpy().tolist()resdict = {} #排序看看输出结果对不对for j in  range(0,len(wordlist)):resdict[wordlist[j]] = featurelist[j]resdict = sorted(resdict.items(),key=lambda x:x[1],reverse=True)print(resdict)

http://www.ppmy.cn/embedded/107638.html

相关文章

EmguCV学习笔记 VB.Net 10.1 人脸检测 CascadeClassifier类

版权声明:本文为博主原创文章,转载请在显著位置标明本文出处以及作者网名,未经作者允许不得用于商业目的。 EmguCV是一个基于OpenCV的开源免费的跨平台计算机视觉库,它向C#和VB.NET开发者提供了OpenCV库的大部分功能。 教程VB.net版本请访问…

Java基于微信小程序的美食推荐小程序,附源码

博主介绍:✌Java徐师兄、7年大厂程序员经历。全网粉丝13w、csdn博客专家、掘金/华为云等平台优质作者、专注于Java技术领域和毕业项目实战✌ 🍅文末获取源码联系🍅 👇🏻 精彩专栏推荐订阅👇🏻 不…

xxl-job分布式任务调度平台

XXL-JOB是一个分布式任务调度平台,由国人谢旺(Xie Wang)开发。它主要解决了在分布式系统中关于任务调度、定时执行、任务分片、失败重试、任务依赖等方面的问题。XXL-JOB提供了一个简单、易用、功能强大的解决方案,适用于需要定时…

Qt/QML学习-Calendar

QML学习 Calendar例程视频讲解代码 main.qml import QtQuick 2.15 import QtQuick.Window 2.15 import QtQuick.Controls 1.4 import QtQuick.Controls.Styles 1.4 import QtQuick.Controls 2.15Window {width: 640height: 480visible: truetitle: qsTr("Calendar"…

景联文科技:提供高质量多模态数据标注,推动智能化转型

随着人工智能技术的快速发展,多模态数据标注成为推动智能系统更深层次理解和应用的关键技术之一。 作为行业领先的多模态数据标注服务商,景联文科技凭借其在技术、流程和人才方面的综合优势,推出了全面的多模态标注解决方案,助力…

pytest运行方式及前置后置封装详解

一、Pytest 优点认知 1.可以结合所有的自动化测试工具 2.跳过失败用例以及失败重跑 3.结合allure生产美观报告 4.和Jenkins持续集成 5.很多强大的插件 pytest-html:生产html测试报告 pytest-xdist:多线程运行 pytest-ordering:改变用例执行…

力扣172.阶乘后的0

class Solution {public int trailingZeroes(int n) {int ans 0;//本质:每5个数有一个5的倍数,每25个数有一个25的倍数……int num 5;while(n / num ! 0) {ans n/num;num * 5;}return ans;} }

修改服务器DNS解析及修改自动对时时区

修改服务器DNS解析: 1、搜索一下当地的DNS服务器的地址 2、登录服务器,执行 vim /etc/resolv.conf文件,在nameserver字段后填写DNS服务的地址 3、chattr i /etc/resolv.conf 加上不可修改权限,防止重启DNS被修改 修改自动对时…