TF-IDF(Term Frequency-Inverse Document Frequency)是一种衡量文档中词语重要性的重要方法,常用于信息检索和文本挖掘。它通过计算词语在文档中出现的频率(TF)和在所有文档中出现的频率(IDF)的乘积来确定词语的重要性。本文将探讨TF-IDF的计算方法,并展示如何使用Python的sklearn库中的TfidfVectorizer来计算TF-IDF值。
TF-IDF值的计算包括两个主要部分:词语频率(TF)和逆文档频率(IDF)。词语频率是指一个词语在特定文档中出现的次数,而逆文档频率是指一个词语在整个文档集合中出现的频率的倒数。TF-IDF值是TF和IDF的乘积,它反映了词语在文档中的重要性。
词语频率可以通过以下方式计算:
# 计算词语在文档中出现的次数
tf(t) = No. of times term 't' occurs in a document
# 或者
tf(t) = (No. of times term 't' occurs in a document) / (No. Of terms in a document)
# 或者
tf(t) = (No. of times term 't' occurs in a document) / (Frequency of most common term in a document)
sklearn的TfidfVectorizer默认使用第一种方法计算TF。
IDF的计算方法如下:
# 计算词语在所有文档中的出现频率
idf(t) = log_e[(1+n) / (1 + df(t))] + 1 # 默认smooth_idf=True
# 或者
idf(t) = log_e[n / df(t)] + 1 # 当smooth_idf=False
其中n是文档总数,df(t)是包含词语t的文档数量。
TF-IDF值是词语在文档中的TF和IDF的乘积,计算公式如下:
# 计算TF-IDF值
tf-idf(t) = tf(t) * idf(t)
from sklearn.feature_extraction.text import TfidfVectorizer
doc1 = "petrol cars are cheaper than diesel cars"
doc2 = "diesel is cheaper than petrol"
doc_corpus = [doc1, doc2]
vec = TfidfVectorizer(stop_words='english')
matrix = vec.fit_transform(doc_corpus)
print("Feature Names:", vec.get_feature_names_out())
print("Sparse Matrix:", matrix.shape, matrix.toarray())