Materi
Hitungan mentah memberi bobot besar pada kata yang muncul di hampir semua dokumen, padahal kata seperti itu sedikit membedakan dokumen. TF-IDF (term frequency–inverse document frequency) mengalikan hitungan kata di dokumen (tf) dengan bobot idf yang mengecil bila kata muncul di banyak dokumen. Dengan setelan bawaan scikit-learn (smooth_idf=True), rumusnya idf(t) = ln((1 + n) / (1 + df(t))) + 1, dengan n banyaknya dokumen dan df(t) banyaknya dokumen yang memuat t.
import math
n = 4 # empat dokumen
df = {"hotel": 4, "kolam": 1}
for kata, d in df.items():
print(kata, round(math.log((1 + n) / (1 + d)) + 1, 3))
# hotel 1.0
# kolam 1.916Kata yang ada di semua dokumen mendapat idf tepat 1, karena ln(1) = 0; tambahan + 1 membuatnya tidak hilang sama sekali. Setelah tf dikalikan idf, TfidfVectorizer menormalkan setiap baris dengan norma L2 (norm="l2"), sehingga panjang vektor setiap dokumen bernilai 1 dan dokumen panjang tidak otomatis mendapat angka besar.
TfidfVectorizer menggabungkan CountVectorizer dan TfidfTransformer dalam satu langkah, dengan parameter pengolahan teks yang sama: lowercase, token_pattern, stop_words, dan ngram_range. Nilai idf setiap kata setelah fit tersedia di atribut idf_, urut sesuai get_feature_names_out(). Kata dengan bobot tertinggi di satu baris adalah kata yang paling membedakan dokumen itu dari dokumen lain.