vectorizer = CountVectorizer() #构建一个计算词频(TF)的玩意儿,当然这里面不足是可以做这些
transformer = TfidfTransformer() #构建一个计算TF-IDF的玩意儿
tfidf = transformer.fit_transform(vectorizer.fit_transform(corpus))
#vectorizer.fit_transform(corpus)将文本corpus输入,得到词频矩阵
#将这个矩阵作为输入,用transformer.fit_transform(词频矩阵)得到TF-IDF权重矩阵
TfidfTransformer + CountVectorizer = TfidfVectorizer
值得注意的是,CountVectorizer()和TfidfVectorizer()里面都有一个成员叫做vocabulary_(后面带一个下划线)
这个成员的意义是词典索引,对应的是TF-IDF权重矩阵的列,只不过一个是私有成员,一个是外部输入,原则上应该保持一致。
vectorizer = TfidfVectorizer(stop_words=stpwrdlst, sublinear_tf = True, max_df = 0.5)
关于参数:
stop_words:
传入停用词,以后获得vocabulary_的时候,就会根据文本信息去掉停用词得到
vocabulary:
词典索引
sublinear_tf:
计算tf值采用亚线性策略。比如,我们以前计算tf是词频,现在会用1+log(分子/(1+分母))的方式解决,默认是开启的
norm:
归一化,我们计算TF-IDF的时候,使用TF*IDF,TF可以是归一化的,也可以是没有归一化的,一般都是采用归一化的方法,默认开启
max_df:
有些词,它们的文档频率太高了(一个词如果每篇文档都出现,那就没有必要用它来区分文本类别了),所以,我们可以设定一个阈值,比如float类型0.5(取值范围[0.0 , 1.0]),表示这个词如果在整个数据集中超过50%的文本都出现了,那么我们也把它列为临时停用词。当然你也可以设定为int型,例如max_df=10,表示这个词如果在整个数据集中超过10的文本都出现了,那么我们也把它列为临时停用词
min_df:
与max_df相反,虽然文档频率越低,似乎越能区分文本,可是如果太低,例如10000篇文本中只有一篇文本出现过这个词,仅仅因为这一篇文本,就增加了词向量空间的维度,不太划算
当然,max_df和min_df在给定vocabulary参数时,就失效了