在自然语言处理(NLP)和文本分析领域,将文本数据转换为可操作的数值格式是至关重要的。TF-IDF(Term Frequency-Inverse Document Frequency)是一种广泛使用的文本向量化方法,它能够反映词语在文档中的重要性。在这篇文章中,我将介绍如何使用TF-IDF向量化文本数据,并应用DBSCAN算法对文本数据进行聚类分析。
简介:
TF-IDF(Term Frequency-Inverse Document Frequency)是一种常用的文本分析方法,用于将文本数据转换为数值型特征,以便机器学习算法可以处理。TF-IDF结合了词频(TF)和逆文档频率(IDF),以反映词语在文档集合中的重要性。
词频(TF)
词频(Term Frequency)是指某个词语在一篇文档中出现的次数。词语出现的频率越高,它在该文档中的重要性就越高。然而,仅使用词频作为特征会偏向于那些长文档,因为长文档通常会包含更多的词语。
逆文档频率(IDF)
逆文档频率(Inverse Document Frequency)是指包含该词语的文档总数的倒数。这个指标减少了常见词语的权重,因为常见词语在很多文档中都会出现,而罕见词语只在少数文档中出现,因此更加重要。
TF-IDF计算
TF-IDF值是TF和IDF的乘积,计算公式如下: TF-IDF(t,d)=TF(t,d)×log(df(t)N) 其中:
代码示例
数据读取与TF-IDF转换
我们将从一个名为task2_1.txt的文件中读取文本数据。这个文件应该包含若干篇文章,每篇文章占一行。
from sklearn.feature_extraction.text import TfidfVectorizer
import pandas as pd
# 读取文件
inFile = open(r".\task2_1.txt", 'r', encoding='utf-8')
corpus = inFile.readlines()
# 将文本内容转换为TF-IDF向量
vectorizer = TfidfVectorizer()
tfidf = vectorizer.fit_transform(corpus)
# 获取特征名称(词汇表)
wordlist = vectorizer.get_feature_names_out()
TF-IDF矩阵转换为DataFrame
为了更方便地操作和分析TF-IDF矩阵,我们将其转换为pandas
DataFrame
# 将TF-IDF矩阵转换为DataFrame
df = pd.DataFrame(tfidf.toarray(), columns=wordlist)
提取每篇文章的前5个关键词
接下来,我们将提取每篇文章中排名前5的关键词。
# 提取每篇文章中排名前5的关键词
for i in range(len(corpus)):
article_tfidf = df.iloc[i]
top5 = article_tfidf.nlargest(5)
print(f"文章 {i + 1} 的前5个关键词:")
print(top5)
print()
运行结果
总结
通过这篇文章,我们介绍了如何使用TF-IDF向量化文本数据,TF-IDF能够反映词语在文档中的重要性