Algoritma Stemmer Bahasa Indonesia

root tree Program pencari kata dasar (stemmer) dalam Bahasa Indonesia, dibuat dengan bahasa pemrograman Perl. Program ini bekerja menggunakan kamus kata dasar, menurut pola kata berimbuhan sesuai pedoman Ejaan Yang Disempurnakan (EYD). Semoga bermanfaat.


1. Pendahuluan

Struktur pembentukan kata dalam Bahasa Indonesia adalah sebagai berikut:

[awalan-1] + [awalan-2] + dasar + [akhiran] + [kepunyaan] + [sandang]

Masing-masing bagian tersebut (yang dalam kotak bisa ada atau tidak), digabungkan dengan kata dasar membentuk kata berimbuhan. Di bawah ini imbuhan yang banyak digunakan dalam Bahasa Indonesia :

  1. Kata sandang: -lah, -kah, -pun, -tah.
  2. Kata kepunyaan: -ku, -mu, -nya.
  3. Akhiran: -i, -an, -kan.
  4. Awalan: me-, ber-, pe-, di-, ke-, ter-, se-.

Dalam proses penggabungan awalan, terdapat aturan-aturan berikut:

Awalan

Perubahan Bentuk

Aturan

me | pe

meng | peng

+ V | k | g | h | q … Misal: mengambil = meng + ambil

V = Vokal (a, i, u, e, o)

 

meny | peny

+ s … Misal: penyakit = peny + sakit

 

mem | pem

+ b | f | p | v … Misal: membuat = mem + buat

 

men | pen

+ c | d | j | s | z … Misal: mencari = men + cari

 

me | pe

+ m | n | r | l | y | w | x | + V … Misal: melukis = me + lukis

ber | per | ter

be | pe | te

+ r + V …

Untuk mencari r yang luluh dengan mencoba kombinasi ‘r + V …’ atau ‘V …’. Misal: peramal = pe + ramal

 

ber | per | ter

+ K | V …, Misal: terambil = ter + ambil

K = Konsonan (selain Vokal)

Dalam pasangan awalan dan akhiran, terdapat pasangan yang tidak diperbolehkan, yaitu:

Awalan

Akhiran Tidak Sah

ber- | ke- | se- | per-

-i, Misal: ber-tanyai-i

di- | me- | ter-

-an, Misal: di-tinggal-an

ke- | se- | pe-

-kan, Misal: pen-dapat-kan

Dalam program stemmer, aturan susunan awalan dan akhiran mengesampingkan pengecualian yang jarang. Misalnya untuk kata ajar, yang digabung dengan per- menjadi pelajar. Juga seperti pasangan ke- -i untuk ke-tahu-i, ini akan dianggap tidak sah.

Terdapat 4 subrutin inti dalam proses mencari kata dasar, yaitu:

Subrutin

Fungsi

Input

Output

BuangLuluh

Melakukan penyesuaian kata yang luluh terhadap awalan me- dan pe-.

kata

kata (bila ada di kamus) atau

undef (bila tidak ada)

BuangBelakang

Membuang akhiran kata, yaitu:

-lah, -kah, -pun, -tah, -ku, -mu,

-nya, -i, -an, -kan.

kata,

awalan1,

awalan2

kata | undef

BuangDepan

Membuang awalan kata, yaitu:

me-, ber-, pe-, di-, ke-, ter-, se-.

kata

kata | undef,

awalan

BuangImbuhan

Membuang imbuhan kata, merupakan subrutin induk dari proses pemotongan kata.

kata

kata | undef

 

Dalam subrutin BuangImbuhan terdapat proses pembuangan awalan (AW), akhiran (AK), kata kepunyaan (KK), kata sandang (KS) dan kata dasar (D) seperti di bawah. Pada tiap tahap pembuangan dilakukan pengecekan ke kamus untuk mengakhiri pemotongan.

Tahap

Kombinasi

Imbuhan

Contoh

1.

D

-

ikat

2.

D + AK

-an

ikat-an

3.

AW + D

me-

meng-ikat

4.

AW + D + AK

me- + -kan

meng-ikat-kan

5.

AW + AW + D

me- + per-

mem-per-ikat

6.

AW + AW + D + AK

ke- + ter- + -an

ke-ter-ikat-an

Contoh pencarian kata dasar untuk kata ‘kebersamaannyalah’ ada di bawah ini. Kata asal akan berubah bentuk (dicetak tebal bila berbeda dari sebelumnya) pada proses Buang Depan yang selanjutnya diperiksa hasil potongnya pada Buang Belakang.

Tahap

Proses

Kata Asal

Hasil Potong

Kata Akhir

1.

Cek Kamus

kebersamaan

nyalah

-

kebersamaan

nyalah

2.

Buang Belakang

kebersamaan

nyalah

kebersama

kebersamaan

nyalah

3.

Buang Depan

kebersamaan

nyalah

bersamaan

nyalah

bersamaan

nyalah

4.

Buang Belakang

bersamaan

nyalah

bersama

bersamaan

nyalah

5.

Buang Depan

bersamaan

nyalah

samaan

nyalah

samaan

nyalah

6.

Buang Belakang

samaan

nyalah

sama

sama

2. Hasil Program

Program membuka file berikut (pada direktori yang aktif):

  1. kamus.txt, yaitu berisi daftar kata dalam Bahasa Indonesia. Kamus ini sebagai dasar untuk menentukan apakah suatu kata telah ditemukan kata dasarnya.
  2. indonesian.stp, yaitu berisi daftar kata yang akan diabaikan (stopwords) dalam pencarian kata dasar. Kata yang akan diabaikan baik dalam bentuk berimbuhan maupun setelah didapat kata dasarnya.
  3. Koleksi.dat, yaitu file korpus sebagai obyek proses stemming. Definisi kata adalah alfabet (a-z) dan pemisah kata adalah selain alfabet, angka, dan garis bawah (_). Pemisah ini sesuai definisi word boundary dari Perl (\b). Kata majemuk, seperti buku-buku, dianggap 2 kata yaitu buku dan buku.
  4. hasil.txt, yaitu file yang akan menampung hasil dari proses stemming. File ini akan selalu dibuat baru setiap kali program dijalankan.

Contoh hasil keluaran program berbentuk seperti di bawah. Bentuk ini disesuaikan dari format Tugas 2, karena hasil stemmer adalah (dianggap) kata dasar dan status benar atau salah tidak diketahui. Status di sini adalah urutan kata tersebut bila tidak ditemukan di kamus. Kata yang dihasilkan tidak diurutkan sesuai alfabet sehingga acak sesuai posisi kata tersebut di hashes.

No.

Kata Asal

Hasil Stemmer

Status

1

menkop

menkop

1

2

mengeruhkan

keruh

-

675

penyakit

sakit

-

2802

makan

makan

-

11188

royong

royong

4185

11189

digembok

gembok

-

Pada baris akhir dari hasil program akan ditampilkan statistik keseluruhan, yaitu: “Total kata: 11515, Berhasil: 7374 (64.04%), Gagal: 4141 (35.96%)”. Total kata merupakan jumlah seluruh kata yang ditemukan dalam dokumen dikurangi stopwords. Jumlah Berhasil adalah jumlah kata bila ditemukan dalam kamus, sedangkan jumlah Gagal bila kata tidak ditemukan di kamus. Berhasil atau Gagal ini belum menunjukkan hasil yang sesungguhnya, perlu dianalisa secara manual untuk menentukan benar atau salah.

Sebagai informasi tambahan ditampilkan pula statistik unjuk kerja program (menggunakan module Benchmark). Pada prosesor AMD Sempron 1,8GHz, memory 512MB, Perl v5.6.1 MSWin32, dibagi menurut 3 bagian:

  1. Membaca semua file dan mengolah Koleksi.dat hingga didapat daftar kata yang unik. Tahap ini menghabiskan waktu 0,437 detik (59,46%).
  2. Melakukan stemming seluruh kata. Tahap ini berlangsung 0,172 detik (23,40%).
  3. Menulis hasil ke file hasil.txt. Tahap ini selama 0,126 detik (17,14%).
3. Analisa Kesalahan

Untuk mengetahui ketepatan hasil stemming perlu dilakukan analisa secara manual. Mengingat jumlah kata yang cukup besar (11515 kata), pengamatan mencakup sebagian saja, yaitu masing-masing 1000 kata teratas dari Berhasil dan Gagal. Hasil analisa dari kata dasar yang salah seperti tabel di bawah ini. Hasil stemmer dianggap salah dengan aturan berikut:

  1. Terjadi pengubahan kata tetapi kata tersebut dianggap tidak tepat, misal: mengakui (aku, bukan kaku).
  2. Tidak terjadi pengubahan kata meskipun kata dasarnya ada dalam kamus, misal: mengetahui (tahu).
  3. Imbuhan tidak berhasil dipisahkan, meskipun kata tersebut sah sebagai Bahasa Indonesia, misal: rinciannya (rinci), diujicobakan (ujicoba).

Kata-kata yang asalnya sudah salah, seperti pernggantian (harusnya pergantian), penjelaskan (harusnya penjelasan) atau tidak terdapat di kamus, bila tidak didapat kata dasarnya maka dianggap hasil stemming adalah benar.

Jenis Kesalahan

Contoh

Hasil Stemmer

Seharusnya

Byk

Nama orang, tempat, istilah, singkatan

ryamizard, denpasar, puskesmas

didubeskan

-tetap-

-sudah benar-

-

Bahasa asing

conduct, trial, pressure

-tetap-

-sudah benar-

-

Kesalahan kata, susunan imbuhan, imbuhan kata asing

pernggantian, meingkatkan, maasalah, penjelaskan,

berkapitalisasi, ngejar

-tetap-

ganti, tingkat,

masalah, jelas, kapital, kejar

-

Kata majemuk

ketidakhadirannya,

diperjualbelikan,

diujicobakan

-tetap-

tidakhadir, jualbeli,

jualbeli

14

Aturan khusus

mengetahui, belajar, perbaiki

-tetap-

tahu, ajar, baik

3

Kesalahan peluluhan kata

memintainya,

pengakuannya,

mengamati

mengukur

minta,

kaku,

kamat,

kukur

pinta,

aku,

amat,

ukur

4

Kesalahan kata yang kata dasarnya ada di kamus

memada, alan, domi, terlah

pada, al, dom, ter

-tidak tahu-

-

Kata dikenali sebagai bahasa Indonesia tapi tidak ada di kamus / tidak baku

rinciannya, milyaran, perijinan, resikonya, mengendor

-tetap-

rinci, milyar, ijin, risiko, kendur

5

Kata terlalu banyak dipotong (overstemming)

menahannya

nah

tahan

1

Kata terlalu sedikit dipotong (understemming)

menempati

empati

tempat

1

Secara statistik, dari 2000 kata tersebut terdapat 28 kata yang mengalami kesalahan pencarian kata dasar, sehingga tingkat keberhasilannya adalah 98,6 % (dengan asumsi semua kata yang ada di kamus adalah benar).

4. Kesimpulan dan Saran

Mengingat keterbatasan tenaga dan waktu, program ini dapat disempurnakan lebih lanjut. Pengambilan 2000 kata acak dari hasil stemming belum mencukupi untuk menilai ketepatan program secara keseluruhan.

Beberapa kesimpulan terkait hasil eksekusi program:

  • Banyak kegagalan mencari kata dasar terjadi akibat kesalahan pengetikan atau pemakaian kata yang tidak baku. Misalnya: penyelesaiaan, musyarwarah, kangguru, baikdari, memimipin, duren, milyar.
  • Banyak kegagalan akibat istilah-istilah, singkatan, kata-kata asing / daerah / pergaulan, dan nama orang / tempat / sesuatu. Misalnya: double, menkopolkam, samsung, nggak, dekrit, tampubolon, syamsuddin, shalawat, hongkong, klaten.
  • Banyak kegagalan akibat kata majemuk. Misalnya: diserahterimakan, ketidakhadirannya, penandatanganannya, diperjualbelikan, ketidakpuasan.
  • Banyak kegagalan akibat penggunaan imbuhan dalam bahasa asing. Misal: brutalisme, meminimalisasi, eksportir, nirlaba, berkapitalisasi, premanisme.

Beberapa hal yang dapat diperbaiki:

  • Mencakup kata-kata yang perlu diperlakukan khusus, seperti: ber + ajar = belajar. Agar terhindar dari inefisiensi kata-kata tersebut dapat dibuat dalam array khusus, misalnya berupa file khusus yang berisi pemetaan kata dasar dan seharusnya. Misal untuk ajar dapat dipetakan lajar => ajar.
  • Melonggarkan aturan pemotongan. Misalnya ber + kerja = bekerja, sedangkan bentuk yang umum misal ber + karya = berkarya. Pelonggaran ini cukup dilematis, mengingat bila dilakukan ada kemungkinan muncul kata-kata yang tidak sesuai aturan.
  • Mencakup algoritma pemecahan kata majemuk yang berimbuhan. Hal ini cukup sulit mengingat kombinasi kata yang dapat bermacam-macam. Bisa pula kata-kata majemuk yang umum disertakan dalam kamus.
  • Menambah perbendaharaan kata di kamus, yaitu mencakup pula kata-kata hasil serapan dari bahasa asing (misal: klasik), istilah-istilah yang umum (misal: puskesmas), maupun kata-kata yang tidak baku namun biasa digunakan (misal: milyar, ijin).
  • Membuat aturan baru tentang pemotongan imbuhan dalam bahasa asing. Misalnya kapitalisasi (kapital), personalitas (person), miskomunikasi (komunikasi), dst.
  • Membuat kategorisasi kata, misalnya kata-kata yang masuk dalam kata kerja dan kata benda. Ketika terjadi peluluhan kata, seperti meng + urus, kecenderungan kata dasarnya adalah urus dan bukan kurus.
  • Pendalaman lebih lanjut terhadap tata Bahasa Indonesia, termasuk penggunaan buku teks Bahasa Indonesia, misal: buku Pedoman EYD.

Demikian semoga bermanfaat.

5. Referensi
  1. Fadillah Z Tala. A Study of Stemming Effects on Information Retrieval in Bahasa Indonesia. Institute for Logic, Language and Computation, Universiteit van Amsterdam, The Netherlands. 2003.
  2. Jelita Asian, Hugh E. Williams, S.M.M. Tahaghogi. Stemming Indonesian. School of Computer Science and Information Technology, RMIT University, Australia. 2003.
6. Lampiran

File lengkap: stemmer.7z (format 7zip)

About these ads

23 Komentar »

  1. rifle berkata

    pak, kalo boleh tau, algoritma yang dipakai buat proses stemming bhs. indonesia diatas itu apa?
    nazief-andriani, arifin-setiono, vega, ato apa?

    thx..

    • Oguds berkata

      Sumbernya dari 2 referensi di atas, Fadillah Z Tala dan
      Jelita Asian, Hugh E. Williams, S.M.M. Algoritma dibuat sendiri sesuai paper tersebut.

  2. prayogo berkata

    terima kasih atas open source-nya….

    • Oguds berkata

      Programnya tidak komplit, berhubung ada konflik kepentingan. Tapi nanti saya coba update ke program utuh, bila sempat.

  3. masipa berkata

    izin copy ya..
    ada tugas tentang stemming
    ;)

  4. reinhart chandra berkata

    salam kenal,nama saya reinhart,sedang mengerjakan tugas indexing..
    mas boleh minta file kamus.txt nya ga?
    minta tolongin kirimin ke email saya mas..makasih ya mas

  5. lucky berkata

    maaf mas, kl boleh saya tahu itu pake bahasa apa ya?
    saya sedang membuat tugas untuk menentukan kata dasar nie….
    dan terima kasih atas shareannya ^^
    sangat membantu saya :D

  6. alfan farizki berkata

    Mas, salam kenal.

    saya sedang melakukan riset kecil-kecilan nih mengenai POS Tagger Bahasa Indonesia. Saya kira-kira butuh kamus bahasa indonesia yang sudah di pindahkan ke file komputer. Nah, boleh nggak mas, saya minta Kamus.txt-nya

    klo boleh, kirimin ke email saya ya mas…
    Makasih banyak mas….

  7. Wahyudi berkata

    Terima kasih buat tulisannya.
    Saat ini saya sedang ngerjain skripsi yang temanya tentang stemming untuk teks dalam bahasa Indonesia, kalo boleh saya minta file kamus.txt nya pak?
    Tolong di kirimkan ke email saya. Terima kasih sebelumnya.

  8. Surya berkata

    mas.bole minta program yg utuh nda?
    saya lg ngerjakan tugas kuliah dan lagi butuh stemming nih.
    trima kasih sebelumnya

  9. ilham berkata

    mas, salam kenal
    boleh minta kamus.txt, ini pakai bahasa perl y?kalau bisa kirim via email, karena butuh tentang stemming

  10. liyantanto berkata

    mas boleh minta refensi kata dasarnya gak?lagi butuh banget nich buat Tugas akhir trima kasih

    • oguds berkata

      Saya revisi di bagian lampiran, ada tambahan file lengkap (program, kamus, data). Silakan diunduh seperlunya. Jangan lupa kreditasi ya.

  11. Johnson berkata

    Mas boleh minta kamus.txt nya???
    kalo boleh tolong kirim ke email y mas..
    Terima Kasih

  12. ari berkata

    mas bisa minta kamus kata dasarnya..
    saya butuh banget…saya pakai bahan penelitian

    trims sebelumnya

    • Oguds berkata

      Teman-teman yang baik, bukankah seluruh program dan data (termasuk kamus.txt) sudah ada di lampiran di atas? Coba dicek lagi. Tks.

  13. BOWO berkata

    MAS KO NGGA BISA DI UNDUH YA FILENYAA… BOLEHKAH SAYA MEMINTA URLNYA UNTUK MENGUNDUHNYA.. KARENA SAYA SEDANG BELAJAR MENGENAI STEMMING TERSEBUT. THANKS SEVELUMNYA.

  14. heriantomi berkata

    pak,, ini stemmer ini menggunakan bahasa pemrograman apa?
    ada yang php gak?
    aq mau menggunakan teknik stemmer di php..tolong pencerahannya ya
    terima kasih sebelumnya

  15. indah berkata

    aslm… ka, ada referensi lain ngga tentang stemmer??? klo ada e-book nya, soalnya buat prsyaratan sidang, paling engga harus ada e-booknya… :(

  16. aisah berkata

    Mas, mw download.
    Tp kok linkx tdk bs ya….

  17. dheliz berkata

    ada source code c# nya ga pak ? saya butuh banget…kalo ada tolong kirim ke email saya : dheliz1611@gmailcom
    terima kasih.

  18. pstemmer berkata

    artikel yang keren.., coba saya pelajari dulu,

    btw coba test yang ini : http://persadasoft.ucoz.com/Download/Persada_Stemmer_v1.1.zip

  19. Very rapidly this site will be famous amid all blogging viewers, due to it’s fastidious content

RSS feed for comments on this post · TrackBack URI

Tinggalkan Balasan

Isikan data di bawah atau klik salah satu ikon untuk log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Logout / Ubah )

Twitter picture

You are commenting using your Twitter account. Logout / Ubah )

Facebook photo

You are commenting using your Facebook account. Logout / Ubah )

Google+ photo

You are commenting using your Google+ account. Logout / Ubah )

Connecting to %s

Ikuti

Get every new post delivered to your Inbox.