自然语言处理(NLP)之gensim中的TF-IDF的计算方法
step 1. 去掉所有文本中都会出现的词
texts = [['这是', '一个', '文本'], ['这是', '第二个', '文本'], ['这是', '又一个', '文本'], ['这是', '最后', '一个', '文本']]
去掉所有文本中均出现的词后的文本:
texts_filter = [['一个'], ['第二个'], ['又一个'], ['最后', '一个']]
step 2. 计算文本中剩余单词的tf-idf值,默认得计算公式:
tf_idf = word_freq * log(全部文本数 / 包含该词的文本数)
这里不需要做平滑化的处理, 因为已经把全部文本中都会出现的词拿掉了
示例代码:
from gensim import corpora
from gensim.models.tfidfmodel import TfidfModel
texts = [['这是', '一个', '文本'], ['这是', '第二个', '文本'], ['这是', '又一个', '文本'], ['这是', '最后', '一个', '文本']]
dictionary = corpora.Dictionary(texts)
print(dictionary)
corpus = [dictionary.doc2bow(text) for text in texts]
print(corpus)
tf_idf_model = TfidfModel(corpus, normalize=False)
word_tf_idf = list(tf_idf_model[corpus])
print('词典:', dictionary.token2id)
print('词频:', corpus)
print('词的tf-idf值:', word_tf_idf)
运行结果:
Dictionary(6 unique tokens: ['一个', '文本', '这是', '第二个', '又一个']...)
[[(0, 1), (1, 1), (2, 1)], [(1, 1), (2, 1), (3, 1)], [(1, 1), (2, 1), (4, 1)], [(0, 1), (1, 1), (2, 1), (5, 1)]]
词典: {'一个': 0, '文本': 1, '这是': 2, '第二个': 3, '又一个': 4, '最后': 5}
词频: [[(0, 1), (1, 1), (2, 1)], [(1, 1), (2, 1), (3, 1)], [(1, 1), (2, 1), (4, 1)], [(0, 1), (1, 1), (2, 1), (5, 1)]]
词的tf-idf值: [[(0, 1.0)], [(3, 2.0)], [(4, 2.0)], [(0, 1.0), (5, 2.0)]]