📅  最后修改于: 2023-12-03 15:40:51.237000             🧑  作者: Mango
在自然语言处理中,TF-IDF(Term Frequency-Inverse Document Frequency,即词频-逆文档频率)是一种用于评估一篇文章中一个词语重要程度的方法。TF-IDF 的基本思想是:如果某个词语在一篇文章中出现的频率很高,但在整个文章库中出现的频率很低,那么该词语很可能具有很好的区分能力,可以用来识别该文章的主题。
TF 表示某个词在一篇文章中出现的次数。例如,一篇文章里面有 100 个单词,其中 "apple" 出现了 3 次,那么 "apple" 在这篇文章中的词频就是 3/100,即 0.03。
IDF 表示某个词在整个文章库中出现的次数。如果一个词在许多文章中频繁出现,那么它就是一个常见词,我们可以忽略它。IDF 使用总文章数除以包含该词的文章数目的对数来计算。例如,在一个数据集中有 10,000 篇文章,其中 "apple" 出现在 100 篇文章中,那么 "apple" 的逆文档频率就是 log(10000/100),约等于 2。
将 TF 和 IDF 相乘,就得到了 TF-IDF。一个词的 TF-IDF 值越大,表示该词在这篇文章中越重要,可以用来衡量该词与主题的相关性。
import math
from collections import Counter
def tf(word, document):
return document.count(word) / len(document)
def idf(word, corpus):
return math.log10(len(corpus) / sum(1 for document in corpus if word in document))
def tf_idf(word, document, corpus):
return tf(word, document) * idf(word, corpus)
corpus = [
"apple banana apple", # 文档1
"orange apple", # 文档2
"pear banana" # 文档3
]
# 计算在文档1中的苹果的TF
print(tf("apple", corpus[0])) # 输出 0.6666666666666666
# 计算在整个语料库中的苹果的IDF
print(idf("apple", corpus)) # 输出 0.17609125905568124
# 计算在文档1中的苹果的TF-IDF
print(tf_idf("apple", corpus[0], corpus)) # 输出 0.11739463601564116
TF-IDF 可以用于文本分类、信息检索、文本聚类等一系列自然语言处理任务。它是一种简单而有效的方法,可以帮助我们发现文本中的关键信息。