Nama NPM Mata Kuliah
: Abdullah Hafidh : 0706271380 : Perolehan Informasi
Daftar Isi Penjelasan mengenai Algoritma yang digunakan ......................................................................................... 1 Pemotongan awalan ................................................................................................................................. 1 Rule 1 # ........................................................................................................................................... 1 Rule 2# ............................................................................................................................................ 1 Rule 3# ............................................................................................................................................ 1 Rule 4# - Proses pemotongan awalan ........................................................................................... 1 Pemotongan akhiran................................................................................................................................. 3 Rule #1 ............................................................................................................................................ 3 Rule 2# ............................................................................................................................................ 3 Rule 3# ............................................................................................................................................ 3 Rule 4# ............................................................................................................................................ 3 Rule 5# ............................................................................................................................................ 4 Hasil Stemming ............................................................................................................................................. 4 Analisa Hasil Stemmer ................................................................................................................................. 6 Analisa Hasil stemming strategi awalan – akhiran ........................................................................ 12 Analisa Hasil stemming strategi akhiran-awalan ........................................................................... 12 Program Perl – Stemming Algorithm tanpa kamus kata dasar ................................................................... 13
Nama NPM Mata Kuliah
: Abdullah Hafidh : 0706271380 : Perolehan Informasi
Penjelasan mengenai Algoritma yang digunakan 1. Stemming strategi awalan – akhiran Stemming strategi ini dilakukan dengan 2 tahap yang berurutan yaitu a. Pemotongan awalan hingga tidak ada lagi awalan yang ditemukan, kemudian b. Pemotongan akhiran hingga tidak ada lagi akhiran yang ditemukan 2. Stemming strategi akhiran – awalan Stemming strategi ini dilakukan dengan 2 tahap yang berurutan yaitu a. Pemotongan akhiran hingga tidak ada lagi akhiran yang ditemukan, kemudian b. Pemotongan awalan hingga tidak ada lagi awalan yang ditemukan Pada dasarnya, algoritma pemotongan awalan maupun akhiran pada kedua strategi sama saja. Namun, urutan eksekusi menjadikannya berbeda. Berikut penjelasannya :
Pemotongan awalan Rule 1 # Jika kata yang akan di stemming berjumlah 2 karakter saja, maka proses stemming tidak dilakukan. Rule 2# Pemotongan awalan me-, be-, pe-, di-, ke-, te-, se-, hanya dilakukan satu kali saja tidak boleh berulang. Rule 3# Jika kata hasil proses stemming berjumlah 2 karakter, maka algoritma akan menggembalikan kata sebelum stemming dilakukan. Rule 4# - Proses pemotongan awalan a. Awalan me1. Jika kata diawali dengan pola mem-(b atau f atau v atau p) maka awalan mem dibuang. Contoh : membasmi mem-basmi sehingga di stemming menjadi basmi 2. Jika kata diawali dengan pola mem – (huruf vokal) – (bukan huruf vokal) maka awalan me – dibuang dan awalan m (setelah me- dibuang) diganti dengan huruf p. pola ini dianggap bentuk peluruhan m dengan p. contoh : memaku mem-aku maku paku, memaksa mem-aksa aksa paksa. Namun mungkin terjadi kesalahan seperti memakan mem-akan akan pakan padahal kata dasarnya makan. 3. Jika kata diawali dengan pola meny- maka buang awalan me- dan ubah awalan nydengan huruf s- contoh : menyapu meny-apu nyapu sapu, menyakiti meny-akiti nyakiti sakiti. Namun, mungkin terdapat kesalahan misalnya menyanyi meny-anyi nyanyi sanyi padahal kata dasarnya nyayi. 4. Jika kata diawali dengan pola men- (c, d, t, j, z, (a,I,u,e, atau o)y ) maka buang awalan men-. Contoh : mencuci men-cuci cuci, mendata men-data data, menjadi men-jadi jadi, menzalimi men-zalimi zalimi
1
Nama NPM Mata Kuliah
: Abdullah Hafidh : 0706271380 : Perolehan Informasi
5. Jika kata diawali dengan pola men – (huruf vokal), maka buang awalan me- dan ubah awalan n- menjadi huruf t (peluruhan). Contoh meninju men-inju ninju tinju. 6. Jika kata diawali dengan pola menge-(huruf vocal) – (bukan huruf vocal ) –(huruf vocal) maka buang awalan menge. Contoh : mengesampingkan mengesampingkan sampingkan. Mengecam menge-cam tidak dibuang. 7. Jika kata diwali dengan pola meng- (huruf vocal) – (k, g, h, atau (bukan huruf vocal berurutan 2 kali) , maka buang awalan meng. Contoh : mengkambinghitamkan meng-kambinghitamkan kambinghitamkan, menggambar meng-gambar gambar, menghasilkan meng-hasilkan hasilkan, mengkhawatirkan mengkhawatirkan khawatirkan. 8. Selain aturan diatas, maka potong awalan me- jika kata tersebut mengandung pola awalan meb. Awalan be1. Jika kata mengandung pola, bel- ajar, maka buang awalan bel. Contoh belajar belajar ajar 2. Jika kata mengandung pola awalan be – huruf apapun – er, maka buang huruf be-. Contoh : bekerja be-kerja kerja. 3. Jika kata mengandung pola awalan be – r – huruf vocal , maka buang awalan becontoh : berasa be – rasa rasa, beriak be – riak riak. Namun, mungkin terjadi kesalahan, misalnya beradu be - radu radu seharusnya adu. 4. Jika kata mengandung pola awalan ber -, maka potong awalan ber-. 5. Jika kata mengandung pola awalan be-, maka potong awalan bec. Awalan pe1. Jika kata mengandung pola, pel- ajar, maka buang awalan pel. Contoh pelajar pelajar ajar 2. Jika kata mengandung pola penge – bukan deretan huruf vocal – huruf vocal – bukan huruf vocal – maka buang awalan penge - . Contoh : pengetik penge-tik tik 3. Jika kata mengandung pola peng- (huruf vocal, k, g, h, 2 deretan bukan huruf vocal) - maka buang awalan peng-. Contoh : pengaman peng-aman aman, pengkhianat peng-khianat khianat, pengurus peng-urus urus. Namun mungkin terjadi kesalahan seperti : pengirim peng-irim irim 4. Jika kata mengandung pola pen – d, c, j, l maka buang awalan pen. Contoh : pendahulu pen-dahulu dahulu 5. Jika kata mengandung pola peny- maka buang awalan pe- lalu ubah awalan nymenjadi s (peluluhan). Contoh : penyiar pe-nyiar nyiar siar. 6. Jika kata mengandung pola pem – b, p – maka buang awalan pem –. Contoh : pembeda pem- beda beda. 7. Jika kata mengandung pola per – a,I,u,e,o – maka buang awalan per. Contoh : peristri per-istri istri. Namun, mungkin terdapat kesalahan seperti peringan per-ingan ingan, seharusnya ringan 8. Jika kata mengandung pola per- maka buang awalan per 9. Jika kata mengandung pola pe – l, r, w, y – maka buang awalan pe-. Contoh : pelamun pe-lamun lamun, pewayang pe-wayang wayang 2
Nama NPM Mata Kuliah
: Abdullah Hafidh : 0706271380 : Perolehan Informasi
10. Jika kata mengandung pola pe – m, n, ng, ny – a,I,u,e,o – maka buang awalan pe-. Contoh pemenang pe-menang menang. d. Awalan di1. Jika kata mengandung pola di – maka buang awalan di-. Contoh : dimaksud dimaksud maksud e. Awalan ke1. Jika kata mengandung pola ke- maka buang awalan kef. Awalan te-
Sumber: Stemming Indonesian, Jelita Asian Hugh E., Williams S.M.M., Tahaghoghi (Nazief and Adriani's Algorithm). Table diatas adalah aturan untuk awalan te, pada mulanya awalan te- dibuang, kemudian di cek apakah awalan selanjutnya adalah r, atau bukan r ata huruf vocal (lihat kolom set 1), kemudian jika termasuk salah satu diatas maka lihat kolom set-2, dan seterusnya berdasarkan table diatas. g. Awalan se1. Jika kata mengandung pola se- maka buang awalan se-.
Pemotongan akhiran Rule #1 Jika kata yang akan di stemming berjumlah 2 karakter saja, maka proses stemming tidak dilakukan. Rule 2# Pemotongan akhiran dibagi atas 3 kategori yaitu Derivation Suffix, Possessive pronouns, dan Particles. Pemotongan masing-masing kategori hanya boleh dilakukan satu kali saja. Yang termasuk Derivation Suffix adalah akhiran –an dan – I, sedangkan yang termasuk Possessive pronouns adalah –ku, -mu, -nya. Dan yang termasuk Particles adalah –kah, -lah, -tah, -pun. Rule 3# Jika kata hasil proses stemming berjumlah 2 karakter, maka algoritma akan menggembalikan kata sebelum stemming dilakukan. Rule 4# Jika kata termasuk dalam akhiran –an atau –I (termasuk –wan, -wati, atau –kan), maka terlebih dahulu cek apakah terdapat awalan yang tidak boleh ada. Aturan tersebut adalah 3
Nama NPM Mata Kuliah
: Abdullah Hafidh : 0706271380 : Perolehan Informasi
Sumber: Stemming Indonesian, Jelita Asian Hugh E., Williams S.M.M., Tahaghoghi (Nazief and Adriani's Algorithm). Rule 5# Jika kata mengandung pola akhiran –kan, -wan, -wati, -an, -I, -lah, -kah, tah, -nya, -mu, -ku, atau -pun maka buang akhiran tersebut. Urutan pengecekan dimulai dari kiri ke kanan (misalnya : cek dulu akhiran –kan baru cek awalan –wan, dan seterusnya hingga akhiran – pun). Sumber Algoritma diatas : http://massofa.wordpress.com/2009/04/22/bab-2-kemampuan-dalam-pemenggalan-kata-berimbuhansiswa-kelas-v-son-005-kampung-satu-tarakan/ Stemming Indonesian, Jelita Asian, Hugh E. Williams, S.M.M. Tahaghoghi http://id.wikipedia.org/wiki/Prefiks
Hasil Stemming Kata Imbuhan bepergian berada berahasia beratnya berhenti berjabatan berkecukupan berkedudukannya beroda berpendidikan berpengetahuan diabaikan diadili diagendakan dibangunkan dibanjiri
Awalan - Akhiran gian rada rahasia rat hent jabat cukup dudu roda dikan tahu abai adil agenda bangun banjir
Akhiran - Awalan pergi rada rahasia rat henti jabat cukup dudu roda didi tahu abai adil agenda bangun banjir
Kata Dasar pergi ada rahasia berat henti jabat cukup duduk roda didik tahu abaik adil agenda bangun banjir 4
Nama NPM Mata Kuliah
: Abdullah Hafidh : 0706271380 : Perolehan Informasi
dibiayainya diganti diinformasikannya dikatakannya dimanipulasi dipelopori diperluas keadaan kebersamaan keberuntungannya keimigrasian kekasih kenali kenangan kepemerintahannya kepemudaan kesaktiannya kesantaian melambungkannya melampaui memaafkan memagari memainkannya memanggilnya membandingkannya membekali memenjarakan memiliki mempelajari memperbandingkan menyepakati pekerjaannya pelecehan peledak pemasukan pematung pembakaran pembantu pemelihara pemogokan
biaya gant informasi kata manipulas lopor luas ada sama runtung imigrasi kasih nal nang rin muda sakti santai lambung lampau maaf pagar main panggil banding kal jara pilik ajar banding pakat pekerja leceh ledak masu matung bakar bantu lihara mogo
biaya gant informasi kata manipulas lopor luas ada sama runtung imigrasi kasih nali nang rin muda sakti santai lambung lampau maaf pagar main panggil banding kal jara pilik ajar banding pakat pekerja leceh ledak masu matung bakar bantu lihara mogo
biaya ganti informasi kata manipulasi lopor luas ada sama untung imigrasi kasih kenal kenang perintah muda sakti santai lambung lampau maaf pagar main panggil banding bekal penjara milik ajar banding sepakat kerja leceh ledak masuk patung bakar bantu pelihara mogok 5
Nama NPM Mata Kuliah
: Abdullah Hafidh : 0706271380 : Perolehan Informasi
penampung penayangannya seangkatan secukupnya sederajat seekor sekelilingnya sekolahnya sekumpulan seperangkat sepi serumah syukuran terakhir terasa terbang terbentuknya terhindarkan terindah terkotori terlewatkan ternilai tersebar terukir
nampung nayang angkat cukup derajat ekor liling kolah kumpul angkat sepi rumah syukur akhir asa bang ntuk hindar indah kotor lewat nila bar ukir
nampung nayang angkat cukup derajat ekor liling seko kumpul angkat sepi rumah syukur akhir asa bang ntuk hindar indah kotor lewat nila bar ukir
tampung tayang angkat cukup derajat ekor keliling sekolah kumpul angkat sepi rumah syukur akhir rasa terbang bentuk hundar hindar kotor lewat nilai sebar ukir
Analisa Hasil Stemmer a. Strategi Awalan – Akhiran
Awalan Akhiran
Kata Dasar
Kategori Hasil Stemmer
gian
pergi
Overstemming
rada
ada
Recoding ambiguity (rule related)
rahasia
rahasia
Exact Match
rat
berat
Overstemming
hent
henti
Overstemming
jabat
jabat
Exact Match
cukup
cukup
Exact Match
dudu
duduk
Recoding ambiguity (rule related) 6
Nama NPM Mata Kuliah
: Abdullah Hafidh : 0706271380 : Perolehan Informasi roda
roda
Exact Match
dikan
didik
Mis-stemming
tahu
tahu
Exact Match
abai
abai
Exact Match
adil
adil
Exact Match
agenda
agenda
Exact Match
bangun
bangun
Exact Match
banjir
banjir
Exact Match
biaya
biaya
Exact Match
gant
ganti
Overstemming
informasi
informasi
Exact Match
kata
kata
Exact Match
manipulas
manipulasi Overstemming
lopor
lopor
Exact Match
luas
luas
Exact Match
ada
ada
Exact Match
sama
sama
Exact Match
runtung
untung
Recoding ambiguity (rule related)
imigrasi
imigrasi
Exact Match
kasih
kasih
Exact Match
nal
kenal
Overstemming
nang
kenang
Overstemming
rin
perintah
Overstemming
muda
muda
Exact Match
sakti
sakti
Exact Match
santai
santai
Exact Match
lambung
lambung
Exact Match
lampau
lampau
Exact Match
maaf
maaf
Exact Match
pagar
pagar
Exact Match
main
main
Exact Match
panggil
panggil
Exact Match
banding
banding
Exact Match
kal
bekal
Overstemming
jara
penjara
Overstemming
pilik
milik
Recoding ambiguity (rule related)
ajar
ajar
Exact Match 7
Nama NPM Mata Kuliah
: Abdullah Hafidh : 0706271380 : Perolehan Informasi banding
banding
Exact Match
pakat
sepakat
Overstemming
pekerja
kerja
Understemming
leceh
leceh
Exact Match
ledak
ledak
Exact Match
masu
masuk
Recoding ambiguity (rule related)
matung
patung
Recoding ambiguity (rule related)
bakar
bakar
Exact Match
bantu
bantu
Exact Match
lihara
pelihara
Overstemming
mogo
mogok
Recoding ambiguity (rule related)
nampung
tampung
Recoding ambiguity (rule related)
nayang
tayang
Recoding ambiguity (rule related)
angkat
angkat
Exact Match
cukup
cukup
Exact Match
derajat
derajat
Exact Match
ekor
ekor
Exact Match
liling
keliling
Overstemming
kolah
sekolah
Overstemming
kumpul
kumpul
Exact Match
angkat
angkat
Exact Match
sepi
sepi
Exact Match
rumah
rumah
Exact Match
syukur
syukur
Exact Match
akhir
akhir
Exact Match
asa
rasa
Recoding ambiguity (rule related)
bang
terbang
Overstemming
ntuk
bentuk
Overstemming
hindar
hindar
Exact Match
indah
indah
Exact Match
kotor
kotor
Exact Match
lewat
lewat
Exact Match
nila
nilai
Overstemming
bar ukir
sebar ukir
Overstemming Exact Match
8
Nama NPM Mata Kuliah
: Abdullah Hafidh : 0706271380 : Perolehan Informasi Kategori Hasil Stemmer
Exact Match Overstemming Recoding ambiguity (rule related) Understemming Mis-stemming Total
Hasil Perhitungan 50 18 10 1 1 80
b. Strategi Akhiran – Awalan Akhiran - Awalan
Kata Dasar
Kategori Hasil Stemmer
pergi rada rahasia rat henti jabat cukup dudu roda didi tahu abai adil agenda bangun banjir biaya gant informasi kata manipulas lopor luas ada sama runtung imigrasi
pergi ada rahasia berat henti jabat cukup duduk roda didik tahu abai adil agenda bangun banjir biaya ganti informasi kata manipulasi lopor luas ada sama untung imigrasi
Exact Match Recoding ambiguity (rule related) Exact Match Overstemming Exact Match Exact Match Exact Match Recoding ambiguity (rule related) Exact Match Recoding ambiguity (rule related) Exact Match Exact Match Exact Match Exact Match Exact Match Exact Match Exact Match Overstemming Exact Match Exact Match Overstemming Exact Match Exact Match Exact Match Exact Match Recoding ambiguity (rule related) Exact Match 9
Nama NPM Mata Kuliah
: Abdullah Hafidh : 0706271380 : Perolehan Informasi kasih nali nang rin muda sakti santai lambung lampau maaf pagar main panggil banding kal jara pilik ajar banding pakat pekerja leceh ledak masu matung bakar bantu lihara mogo nampung nayang angkat cukup derajat ekor liling seko kumpul
kasih kenal kenang perintah muda sakti santai lambung lampau maaf pagar main panggil banding bekal penjara milik ajar banding sepakat kerja leceh ledak masuk patung bakar bantu pelihara mogok tampung tayang angkat cukup derajat ekor keliling sekolah kumpul
Exact Match Overstemming Overstemming Overstemming Exact Match Exact Match Exact Match Exact Match Exact Match Exact Match Exact Match Exact Match Exact Match Exact Match Overstemming Overstemming Recoding ambiguity (rule related) Exact Match Exact Match Overstemming Understemming Exact Match Exact Match Recoding ambiguity (rule related) Recoding ambiguity (rule related) Exact Match Exact Match Overstemming Recoding ambiguity (rule related) Recoding ambiguity (rule related) Recoding ambiguity (rule related) Exact Match Exact Match Exact Match Exact Match Overstemming Overstemming Exact Match 10
Nama NPM Mata Kuliah
: Abdullah Hafidh : 0706271380 : Perolehan Informasi angkat sepi rumah syukur akhir asa bang ntuk hindar indah kotor lewat nila bar ukir
angkat sepi rumah syukur akhir rasa terbang bentuk hindar indah kotor lewat nilai sebar ukir
Kategori Hasil Stemmer Exact Match Overstemming Recoding ambiguity (rule related) Understemming Mis-stemming Total
Exact Match Exact Match Exact Match Exact Match Exact Match Recoding ambiguity (rule related) Overstemming Overstemming Exact Match Exact Match Exact Match Exact Match Overstemming Overstemming Exact Match
Hasil Perhitungan 52 16 11 1 0 80
Keterangan mengenai Kategori Hasil stemmer 1. Exact Match Merupakan hasil yang menyatakan bahwa hasil yang diperoleh dari proses stemmer dengan kata dasar sebenarnya suda sama. 2. Overstemming Merupakan kesalahan yang diakibatkan terjadinya proses pemotongan secara berlebihan. Misalnya kata terbang ketika di proses dengan algoritma stemmer menjadi kata bang. Terjadinya pemotongan te- disini seharusnya tidak perlu. 3. Recoding ambiguity (rule related) Merupakan kesalahan yang diakibatkan ambiguitas dari rule-rule yang didefinisikan dalam algoritma. Sebagai contoh kata terasa dengan kata dasar rasa, di stem menjadi asa. Hal ini dikarenakan dalam algoritma dinyatakan bahwa setiap kata diawali dengan huruf te – r – [aiueor] dianggap ter- luluh sehingga imbuhan ter dibuang. 4. Understemming
11
Nama NPM Mata Kuliah
: Abdullah Hafidh : 0706271380 : Perolehan Informasi Kesalahan yang diakibatkan kurangnya pemotongan kata menjadi suatu kata dasar. Sebagai contoh kata setelah hasil stem adalah pekerja, padahal seharusnya kata dasarnya adalah kerja. Dalam kasus ini seharusnya dilakukan pemotongan kembali imbuhan pesehingga menghasilkan kata stem yang tepat. 5. Mis-stemming Kesalahan yang diakibatkan karena kesalahan pemotongan kata dasarnya, misalnya kata pendidikan (pen-didik-an). Dengan algoritma stemmer awalan-akhiran, kata ini dipotong dari awal dengan urutan sebagai berikut : pen- di-. Pemotongan imbuhan di yang merupakan bagian dari kata dasar didik dipotong sehingga kategori untuk kesalahan ini adalah Mis-stemming.
Analisa Hasil stemming strategi awalan – akhiran Kategori Hasil Stem Exact Match Overstemming Recoding ambiguity (rule related) Understemming Mis-stemming Total
Persentase 62,50% 22,50% 12,50% 1,25% 1,25% 100,00%
Dari perhitungan persentase diatas, meskipun algoritma yang diterapkan tanpa menggunakan kata dasar, hasil yang diperlihatkan pun cukup memuaskan yaitu tingkat akurasinya > 50% yaitu 62.5%. Jenis kesalahan yang paling besar dilakukan adalah Overstemming yaitu 22.5%. Sedangkan yang paling kecil adalah mis-stemming dan understemming dengan masing-masing persentase adalah 1.25%. Kesalahan dalam recoding ambiguity sebesar 12.5% dikarenakan ketidaktepatan dalam melakukan proses peluruhan kata. Analisa Hasil stemming strategi akhiran-awalan Kategori Hasil Stem Exact Match Overstemming Recoding ambiguity (rule related) Understemming Mis-stemming Total
Persentase 65% 20% 13.75% 1.25% 0% 100,00%
Dari perhitungan diatas, hasil stemming strategi ini cenderung lebih baik dibandingkan algoritma awalanakhiran dengan melihat hasil exact match yang diperoleh yaitu 65% banding 62.5%. Proses overstemming pun dapat dikurangi sebesar 1.25% dibandingkan dengan strategi awalana-akhiran. Kesalahan akibat mis-
12
Nama NPM Mata Kuliah
: Abdullah Hafidh : 0706271380 : Perolehan Informasi
stemming pun berhasil dikurangi sebesar 1,25%. Namun, kesalahan recoding ambiguity bertambah sebesar 1,25%. Keterangan : Data yang digunakan adalah data yang diberikan di scele (Student Center E-Learning) Fakultas Ilmu Komputer, UI. Kesimpulan dari hasil analisa ini adalah Proses stem strategi akhiran – awalan lebih baik dibandingkan strategi awalan – akhiran berdasarkan algoritma yang diterapkan.
Program Perl – Stemming Algorithm tanpa kamus kata dasar open(my $input, "<", "imbuhan.txt") or die "Can't open imbuhan.txt: $!"; my @lines = <$input>; print "Kata Imbuhan; Hasil Stemming Awalan - Akhiran ; Hasil Stemming Akhiran - Awalan\n"; foreach $line (@lines) { chomp($line); print $line .";". &stemmingAwalanAkhiran($line) .";".&stemmingAkhiranAwalan($line); print "\n"; } sub stemmingAwalanAkhiran() { my $word = $_[0]; my $temporary; my @numberOfStemAwalan = (0, 0, 0, 0, 0, 0, 0); my @numberOfStemAkhiran = (0, 0, 0); my @temp; # Preffix # be# di# ke# me# se# te-
Disallowed suffixes -i -an -i, -kan -an -i,-kan -an
do { $temporary = $word; #me, be, pe, di, ke, te, se @temp = &stemmingAwalan($temporary, $numberOfStemAwalan[0], $numberOfStemAwalan[1], $numberOfStemAwalan[2], $numberOfStemAwalan[3], $numberOfStemAwalan[4], $numberOfStemAwalan[5], $numberOfStemAwalan[6]);
13
Nama NPM Mata Kuliah
: Abdullah Hafidh : 0706271380 : Perolehan Informasi
$index = 0; foreach $i(@temp) { if($index != $#temp){ $numberOfStemAwalan[$index] = $temp[$index]; } else{ $word = $temp[$index]; } $index++; } }while ($word !~ $temporary); do { $temporary = $word; @temp = &stemmingAkhiran($temporary, $numberOfStemAkhiran[0], $numberOfStemAkhiran[1], $numberOfStemAkhiran[2]); $index = 0; foreach $i(@temp) { if($index != $#temp){ $numberOfStemAkhiran[$index] = $temp[$index]; } else{ $word = $temp[$index]; } $index++; } }while ($word !~ $temporary); return $word; } sub stemmingAkhiranAwalan() { my $word = $_[0]; my $temporary; my @numberOfStemAwalan = (0, 0, 0, 0, 0, 0, 0); my @numberOfStemAkhiran = (0, 0, 0); my @temp; do {
14
Nama NPM Mata Kuliah
: Abdullah Hafidh : 0706271380 : Perolehan Informasi $temporary = $word; @temp = &stemmingAkhiran($temporary, $numberOfStemAkhiran[0], $numberOfStemAkhiran[1], $numberOfStemAkhiran[2]); #me, be, pe, di, ke, te, se
$index = 0; foreach $i(@temp) { if($index != $#temp){ $numberOfStemAkhiran[$index] = $temp[$index]; } else{ $word = $temp[$index]; } $index++; } }while ($word !~ $temporary); do { $temporary = $word; @temp = &stemmingAwalan($temporary, $numberOfStemAwalan[0], $numberOfStemAwalan[1], $numberOfStemAwalan[2], $numberOfStemAwalan[3], $numberOfStemAwalan[4], $numberOfStemAwalan[5], $numberOfStemAwalan[6]); $index = 0; foreach $i(@temp) { if($index != $#temp){ $numberOfStemAwalan[$index] = $temp[$index]; } else{ $word = $temp[$index]; } $index++; } }while ($word !~ $temporary); return $word; } sub stemmingAwalan() { # The same affix cannot be repeatedly applied. For example, after a word is preffixed with \te-" or # one of its variations, it is not possible to repeat the preffix \te-" or any of those variations
15
Nama NPM Mata Kuliah
: Abdullah Hafidh : 0706271380 : Perolehan Informasi
my $word = $_[0]; my $temp = $word; #me, be, pe, di, ke, te, se my @awalan = ($_[1], $_[2], $_[3], $_[4], $_[5], $_[6], $_[7]); #~ If a word has one or two characters, then stemming is not attempted. if(length $word <= 2){ return $word; } #stemming awalan me if($word =~ /^me/ && $awalan[0] == 0){ $word = stemmingAwalanMe($word); $awalan[0]++; } #stemming awalan be elsif($word =~ /^be/ && $awalan[1] == 0){ $word = stemmingAwalanBe($word); $awalan[1]++; } #stemming awalan pe elsif($word =~ /^pe/ && $awalan[2] == 0){ $word = stemmingAwalanPe($word); $awalan[2]++; } #stemming awalan di elsif($word =~ /^di/ && $awalan[3] == 0){ $word = stemmingAwalanDi($word); $awalan[3]++; } #stemming awalan ke elsif($word =~ /^ke/ && $awalan[4] == 0){ $word = stemmingAwalanKe($word); $awalan[4]++; } #stemming awalan te elsif($word =~ /^te/ && $awalan[5] == 0){ $word = stemmingAwalanTe($word); $awalan[5]++; } #stemming awalan se elsif($word =~ /^se/ && $awalan[6] == 0){ $word = stemmingAwalanSe($word); $awalan[6]++; }
16
Nama NPM Mata Kuliah
: Abdullah Hafidh : 0706271380 : Perolehan Informasi
if(length $word <= 2){ $word = $temp; } push @awalan, $word; return @awalan; } sub stemmingAwalanMe() { my $word = $_[0]; my $temp = $word; $temp =~ s/^mem(b|f|v|p)(.)/$1$2/i; if($temp !~ $word) { return $temp; } $temp =~ s/^mem([aiueo][^aiueo])(.)/p$1$2/i; #peluruhan p if($temp !~ $word) { return $temp; } #me + kata dasar dengan huruf awal s berubah menjadi meny$temp = $word; $temp =~ s/^meny(.*)/s$1/i; if($temp !~ $word) { return $temp; } $temp = $word; $temp =~ s/^men(c|d|t|j|z|[a-zA-Z]y)(.)/$1$2/i; if($temp !~ $word) { return $temp; } $temp = $word; $temp =~ s/^men([^aiueo][aiueo][^aiueo])$/$1/i; if($temp !~ $word) { return $temp; } $temp = $word;
17
Nama NPM Mata Kuliah
: Abdullah Hafidh : 0706271380 : Perolehan Informasi
$temp =~ s/^men([aiueo])(.)/t$1$2/i; #peluruhan t if($temp !~ $word) { return $temp; } $temp = $word; $temp =~ s/^menge([^aiueo]+[aiueo][^aiueo])$/$1/i; if($temp !~ $word) { return $temp; } #me + kata dasar dengan huruf awal huruf vokal, g, h $temp = $word; $temp =~ s/^meng([aiueo]|k|g|h|[^aiueo][^aiueo])(.)/$1$2/i; if($temp !~ $word) { return $temp; } $temp = $word; $temp =~ s/^me(.)/$1$2/i; if($temp !~ $word) { return $temp; } return $word; } sub stemmingAwalanBe() { my $word = $_[0]; my $temp = $word; $temp =~ s/^bel(ajar)/$1/i; if($temp !~ $word) { return $temp; } $temp = $word; $temp =~ s/^be([a-zA-Z]er)/$1/i; if($temp !~ $word && $temp) { return $temp;
18
Nama NPM Mata Kuliah
: Abdullah Hafidh : 0706271380 : Perolehan Informasi
}
$temp = $word; $temp =~ s/^be(r[aiueo])(.)/$1$2/i; if($temp !~ $word && $temp) { return $temp; } $temp = $word; $temp =~ s/^be(r)(.)/$2/i; if($temp !~ $word) { return $temp; } $temp = $word; $temp =~ s/^be(.)/$1/i; if($temp !~ $word) { return $temp; } return $word; } sub stemmingAwalanPe() { my $word = $_[0]; my $temp = $word; $temp =~ s/^pel(ajar)/$1/i; if($temp !~ $word) { return $temp; } $temp =~ s/^penge([^aiueo]+[aiueo][^aiueo])/$1/i; if($temp !~ $word) { return $temp; } $temp = $word; $temp =~ s/^peng([aiueo]|k|g|h|[^aiueo][^aiueo])(.)/$1$2/i; if($temp !~ $word)
19
Nama NPM Mata Kuliah
: Abdullah Hafidh : 0706271380 : Perolehan Informasi
{ return $temp; } $temp = $word; $temp =~ s/^pen(d|c|j|l)(.)/$1$2/i; if($temp !~ $word) { return $temp; } $temp = $word; $temp =~ s/^peny(.)/s$1/i; if($temp !~ $word) { return $temp; } $temp = $word; $temp =~ s/^pem(b|p)(.)/$1$2/i; if($temp !~ $word) { return $temp; } #aturan untuk per $temp = $word; $temp =~ s/^per([aiueo].)/$1/i; if($temp !~ $word) { return $temp; } $temp = $word; $temp =~ s/^per(.)/$1/i; if($temp !~ $word) { return $temp; } $temp = $word; $temp =~ s/^pe(l|r|w|y)(.)/$1$2/i; if($temp !~ $word) { return $temp; } $temp = $word; $temp =~ s/^pe(m|n|ng|ny)([aiueo])(.)/$1$2$3/i; if($temp !~ $word)
20
Nama NPM Mata Kuliah
: Abdullah Hafidh : 0706271380 : Perolehan Informasi
{ return $temp; } return $word; } sub stemmingAwalanDi() { my $word = $_[0]; my $temp = $word; $temp =~ s/^di(.)/$1/i; if($temp !~ $word) { return $temp; } return $word; } sub stemmingAwalanKe() { my $word = $_[0]; my $temp = $word; $temp =~ s/^ke(.)/$1/i; if($temp !~ $word) { return $temp; } return $word; } sub stemmingAwalanTe() { my $word = $_[0]; my $temp = $word; $word =~ s/^te(.)/$1/i; if($word =~ /^r/)#set 1 { $word =~ s/^r(.)/$1/i; if($word =~ /^r/i)#set 2 { #rule 1 - none return $temp; } elsif($word =~ /^[raiueo]/i)#set 2 { #rule 2 - ter-luluh
21
Nama NPM Mata Kuliah
: Abdullah Hafidh : 0706271380 : Perolehan Informasi return $word; } elsif($word =~ /^[^raiueo]/i)#set 2 { $word =~ s/^[^raiueo](.)/$1/i; if($word =~ /^er/) #set 3 { $word =~ s/^er(.)/$1/i; if($word =~ /^[aiueo]/i) { $temp =~ s/^ter(.)/$1/i; return $temp; } elsif($word =~ /^[^aiueo]/i) { return $temp; } } elsif($word !~ /^er/) #set 3 { $temp =~ s/^ter(.*)/$1/i; return $temp; } }
} elsif($word =~ /^[^raiueo]/) { $word =~ s/^[^raiueo](.)/$1/i; if($word =~ /^er/) { $word =~ s/^er(.)/$1/i; if($word =~ /^[aiueo]/) { return $temp; } if($word !~ /^[aiueo]/) { $temp =~ s/^te(.)/$1/i; return $temp; } } } return $temp; }
22
Nama NPM Mata Kuliah
: Abdullah Hafidh : 0706271380 : Perolehan Informasi
sub stemmingAwalanSe() { my $word = $_[0]; my $temp = $word; $temp =~ s/^se(.)/$1/i; if($temp !~ $word) { return $temp; } return $word; } sub stemmingAkhiran() { my $word = $_[0]; my $temp = $word; #root-word [[+DS][+PP][+P]] my @akhiran = ($_[1], $_[2], $_[3]); if(length $word <= 2) { return $word; } #derivation suffix, hanya sekali saja. if(($word =~ /an$/ || $word =~ /i$/) && $akhiran[0] == 0) { $akhiran[0]++; if(($word =~ /^me/ && $word =~ /[^k]an$/) | ($word =~ /^be/ && $word =~ /i$/) |($word =~ /^di/ && $word =~ /[^k]an$/) | ($word =~ /^ke/ && ($word =~ /i$/ || $word =~ /kan$/)) | ($word =~ /^te/ && $word =~ /[^k]an$/) | ($word =~ /^se/ && ($word =~ /i$/ || $word =~ /kan$/))){ return $word; } if($word =~ /kan$/){ $word = stemmingAkhiranKan($word); } elsif($word =~ /an$/){ $word = stemmingAkhiranAn($word); } elsif($word =~ /i$/){ $word = stemmingAkhiranI($word); } } #Possessive pronouns, hanya sekali saja
23
Nama NPM Mata Kuliah
: Abdullah Hafidh : 0706271380 : Perolehan Informasi
elsif(($word =~ /ku$/ || $word =~ /mu$/ || $word =~ /nya$/) && $akhiran[1] == 0) { $akhiran[1]++; if($word =~ /ku$/){ $word = stemmingAkhiranKu($word); } elsif($word =~ /mu$/){ $word = stemmingAkhiranMu($word); } elsif($word =~ /nya$/){ $word = stemmingAkhiranNya($word); } } #Particles, hanya sekali saja. elsif(($word =~ /kah$/ || $word =~ /lah$/ || $word =~ /tah$/ || $word =~ /pun$/) && $akhiran[2] == 0) { $akhiran[2]++; if($word =~ /lah$/){ $word = stemmingAkhiranLah($word); } elsif($word =~ /kah$/){ $word = stemmingAkhiranKah($word); } elsif($word =~ /tah$/){ $word = stemmingAkhiranTah($word); } elsif($word =~ /pun$/){ $word = stemmingAkhiranPun($word); } } if(length $word <= 2) { $word = $temp; } push @akhiran, $word; return @akhiran; } sub stemmingAkhiranKan() { my $word = $_[0]; my $temp = $word; $temp =~ s/(.)kan$/$1/i;
24
Nama NPM Mata Kuliah
: Abdullah Hafidh : 0706271380 : Perolehan Informasi
return $temp; } sub stemmingAkhiranWan() { my $word = $_[0]; my $temp = $word; $temp =~ s/(.)wan$/$1/i; return $temp; } sub stemmingAkhiranWati() { my $word = $_[0]; my $temp = $word; $temp =~ s/(.)wati$/$1/i; return $temp; } sub stemmingAkhiranAn() { my $word = $_[0]; my $temp = $word; $temp =~ s/(.)an$/$1/i; return $temp; } sub stemmingAkhiranI() { my $word = $_[0]; my $temp = $word; $temp =~ s/(.)i$/$1/i; return $temp; } sub stemmingAkhiranLah() { my $word = $_[0]; my $temp = $word; $temp =~ s/(.)lah$/$1/i; return $temp; }
25
Nama NPM Mata Kuliah
: Abdullah Hafidh : 0706271380 : Perolehan Informasi
sub stemmingAkhiranKah() { my $word = $_[0]; my $temp = $word; $temp =~ s/(.)kah$/$1/i; return $temp; } sub stemmingAkhiranTah() { my $word = $_[0]; my $temp = $word; $temp =~ s/(.)tah$/$1/i; return $temp; } sub stemmingAkhiranNya() { my $word = $_[0]; my $temp = $word; $temp =~ s/(.)nya$/$1/i; return $temp; } sub stemmingAkhiranMu() { my $word = $_[0]; my $temp = $word; $temp =~ s/(.)mu$/$1/i; return $temp; } sub stemmingAkhiranKu() { my $word = $_[0]; my $temp = $word; $temp =~ s/(.)ku$/$1/i; return $temp; } sub stemmingAkhiranPun()
26
Nama NPM Mata Kuliah
: Abdullah Hafidh : 0706271380 : Perolehan Informasi
{ my $word = $_[0]; my $temp = $word; $temp =~ s/(.)pun$/$1/i; return $temp; }
27