赞
踩
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)]]
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。