文本数据分析-(TF-IDF)(1)
文章目录
- 一、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)
TF−IDF(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 pd
infile = 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 pd
infile = 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)