TF‑IDF(Term Frequency‑Inverse Document Frequency):词频‑逆文档频率,用于评估一个词在某篇文档相对于整个文档集合的重要程度。(词在当前文章出现多,但在其他文章很少出现 → TF‑IDF 值大,代表这个词很有区分度。)
一,原理解释
1,TF 词频 Term Frequency
某词在当前文档中出现的频率
TF(t,d)=词t在文档d中出现次数文档d总词语数
TF(t,d)=\\frac{\\text{词}t\\text{在文档}d\\text{中出现次数}}{\\text{文档}d\\text{总词语数}}
TF(t,d)=文档d总词语数词t在文档d中出现次数
2,IDF 逆文档频率 Inverse Document Frequency
衡量词语的普遍程度,词语越常见,IDF 越小
IDF(t,D)=log(总文档数包含词t的文档数+1)
IDF(t,D)=\\log\\left(\\frac{\\text{总文档数}}{\\text{包含词}t\\text{的文档数}+1}\\right)
IDF(t,D)=log(包含词t的文档数+1总文档数)
3,TF‑IDF 计算公式
TFIDF(t,d,D)=TF(t,d)×IDF(t,D)
TFIDF(t,d,D)=TF(t,d)\\times IDF(t,D)
TFIDF(t,d,D)=TF(t,d)×IDF(t,D)
- TF 高、IDF 高:在本文频繁出现,其他文档很少出现 → 关键词
- TF 高、IDF 低:大量文档都出现(例如:的、是)→ 停用词,区分价值低
from sklearn.feature_extraction.text import TfidfVectorizer
import pandas as pd
inFile = open(r".\\task2_1.txt","r")#读取函数文件
corpus = inFile.readlines()#以列表形式读取
vectorizer = TfidfVectorizer() #类,转为TF-IDF的向量转换对象
tfidf = vectorizer.fit_transform(corpus) #传入数据,返回包含TF=IDF的向量值
print(tfidf)
wordlist = vectorizer.get_feature_names_out() #获取特征名称,整个语料库的所有词
print(wordlist)
df = pd.DataFrame(tfidf.T.todense(),index = wordlist)#tfidf.T.todense()恢复为稀疏矩阵
print(df)
for j in range(len(corpus)):
featurelist = df.iloc[:,j].to_list() #通过索引号获取第二列的内容并转换为列表
resdict = {} #排序以及看输出结果对不对
for i in range(0,len(wordlist)):
resdict[wordlist[i]] = featurelist[i]
resdict = sorted(resdict.items(), key=lambda x:x[1],reverse=True)
print(resdict)
网硕互联帮助中心






评论前必须登录!
注册