某个词在给定文档中出现的次数称为词项频率,通常简写为 TF。在某些例子中,可以将某个词的出现频率除以文档中的词项总数从而得到归一化的词项频率结果。
为什么要归一化tf?举个例子:
假如词“dog”在文档 A 中出现 3 次,在文档 B 中出现 100 次。显然,“dog”似乎对文档 B 更重要,但是这里的文档 A 只是一封30 个词的电子邮件,而文档 B 却是包含大约 580 000 个词的长篇巨著。因此,分析结果应该正好反过来,即“dog”对文档 A 更重要。
from nltk.tokenize import TreebankWordTokenizer
from collections import Counter
sentence = """The faster Harry got to the store, the faster Harry, the faster, would get home."""
tokenizer = TreebankWordTokenizer()
tokens = tokenizer.tokenize(sentence.lower())
print(tokens)
bag_of_words = Counter(tokens)
print(bag_of_words)
# 将这些词按照某种方式进行排序,以便能够对此有所了解
# 在默认情况下,most_common()会按照频率从高到低
# 列出所有的词条,这里只给出频率最高的 4 个词条
print(bag_of_words.most_common(4))
# 某个词在给定文档中出现的次数称为词项频率
times_harry_appears = bag_of_words['harry']
num_unique_words = len(bag_of_words)
# 将某个词的出现频率除以文档中的词项总数从而得到归一化的词项频率结果
tf = times_harry_appears / num_unique_words
print(round(tf, 4))