1.TF-IDF算法
基本思想:
- 如果一个词在一篇文档中出现的频率高,并且在语料库中其他文档中很少出现,则认为这个词有很好的类别区分功能
词频TF:Term Frequency,衡量一个term在文档中出现的有多频繁
- 平均而言出现越频繁的词,其重要性可能就越高
考虑到文章长度的差异,需要对词频做标准化
- TF(t) = (t出现在文档中的次数) / (文档中term总数)
- TF(t) = (t出现在文档中的次数) / (文档中出现最多的term的次数)
逆文档频率IDF:Inverse Document Frequency, 用于模拟在该语料的实际使用环境中,某一个term有多重要
- 把罕见的词的重要性调高,把常见词的重要性调低
IDF的具体算法
- IDF(t) = log(语料库中的文档总数 / (含有该term的文档总数+1))
TF-IDF = TF * IDF
- TF-IDF与一个词在文档中的出现次数成正比
- 与该词在整个语料库中的出现次数成反比
2.基于sklearn的实现
# 计算TF-IDF
from sklearn.feature_extraction.text import TfidfTransformer
# 取出所有分词
words_list = list(chap.words_list)
countvec = CountVectorizer(min_df=5) # 在5个以上章节中出现才保留
words_vec = countvec.fit_transform(words_list) # 得到一个稀疏矩阵,词频矩阵
transformer = TfidfTransformer()
tfidf = transformer.fit_transform(words_vec) # 基于词频矩阵计算TF-IDF值
tfidf.toarray()