TF-IDF(Term Frequency-Inverse Document Frequency)是一种常用于文本挖掘和信息检索的权重计算方法
TF-IDF由两部分组成:词频(TF)和逆文档频率(IDF)。
词频表示一个词在文档中出现的频率。通常有以下几种计算方法:
逆文档频率表示一个词在所有文档中的重要性。通常有以下几种计算方法:
将TF和IDF相乘得到TF-IDIDF: [ TF-IDF(t, d) = TF(t, d) \times IDF(t) ]
为了对某些术语进行额外加权,可以在计算TF-IDF时引入一个权重因子。假设我们要对某些特定术语 (t') 进行额外加权,可以修改TF-IDF的计算公式如下:
[ TF-IDF'(t, d) = TF(t, d) \times IDF(t) \times W(t) ]
其中,(W(t)) 是权重因子。对于普通术语,(W(t) = 1);对于需要额外加权的术语,(W(t) > 1)。
以下是一个Python示例代码,展示了如何实现TF-IDF评分并对某些术语进行额外加权:
import math
from collections import Counter
def compute_tf(word_counts):
total_words = sum(word_counts.values())
return {word: count / total_words for word, count in word_counts.items()}
def compute_idf(documents):
doc_count = len(documents)
word_doc_counts = Counter()
for doc in documents:
word_doc_counts.update(set(doc))
idf = {word: math.log((doc_count + 1) / (count + 1)) for word, count in word_doc_counts.items()}
return idf
def compute_tfidf(documents, extra_weights=None):
tfidf_scores = []
idf = compute_idf(documents)
for doc in documents:
word_counts = Counter(doc)
tf = compute_tf(word_counts)
doc_tfidf = {}
for word, count in word_counts.items():
weight = extra_weights.get(word, 1) if extra_weights else 1
doc_tfidf[word] = tf[word] * idf[word] * weight
tfidf_scores.append(doc_t’tfidf)
return tfidf_scores
# 示例文档
documents = [
["apple", "banana", "apple", "orange"],
["banana", "orange", "banana"],
["apple", "apple", "grape"]
]
# 额外加权术语
extra_weights = {
"apple": 2,
"grape": 1.5
}
tfidf_scores = compute_tfidf(documents, extra_weights)
for i, scores in enumerate(tfidf_scores):
print(f"Document {i + 1} TF-IDF scores:")
for word, score in scores.items():
print(f" {word}: {score:.4f}")
在这个示例中,我们定义了计算TF、IDF和TF-IDF的函数,并在计算TF-IDF时引入了额外加权因子。你可以根据需要调整额外加权术语及其权重。
Elastic 中国开发者大会
云+社区技术沙龙[第14期]
云原生正发声
云+社区技术沙龙[第7期]
T-Day
云+社区技术沙龙[第28期]
腾讯位置服务技术沙龙
云+社区技术沙龙[第18期]
serverless days
云+社区技术沙龙[第11期]
领取专属 10元无门槛券
手把手带您无忧上云