Algoritma Steming: Nazief & Adriani
Algoritma Nazief & Adriani adalah algoritma stemming untuk bahasa Indonesia yang konon kabarnya adalah state of the art algoritma stemming untuk bahasa Indonesia. Algoritma Nazief & Adriani dideskripsikan pertama kali dalam unpblished technical report di Universitas Indonesia.
Stemming itu apa? Bisa dilihat di sini!
Algoritma yang dituliskan di bawah, diambil dari buku Effective Techniques for Indonesian Text Retrieval tulisan Jelita Asian. Buku ini merupakan thesis Jelita Asian untuk mencapai gelar PhD di Australia. Algoritma Nazief & Adriani dituliskan sebagai “dasar teori” di bab 3. Versi PDF-nya bisa dilihat di sini.
Tulisan di bawah diterjemahkan agak plek sesuai di buku.
Dasar Algoritma
Algoritma ini menggunakan beberapa aturan morfologi untuk menghilangkan affiks (awalan, imbuhan, dll) dari sebuah kata dan kemudian mencocokannya dalam database akar kata (kata dasar / root word).
Jadi dasar utama algoritma ini adalah daftar akar kata. Langkah pertama yang dilakukan adalah mengumpulkan daftar akar kata dalam bahasa Indonesia. Semakin lengkap daftarnya, semakin tinggi akurasi algoritma ini.
Daftar tersebut bisa diperoleh dari Kamus Besar Bahasa Indonesia.
Detil Algoritma
Setelah menyiapkan daftar akar kata bahasa Indonesia, algoritma berikut bisa dijalankan.
- Pertama kali, cek kata yang ingin dicari akar katanya, ke dalam daftar akar kata. Jika ada dalam daftar, maka kata tersebut adalah adalah akar kata. Untuk setiap akhir langkah di bawah, lakukan langkah 1 ini juga.
- Hilangkan inflectional suffix (imbuhan infleksional). Pertama hilangkan imbuhan -kah, -lah, -tah, -pun kemudian hilangkan imbuhan -ku, -mu, -nya.
- Hilangkan derivational suffix (imbuhan turunan). Hilangkan imbuhan -i, -kan, -an.
- Hilangkan derivational prefix (awalan turunan). Hilangkan awalan be-, di-, ke-, me-, pe-, se- dan te-.
- Langkah 4 ini jangan dilakukan bila:
- kata dalam langkah 3, mempunyai gabungan awalan dan imbuhan yang tidak diperbolehkan dalam tabel di bawah. (lihat tabel di bawah).
- awalan yang akan dihilangkan, sama dengan awalan yang telah dihilangkan sebelumnya
- awalan telah dihilangkan sebanyak tiga kali
- Identifikasi tipe awalan dan disambiguitasnya.
Awalan mempunyai dua tipe:
plain: awalan di-, ke-, se- dapat dihilangkan secara langsung
complex: awalan be-, te-, me-, pe- harus dianalisis ambiguitasnya menggunakan tabel diambiguitas di bawah. Awalan me- bisa berubah mem- atau men- tergantung dari huruf awal akar kata (lihat tabel di bawah). - Lakukan langkah 1. Bila bukan merupakan akar kata, maka ulangi langkah 4 ini secara berulang sampai menemukan akar katanya atau sampai kondisi 4a terjadi. Bila kondisi 4a tidak terjadi, tetapi belum juga memperoleh akar kata maka lanjutkan ke langkah 5.
- Langkah 4 ini jangan dilakukan bila:
- Bila dari langkah 4 di atas belum ketemu juga. Maka lakukan analisis apakah kata tersebut masuk dalam tabel diambiguitas kolom terakhir atau tidak.
- Bila semua proses di atas gagal, maka algoritma mengembalikan kata aslinya.
Tabel Disambiguitas
Rule | Construct | Return |
1 | berV… | ber-V… | be-rV… |
2 | berCAP… | ber-CAP… | where C!=’r’ and P!=’er’ |
3 | berCAerV… | ber-CAerV… | where C!=’r’ |
4 | belajar… | bel-ajar… |
5 | beC1erC2… | be-C1erC2 … | where C1!={‘r’| ‘l’} |
6 | terV… | ter-V… | te-rV… |
7 | terCerV… | ter-CerV… | where C!=’r’ |
8 | terCP… | ter-CP… | where C!=’r’ and P!=’er’ |
9 | teC1erC2… | te-C1erC2… | where C1!=’r’ |
10 | me{l|r|w|y}V… | me-{l|r|w|y}V… |
11 | mem{b|f|v}… | mem-{b|f|v}… |
12 | mempe{r|l}… | mem-pe… |
13 | mem{rV|V}… | me-m{rV|V}… | me-p{rV|V}… |
14 | men{c|d|j|z}… | men-{c|d|j|z}… |
15 | menV… | me-nV… | me-tV… |
16 | meng{g|h|q}… | meng-{g|h|q}… |
17 | mengV… | meng-V… | meng-kV… |
18 | menyV… | meny-sV… |
19 | mempV… | mem-pV… | where V!=’e’ |
20 | pe{w|y}V… | pe-{w|y}V… |
21 | perV… | per-V… | pe-rV… |
23 | perCAP… | per-CAP… | where C!=’r’ and P!=’er’ |
24 | perCAerV… | per-CAerV… | where C!=’r’ |
25 | pem{b|f|v}… | pem-{b|f|v}… |
26 | pem{rV|V}… | pe-m{rV|V}… | pe-p{rV|V}… |
27 | pen{c|d|j|z}… | pen-{c|d|j|z}… |
28 | penV… | pe-nV… | pe-tV… |
29 | peng{g|h|q}… | peng-{g|h|q}… |
30 | pengV… | peng-V… | peng-kV… |
31 | penyV… | peny-sV… |
32 | pelV… | pe-lV… | Exception: for “pelajar”, return ajar |
33 | peCerV… | per-erV… | where C!={r|w|y|l|m|n} |
34 | peCP… | pe-CP… | where C!={r|w|y|l|m|n} and P!=’er’ |
V = vokal
C = konsonan
P = bagian kecil kata misal “er”
Gabungan Awalan dan Akhiran yang Tidak Diperbolehkan
Awalan | Akhiran yang tidak diperbolehkan |
ber- | -i |
di- | -an |
ke- | -i -kan |
me- | -an |
ter- | -an |
per- | -an |
Begitulah kira-kira algoritma Nazief & Adriani, untuk lebih jelasnya lihat buku di atas.