Materi
N-gram adalah deretan n token yang berurutan: unigram satu kata, bigram dua kata, trigram tiga kata. Menghitung bigram menangkap frasa yang maknanya hilang bila katanya dihitung terpisah. Pada ulasan "tidak sesuai", unigram mencatat tidak dan sesuai sendiri-sendiri, sedangkan bigram mencatat ("tidak", "sesuai") sebagai satu satuan.
kata = ["kamar", "bersih", "dan", "air", "panas"]
bigram = list(zip(kata, kata[1:]))
print(bigram)
# [('kamar', 'bersih'), ('bersih', 'dan'), ('dan', 'air'), ('air', 'panas')]zip() memasangkan unsur dari beberapa iterable menurut posisinya dan berhenti pada iterable terpendek. kata[1:] adalah list yang sama digeser satu posisi, jadi zip(kata, kata[1:]) memasangkan setiap kata dengan kata sesudahnya. Sejak Python 3.10, itertools.pairwise(kata) memberi pasangan yang sama tanpa membuat potongan list. Untuk n umum, list digeser n kali dan semua potongannya diberikan ke zip.
Banyaknya n-gram dari m token adalah m − n + 1 bila m ≥ n, dan nol bila teks lebih pendek dari n. Karena tuple dapat di-hash, n-gram bisa langsung dihitung dengan Counter, sama seperti kata tunggal. Bigram dihitung per dokumen, supaya kata terakhir satu ulasan tidak dipasangkan dengan kata pertama ulasan berikutnya.