Skip to main content

Algoritma Stemming Bahasa Indonesia Perl



Algoritma Stemmer Bahasa Indonesia


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)

Comments

Popular posts from this blog

Daftar Kata Dasar Bahasa Indonesia (+30000 kata)

DAFTAR 30000-an kata DASAR DALAM BAHASA INDONESIA update.

a
ab
aba
aba-aba
abad
abadi
abadiah
abah
abah-abah
abai
abaimana
abaka
abaktinal
abakus
abal-abal
aban
abang
abangan
abangga
abar
abatoar
abau
abdas
abdi
abdikasi
abdomen
abdominal
abdu
abduksi
abduktor
abece
aben
aberasi
abet
abian
abid
abidin
abilah
abing
abiogenesis
abiosfer
abiotik
abis
abisal
abiseka
abiturien
abjad
abjadiah
ablasi
ablaut
ablepsia
abnormal
abnormalitas
abnus
aboi
abolisi
abon
abonemen
abong-abong
aborsi
abortif
abortiva
abortus
abrak
abrakadabra
abrar
abras
abrasi
abreaksi
abrek
abreviasi
abrikos
abrit-abrit
abrosfer
absah
absen
absensi
absensia
absente
absenteisme
abses
absis
absolusi
absolut
absolutisme
absonan
absorb
absorben
absorbir
absorpsi
absorpsiometer
absorptif
abstain
abstinensi
abstrak
abstraksi
absurd
absurdisme
abtar
abu
abu-abu
abuan
abuh
abuk
abuk-abuk
abul
abulhayat
abulia
abun-abun
abur
abus
abyad
acah
acak
acak-acakan
acala
acan
acang
acang-acang
acap
acar
acara
acaram
acat
acau
acawi
ac…

PHP Stemmer Bahasa Indonesia

Information Retrieval : Stemming untuk Bahasa Indonesia

Kali ini saya akan membahas tentang Stemming. Tutorial ini sebenarnya merupakan bagian dari tugas yang diberikan pada matakuliah “Sistem Temu Kembali Informasi” atau kalau dalam bahasa inggris disebut juga “Information Retrieval System” atau kalau dalam istilah ilmu komputer sering disebut “Information Retrieval” atau biasa disingkat “IR”.

Lalu apa sih hubungannya IR dengan Stemming, kenapa harus ada stemming dan bagaimana proses stemming itu sendiri? Ok. sebelum kita bahas tutorialnya kita bahas dulu apa itu stemming.

Oke, jadi Stemming merupakan suatu proses untuk menemukan kata dasar dari sebuah kata. Proses stemming dilakukan dengan menghilangkan semua imbuhan (afiks) baik yang terdiri dari awalan (prefiks) sisipan (infiks) maupun akhiran (sufiks) dan kombinasi dari awalan dan akhiran (konfiks). Stemming ini digunakan untuk mengganti bentuk dari suatu kata menjadi kata dasar sesuai dengan struktur morfologi bahasa indonesia y…

Daftar Stop Words List Bahasa Indonesia Download Untuk Dunia Komputer dan Internet (1300 kata) update

DAFTAR STOP WORDS LIST DALAM BAHASA INDONESIA , YANG BANYAK DITEMUI DI INTERNET

1300-an kata dan terus di update.
Jangan Lupa Periksa Daftar Stop Word List dan Sumber Bahan Thesis/Skripsi/Disertasi/Jurnal Ilmiah Tentang Stemming dan Information Retrieval , Link Di Sebelah Kanan Halaman. Selamat Menikmati. Happy Researching!

a
abad
acara
aceh
ada
adalah
adanya
adapun
agak
agaknya
agama
agar
agustus
air
akan
akankah
akhir
akhiri
akhirnya
akibat
aku
akulah
alam
album
amat
amatlah
amerika
anak
and
anda
andalah
anggota
antar
antara
antarabangsa
antaranya
apa
apaan
apabila
apakah
apalagi
apatah
api
april
artikel
artinya
as
asal
asalkan
asas
asia
asing
atas
atau
ataukah
ataupun
australia
awal
awalnya
awam
b
badan
bagai
bagaikan
bagaimana
bagaimanakah
bagaimanapun
bagainamakah
bagi
bagian
bahagian
bahan
baharu
bahasa
bahawa
bahkan
bahwa
bahwasannya
bahwasanya
baik
baiknya
bakal
bakalan
balik
bandar
bangsa
bank
banyak
bapak
barang
barangan
barat
baru
baru-baru
bawah
beberapa
begini
beginian
begi…