目录
前言
TF-IDF(Term Frequency-Inverse Document Frequency)是一种用于文本挖掘的统计方法,用于评估一个词语在一篇文档中的重要性。
一、TF-IDF
1.TF
表示某个词在文档中出现的频率。计算方法是词频(该词在文档中出现的次数)除以文档总词数。
计算方式:
举个栗子:
2.IDF
衡量词语在整个语料库中的重要性。计算方法是文档总数除以包含该词的文档数,然后取对数。
计算方式:
3.TF-IDF计算法则
4.TF-IDF的本质
TF-IDF 通过将这两者相乘来赋予词语权重。它可以帮助识别在文档中频繁出现但在整个语料库中较少出现的关键词,从而提高文本分析的效果。
举个栗子:
根据TF-IDF的值可以判断,蜜蜂在这三个词里占该文章的权重最高,意味着更加关键
二、代码实现
- 使用文本:
这里每一行代表一篇文章
1.导入库
- 导入sklearn里的TfidfVectorizer类,该类是一种用于文本特征提取的工具
- 导入pandas库用于处理数据
from sklearn.feature_extraction.text import TfidfVectorizer
import pandas as pd
2.读取文本数据
- 打开指定的文本文件。
- 读取文件的每一行,并将其存储为列表 text
infile = open(r"task2_1.txt", "r") # 打开文件
text = infile.readlines() # 读取所有行 以列表形式存储
3. 初始化TfidfVectorizer并转换文本数据
- 创建一个 TfidfVectorizer 对象。
- 使用 fit_transform 方法将文本数据转换为 TF-IDF 特征矩阵,并打印矩阵。
vectorizer = TfidfVectorizer()
tfdif = vectorizer.fit_transform(text)
print(tfdif)
4. 获取词汇表并创建 DataFrame
- 获取 TF-IDF 特征矩阵中的词汇表 wordlist 。
- 将 TF-IDF 特征矩阵转换为 DataFrame,并以词汇表作为行索引。
wordlist = vectorizer.get_feature_names() # 获取文章中所有的词
print(wordlist)
df = pd.DataFrame(tfdif.T.todense(), index=wordlist)
5.处理每篇文章的特征
- 对每篇文章(列)提取特征,将其转换为列表。
- 将每篇文章的特征(词汇和对应的 TF-IDF 值)存储在字典 resdict 中。
- 将字典按 TF-IDF 值降序排序,并打印每篇文章中 TF-IDF 值最高的前十个词汇。
a = df.iloc[:, 1] # 提取第二篇文章的特征(仅作为示例)
for j in range(0, len(text)):
featurelist = df.iloc[:, j].to_list() # 将每一列的内容转换成列表
resdict = {}
for i in range(0, len(wordlist)):
resdict[wordlist[i]] = featurelist[i]
# 将wordlist中的第 i 个词汇作为键,featurelist 中的第 i 个值作为对应的值,添加到 resdict 中
resdict = sorted(resdict.items(), key=lambda x: x[1], reverse=True)
# 先生成键值对 再按键值对元组中的第二个元素进行排序 降序排序
print(f"第{j + 1}篇文章:", resdict[:10]) # 输出频数最高的十个词
总结
TF-IDF的本质就是给文本中的词赋予权重,大多时候权重高的即可当做文章的关键词