Materi
Bag-of-words mengubah setiap dokumen menjadi vektor angka: satu kolom untuk setiap kata di kosakata, dan isinya banyaknya kata itu muncul di dokumen. Dokumentasi scikit-learn menggambarkan langkahnya sebagai tokenisasi, penghitungan, dan normalisasi, dengan korpus disajikan sebagai matriks satu baris per dokumen dan satu kolom per token. Posisi kata di dalam dokumen diabaikan, sehingga "kurir ramah, barang rusak" dan "barang ramah, kurir rusak" menghasilkan vektor yang sama.
from sklearn.feature_extraction.text import CountVectorizer
korpus = ["sabun wangi", "sabun cair wangi sekali", "sampo cair"]
cv = CountVectorizer()
X = cv.fit_transform(korpus)
print(cv.get_feature_names_out())
# ['cair' 'sabun' 'sampo' 'sekali' 'wangi']
print(X.toarray())
# [[0 1 0 0 1]
# [1 1 0 1 1]
# [1 0 1 0 0]]CountVectorizer menyusun kosakata dari seluruh korpus, lalu menghitung setiap kata per dokumen; pada contoh di atas kolomnya urut alfabetis. fit_transform mengembalikan matriks jarang (sparse) karena sebagian besar selnya nol, dan toarray() mengubahnya menjadi array numpy biasa untuk dilihat. Atribut vocabulary_ adalah dict dari kata ke nomor kolomnya.
Setelan bawaannya perlu diketahui. lowercase=True mengubah teks ke huruf kecil lebih dulu, dan token_pattern bawaan (?u)\b\w\w+\b hanya mengambil token dua karakter atau lebih, sehingga angka tunggal seperti 5 dan kata satu huruf dibuang. Parameter stop_words menerima list kata henti buatan sendiri, dan ngram_range=(1, 2) menambahkan bigram sebagai kolom.