使用 CounterVectorizer 和 TfidfTransformer 计算 TF-IDF
import jieba
from sklearn.feature_extraction.text import CountVectorizer, TfidfTransformer, TfidfVectorizer
import pandas as pd
contents = [
u'小明喜欢看电影,小红也喜欢看电影。',
u'小明还喜欢看足球比赛。'
]
# 定义停用词
stopwords = {',', '。'}
# 计算TF(每个词的出现次数,未归一)
# tokenizer: 定义一个函数,接受文本,返回分词的list
# stop_words: 定义停用词词典,会在结果中删除词典中包含的词
tf = CountVectorizer(tokenizer=jieba.lcut, stop_words=stopwords)
res1 = tf.fit_transform(contents)
# use_idf: 表示在TF矩阵的基础上计算IDF,并相乘得到TF-IDF
# smooth_idf: 表示计算IDF时,分子上的总文档数+1
# sublinear_tf: 表示使用 1+log(tf)替换原来的tf
# norm: 表示对TF-IDF矩阵的每一行使用l2范数归一化
tfidf = TfidfTransformer(norm='l2', use_idf=True, smooth_idf=True, sublinear_tf=False)
res2 = tfidf.fit_transform(res1)
直接使用 TfidfVectorizer
# 参数为 CounterVectorizer 和 TfidfTransformer 的所有参数
tfidf = TfidfVectorizer(tokenizer=jieba.lcut, stop_words=stopwords, norm='l2', use_idf=True, smooth_idf=True, sublinear_tf=False)
res = tfidf.fit_transform(contents)