用 TF-IDF 和詞袋錶示文件特徵
阿新 • • 發佈:2018-12-12
使用 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)