Nama : Abdullah Hafidh NPM : 0706271380 Mata Kuliah ... · Kategori Hasil Stemmer Hasil Perhitungan...

28
Nama : Abdullah Hafidh NPM : 0706271380 Mata Kuliah : 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

Transcript of Nama : Abdullah Hafidh NPM : 0706271380 Mata Kuliah ... · Kategori Hasil Stemmer Hasil Perhitungan...

Nama : Abdullah Hafidh NPM : 0706271380 Mata Kuliah : 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 : Abdullah Hafidh NPM : 0706271380 Mata Kuliah : Perolehan Informasi

1

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 me-

1. 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 ny-

dengan 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

Nama : Abdullah Hafidh NPM : 0706271380 Mata Kuliah : Perolehan Informasi

2

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 menge-

sampingkan 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 meng-

khawatirkan khawatirkan.

8. Selain aturan diatas, maka potong awalan me- jika kata tersebut mengandung pola

awalan me-

b. Awalan be-

1. Jika kata mengandung pola, bel- ajar, maka buang awalan bel. Contoh belajar bel-

ajar 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 be-

contoh : 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 be-

c. Awalan pe-

1. Jika kata mengandung pola, pel- ajar, maka buang awalan pel. Contoh pelajar pel-

ajar 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 ny-

menjadi 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

Nama : Abdullah Hafidh NPM : 0706271380 Mata Kuliah : Perolehan Informasi

3

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 di-

1. Jika kata mengandung pola di – maka buang awalan di-. Contoh : dimaksud di-

maksud maksud

e. Awalan ke-

1. Jika kata mengandung pola ke- maka buang awalan ke-

f. 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 se-

1. 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

Nama : Abdullah Hafidh NPM : 0706271380 Mata Kuliah : Perolehan Informasi

4

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-berimbuhan-

siswa-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 Awalan - Akhiran Akhiran - Awalan Kata Dasar

bepergian gian pergi pergi

berada rada rada ada

berahasia rahasia rahasia rahasia

beratnya rat rat berat

berhenti hent henti henti

berjabatan jabat jabat jabat

berkecukupan cukup cukup cukup

berkedudukannya dudu dudu duduk

beroda roda roda roda

berpendidikan dikan didi didik

berpengetahuan tahu tahu tahu

diabaikan abai abai abaik

diadili adil adil adil

diagendakan agenda agenda agenda

dibangunkan bangun bangun bangun

dibanjiri banjir banjir banjir

Nama : Abdullah Hafidh NPM : 0706271380 Mata Kuliah : Perolehan Informasi

5

dibiayainya biaya biaya biaya

diganti gant gant ganti

diinformasikannya informasi informasi informasi

dikatakannya kata kata kata

dimanipulasi manipulas manipulas manipulasi

dipelopori lopor lopor lopor

diperluas luas luas luas

keadaan ada ada ada

kebersamaan sama sama sama

keberuntungannya runtung runtung untung

keimigrasian imigrasi imigrasi imigrasi

kekasih kasih kasih kasih

kenali nal nali kenal

kenangan nang nang kenang

kepemerintahannya rin rin perintah

kepemudaan muda muda muda

kesaktiannya sakti sakti sakti

kesantaian santai santai santai

melambungkannya lambung lambung lambung

melampaui lampau lampau lampau

memaafkan maaf maaf maaf

memagari pagar pagar pagar

memainkannya main main main

memanggilnya panggil panggil panggil

membandingkannya banding banding banding

membekali kal kal bekal

memenjarakan jara jara penjara

memiliki pilik pilik milik

mempelajari ajar ajar ajar

memperbandingkan banding banding banding

menyepakati pakat pakat sepakat

pekerjaannya pekerja pekerja kerja

pelecehan leceh leceh leceh

peledak ledak ledak ledak

pemasukan masu masu masuk

pematung matung matung patung

pembakaran bakar bakar bakar

pembantu bantu bantu bantu

pemelihara lihara lihara pelihara

pemogokan mogo mogo mogok

Nama : Abdullah Hafidh NPM : 0706271380 Mata Kuliah : Perolehan Informasi

6

penampung nampung nampung tampung

penayangannya nayang nayang tayang

seangkatan angkat angkat angkat

secukupnya cukup cukup cukup

sederajat derajat derajat derajat

seekor ekor ekor ekor

sekelilingnya liling liling keliling

sekolahnya kolah seko sekolah

sekumpulan kumpul kumpul kumpul

seperangkat angkat angkat angkat

sepi sepi sepi sepi

serumah rumah rumah rumah

syukuran syukur syukur syukur

terakhir akhir akhir akhir

terasa asa asa rasa

terbang bang bang terbang

terbentuknya ntuk ntuk bentuk

terhindarkan hindar hindar hundar

terindah indah indah hindar

terkotori kotor kotor kotor

terlewatkan lewat lewat lewat

ternilai nila nila nilai

tersebar bar bar sebar

terukir ukir ukir 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)

Nama : Abdullah Hafidh NPM : 0706271380 Mata Kuliah : Perolehan Informasi

7

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

Nama : Abdullah Hafidh NPM : 0706271380 Mata Kuliah : Perolehan Informasi

8

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 sebar Overstemming

ukir ukir Exact Match

Nama : Abdullah Hafidh NPM : 0706271380 Mata Kuliah : Perolehan Informasi

9

Kategori Hasil Stemmer Hasil Perhitungan

Exact Match 50

Overstemming

18

Recoding ambiguity (rule related) 10

Understemming 1

Mis-stemming 1

Total 80

b. Strategi Akhiran – Awalan

Akhiran - Awalan Kata Dasar Kategori Hasil Stemmer

pergi pergi Exact Match

rada ada Recoding ambiguity (rule related)

rahasia rahasia Exact Match

rat berat Overstemming

henti henti Exact Match

jabat jabat Exact Match

cukup cukup Exact Match

dudu duduk Recoding ambiguity (rule related)

roda roda Exact Match

didi didik Recoding ambiguity (rule related)

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

Nama : Abdullah Hafidh NPM : 0706271380 Mata Kuliah : Perolehan Informasi

10

kasih kasih Exact Match

nali 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

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

seko sekolah Overstemming

kumpul kumpul Exact Match

Nama : Abdullah Hafidh NPM : 0706271380 Mata Kuliah : Perolehan Informasi

11

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 sebar Overstemming

ukir ukir Exact Match

Kategori Hasil Stemmer Hasil Perhitungan

Exact Match 52

Overstemming 16

Recoding ambiguity (rule related) 11

Understemming 1

Mis-stemming 0

Total 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

Nama : Abdullah Hafidh NPM : 0706271380 Mata Kuliah : Perolehan Informasi

12

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 pe-

sehingga 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 Persentase

Exact Match 62,50%

Overstemming 22,50%

Recoding ambiguity (rule related) 12,50%

Understemming 1,25%

Mis-stemming 1,25%

Total 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 Persentase

Exact Match 65%

Overstemming 20%

Recoding ambiguity (rule related) 13.75%

Understemming 1.25%

Mis-stemming 0%

Total 100,00%

Dari perhitungan diatas, hasil stemming strategi ini cenderung lebih baik dibandingkan algoritma awalan-

akhiran 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-

Nama : Abdullah Hafidh NPM : 0706271380 Mata Kuliah : Perolehan Informasi

13

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 Disallowed suffixes

# be- -i

# di- -an

# ke- -i, -kan

# me- -an

# se- -i,-kan

# te- -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]);

Nama : Abdullah Hafidh NPM : 0706271380 Mata Kuliah : Perolehan Informasi

14

$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

{

Nama : Abdullah Hafidh NPM : 0706271380 Mata Kuliah : Perolehan Informasi

15

$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

Nama : Abdullah Hafidh NPM : 0706271380 Mata Kuliah : Perolehan Informasi

16

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]++;

}

Nama : Abdullah Hafidh NPM : 0706271380 Mata Kuliah : Perolehan Informasi

17

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;

Nama : Abdullah Hafidh NPM : 0706271380 Mata Kuliah : Perolehan Informasi

18

$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;

Nama : Abdullah Hafidh NPM : 0706271380 Mata Kuliah : Perolehan Informasi

19

}

$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)

Nama : Abdullah Hafidh NPM : 0706271380 Mata Kuliah : Perolehan Informasi

20

{

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)

Nama : Abdullah Hafidh NPM : 0706271380 Mata Kuliah : Perolehan Informasi

21

{

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

Nama : Abdullah Hafidh NPM : 0706271380 Mata Kuliah : Perolehan Informasi

22

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;

}

Nama : Abdullah Hafidh NPM : 0706271380 Mata Kuliah : Perolehan Informasi

23

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

Nama : Abdullah Hafidh NPM : 0706271380 Mata Kuliah : Perolehan Informasi

24

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;

Nama : Abdullah Hafidh NPM : 0706271380 Mata Kuliah : Perolehan Informasi

25

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;

}

Nama : Abdullah Hafidh NPM : 0706271380 Mata Kuliah : Perolehan Informasi

26

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()

Nama : Abdullah Hafidh NPM : 0706271380 Mata Kuliah : Perolehan Informasi

27

{

my $word = $_[0];

my $temp = $word;

$temp =~ s/(.)pun$/$1/i;

return $temp;

}