Implementasi Algoritma Enhanced Confix Stripping Stemmer Pada Kamus Sistem Bahasa Isyarat Indonesia

(1)

LAMPIRAN A: Listing Program <?php

/**

* APA YANG BARU dari class Enhanced_CS? * 1. penambahan variable

* $prefix = variable ini untuk menyimpan prefix * $suffix = variable ini untuk menyimpan suffix

* $inflec = variable ini untuk menyimpan inflection suffix * $prefin = variable ini untuk menyimpan inflection prefix * 2. penambahan&$matches pada fungsi preg_match * dasar opsi preg_match

* int preg_match ( string $pattern , string $subject [, array &$matches [, int $flags = 0 [, int $offset = 0 ]]] )

*3. Penambahan aturan untuk mengecek kata “pemrograman”

* fungsi CekKamus, Pemenggalan Inflection Suffixes, Pemenggalan Inflection Prefix, *Pemenggalan Awalan, dan Pemenggalan Akhiran diambil dari sumber :

*http://4shared.com/rar/124o08qi/stbi.html */

Coding Untuk Menampilkan Gambar

for ($k = 0; $k < count($arrayKataDasar); $k++) { if ($arrayKataDasar[$k] != "") {

$sql = "SELECT kata,gambar FROM kata WHERE kata = '$arrayKataDasar[$k]'"; $result = mysql_query($sql);

if (mysql_num_rows($result) > 0) { $tampil = mysql_fetch_row($result);

echo "<td align='center' width=20px height= 30px><img src='gambar/$tampil[1]' alt=''><align='center'><font size = 25>$tampil[0]</font></align></td>";

} else{

$kataNotFoundInDB = $arrayKataDasar[$k];

for ($j = 0; $j < strlen($kataNotFoundInDB); $j++) {

$sql = "SELECT gambar FROM kata WHERE kata = '$kataNotFoundInDB[$j]'"; $result = mysql_query($sql);

$tampil = mysql_fetch_row($result);

echo "<td align='center' width=20px height= 30px><img src='gambar/$tampil[0]' alt='' width=200px height=

250px><align='center'>$kataNotFoundInDB[$j]</align></td>"; }

} } }

Proses Parsing Kalimat Dan Stemming Kata if (!empty($_POST[text])){

$stemmer = new Enhanced_CS(); $teks = strtolower($_POST['text']);

$tokenKarakter=array('’','—','

','/',',','?','.',':',';',',','!','[',']','{','}','(',')','-','_','+','=','<','>','\'','"','\\','@','#','$','%','^','&','*','`','~','0','1','2','3','4','5','6','7','8','9','â€','”','“',"\ n");


(2)

$teks= str_replace($tokenKarakter,' ',$teks); $tok = strtok($teks, "\n\t");

while ($tok !== false) { $teks = $tok;

$tok = strtok(" \n\t"); }

$split = explode(' ',$teks);

echo "<font size =5><b>Kata/Kalimat:</b><i>".$teks.'</i></font><br>'; echo "<tr><table align = center border=1>";

foreach($split as $key=>$kata){ $kataAwal = trim($kata); if($kataAwal!=""){

$kataDasar = $stemmer->generate(trim($kata)); $suff = $stemmer->suffix;

$pref = $stemmer->prefix; $inflec = $stemmer->inflec; $prefin = $stemmer->prefin; if(is_array($pref)){

$pref = null;

}else if(!empty($pref)){ $pref .= " ";} if(is_array($suff)){

$suff = null;

}else if(!empty($suff)){ $suff = " ".$suff;} if(is_array($inflec)){

$inflec = null;

}else if(!empty($inflec)){ $suff .= " ".$inflec;} if(is_array($prefin)){

$prefin = null;

}else if(!empty($prefin)){ $pref = $prefin.$pref;}

$hasil = $pref.$kataDasar.$suff; echo '</n>';

$stemmer->suffix = null; $stemmer->prefix = null; $stemmer->inflec = null; $stemmer->prefin = null; $suff = null;

$pref = null; $inflec = null; $prefin = null;

$arrayKataDasar = explode(" ", $hasil);

class Enhanced_CS{ var $prefix; var $suffix; var $inflec; var $prefin;


(3)

public function cekKamus($kata){ // cari di database

$sql = "SELECT * from kata where kata ='$kata' LIMIT 1"; //echo $sql.'<br/>';

$result = mysql_query($sql) or die(mysql_error()); if(mysql_num_rows($result)==1){

return TRUE; // TRUE jika ada } else{

return FALSE; // jika tidak ada FALSE }

}

Function Pemenggalan Inflection Suffixes public function Hapus_partikel($kata){

$kataAsal = $kata;

$kata = $this->Hapus_awalan($kata); if($this->cekKamus($kata)){ // Cek Kamus

return $kataAsal; }else{

if(preg_match('/([km]u|nya|[kl]ah|pun)$/',$kata,$this->inflec)){ $kata_stem1 = preg_replace('/([km]u|nya|[kl]ah|pun)$/','',$kata); $inflec = $this->inflec[count($this->inflec)-1];

if($this->cekKamus($kata_stem1)){ // Cek Kamus $inflec = $this->inflec;

$this->inflec = $this->inflec[count($this->inflec)-1]; return $kata_stem1;

}

if(preg_match('/([klt]ah|pun)$/',$kata,$this->inflec)){

if(preg_match('/([km]u|nya)$/',$kata_stem1,$this->inflec)){ $kata_stem2 = preg_replace('/([km]u|nya)$/','',$kata_stem1); if($inflec == $this->inflec[count($this->inflec)-1] ) $inflec = ""; $this->inflec = $this->inflec[count($this->inflec)-1].$inflec; return $kata_stem2;

} else{

$this->inflec = $inflec; }

} else{

$this->inflec = $inflec; }

if($this->cekKamus($kata_stem1,$db)->found){ return $kata_stem1;

}else{

$kata_stem2 = $this->Hapus_awalan($kata_stem1); if($this->cekKamus($kata_stem2)){ // Cek Kamus

return $kata_stem1; }else{

$this->inflec = NULL; return $kataAsal;


(4)

} } }

return $kataAsal; }

}

Function Untuk Pemenggalan Inflection Prefix public function Hapus_awalanku($kata){

$kataAsal = $kata;

if(preg_match('/^(ku)\S{1,}/',$kata,$this->prefin)){ $kata_stem1 = preg_replace('/^(ku)/','',$kata);

$this->prefin = $this->prefin[count($this->prefin)-1]; return $kata_stem1;

}

return $kataAsal; }

Function Untuk Kombinasi Awalan dan Akhiran yang tidak diizinkan public function Cek_awalan_dilarang($kata){

if(preg_match('/^(be)[[:alpha:]]+(i)$/',$kata)){ // be- dan -i return TRUE;

}

if(preg_match('/^(di)[[:alpha:]]+(an)$/',$kata)){ // di- dan -an return TRUE;

}

if(preg_match('/^(ke)[[:alpha:]]+(i|kan)$/',$kata)){ // ke- dan -i,-kan return TRUE;

}

if(preg_match('/^(me)[[:alpha:]]+(an)$/',$kata)){ // me- dan -an return TRUE;

}

if(preg_match('/^(se)[[:alpha:]]+(i|kan)$/',$kata)){ // se- dan -i,-kan return TRUE;

}

return FALSE; }

Function Untuk Pemenggalan Akhiran public function Hapus_akhiran($kata){

$kataAsal = $kata;

if(preg_match('/(kan)$/',$kata,$this->suffix)){ // Cek Suffixes if(!preg_match('/^(eret)|(ret)(a)(kan)$/',$kata)){

$kata_stem1 = preg_replace('/(kan)$/','',$kata); if($this->cekKamus($kata_stem1)){ // Cek Kamus

$this->suffix = $this->suffix[count($this->suffix)-1]; return $kata_stem1;

} }


(5)

}

if(preg_match('/(an|i)$/',$kata,$this->suffix)){ // cek -kan $kata_stem2 = preg_replace('/(an|i)$/','',$kata); if($this->cekKamus($kata_stem2)){ // Cek Kamus

$this->suffix = $this->suffix[count($this->suffix)-1]; return $kata_stem2;

} }

if($this->Cek_awalan_dilarang($kata)){ $this->debug($kata);

return $kataAsal; }

return $kataAsal;

}

Function Untuk Pemenggalan Awalan

public function Hapus_awalan($kata){ $kataAsal = $kata;

/* --- Tentukan Tipe Awalan ---*/

if(preg_match('/^(di|[ks]e)\S{1,}/',$kata,$this->prefix)){ // Jika di-,ke-,se- $kata_stem1 = preg_replace('/^(di|[ks]e)/','',$kata);

if($this->cekKamus($kata_stem1)){ $this->prefix = $this->prefix[1]; return $kata_stem1;

}

$kata_stem2 = $this->Hapus_akhiran($kata_stem1); if($this->cekKamus($kata_stem2)){

$this->prefix = $this->prefix[1]; return $kata_stem2;

} }

if(preg_match('/^([tmbp]e)/'/*>>>'/^([tmbp]e)\S{1,}/'<<<*/,$kata,$this->prefix)){ //Jika

awalannya adalah “te-”, “me-”, “be-”, atau “pe-”

/*--- Awalan “be-”, ---*/ if(preg_match('/^(be)\S{1,}/',$kata,$this->prefix)){ // Jika awalan “be-”,

if(preg_match('/^(ber)[aiueo]\S{1,}/',$kata,$this->prefix)){ // aturan 1. $kata_stem1 = preg_replace('/^(ber)/','',$kata);

if($this->cekKamus($kata_stem1)){ $this->prefix = $this->prefix[1]; return $kata_stem1;

}

$kata_stem2 = $this->Hapus_akhiran($kata_stem1); if($this->cekKamus($kata_stem2)){

$this->prefix = $this->prefix[1]; return $kata_stem2;

}

$kata_stem1 = preg_replace('/^(ber)/','r',$kata); if($this->cekKamus($kata_stem1)){

$this->prefix = $this->prefix[1]; return $kata_stem1;


(6)

}

$kata_stem2 = $this->Hapus_akhiran($kata_stem1); if($this->cekKamus($kata_stem2)){

$this->prefix = $this->prefix[1]; return $kata_stem2;

} }

if(preg_match('/^(ber)[^aiueor][[:alpha:]](?!er)\S{1,}/',$kata,$this->prefix)){ //aturan 2.

$kata_stem1 = preg_replace('/^(ber)/','',$kata); if($this->cekKamus($kata_stem1)){

$this->prefix = $this->prefix[1]; return $kata_stem1;

}

$kata_stem2 = $this->Hapus_akhiran($kata_stem1); if($this->cekKamus($kata_stem2)){

$this->prefix = $this->prefix[1]; return $kata_stem2; }

}

if(preg_match('/^(ber)[^aiueor][[:alpha:]]er[aiueo]\S{1,}/',$kata,$this->prefix)){ //aturan 3.

$kata_stem1 = preg_replace('/^(ber)/','',$kata); if($this->cekKamus($kata_stem1)){

$this->prefix = $this->prefix[1]; return $kata_stem1;

}

$kata_stem2 = $this->Hapus_akhiran($kata_stem1); if($this->cekKamus($kata_stem2)){

$this->prefix = $this->prefix[1]; return $kata_stem2;

} }

if(preg_match('/^belajar\S{0,}/',$kata,$this->prefix)){ //aturan 4. $kata_stem1 = preg_replace('/^(bel)/','',$kata);

if($this->cekKamus($kata_stem1)){ $this->prefix = $this->prefix[1]; return $kata_stem1;

}

$kata_stem2 = $this->Hapus_akhiran($kata_stem1); if($this->cekKamus($kata_stem2)){

$this->prefix = $this->prefix[1]; return $kata_stem2;

} }

if(preg_match('/^(be)[^aiueolr]er[^aiueo]\S{1,}/',$kata,$this->prefix)){ //aturan 5.

$kata_stem1 = preg_replace('/^(be)/','',$kata); if($this->cekKamus($kata_stem1)){


(7)

return $kata_stem1; }

$kata_stem2 = $this->Hapus_akhiran($kata_stem1); if($this->cekKamus($kata_stem2)){

$this->prefix = $this->prefix[1]; return $kata_stem2;

} } }

/*---end “be-”, ---*/ /*--- Awalan “te-”, ---*/ if(preg_match('/^(te)\S{1,}/',$kata,$this->prefix)){ // Jika awalan “te-”,

if(preg_match('/^(terr)\S{1,}/',$kata,$this->prefix)){ return $kata;

}

if(preg_match('/^(ter)[aiueo]\S{1,}/',$kata,$this->prefix)){ // aturan 6. $kata_stem1 = preg_replace('/^(ter)/','',$kata);

if($this->cekKamus($kata_stem1)){ $this->prefix = $this->prefix[1]; return $kata_stem1;

}

$kata_stem2 = $this->Hapus_akhiran($kata_stem1); if($this->cekKamus($kata_stem2)){

$this->prefix = $this->prefix[1]; return $kata_stem2;

}

$kata_stem1 = preg_replace('/^(ter)/','r',$kata); if($this->cekKamus($kata_stem1)){

$this->prefix = $this->prefix[1]; return $kata_stem1;

}

$kata_stem2 = $this->Hapus_akhiran($kata_stem1); if($this->cekKamus($kata_stem2)){

$this->prefix = $this->prefix[1]; return $kata_stem2;

} }

if(preg_match('/^(ter)[^aiueor]er[aiueo]\S{1,}/',$kata,$this->prefix)){ // aturan 7.

$kata_stem1 = preg_replace('/^(ter)/','',$kata); if($this->cekKamus($kata_stem1)){

$this->prefix = $this->prefix[1]; return $kata_stem1;

}

$kata_stem2 = $this->Hapus_akhiran($kata_stem1); if($this->cekKamus($kata_stem2)){

$this->prefix = $this->prefix[1]; return $kata_stem2;

} }

if(preg_match('/^(ter)[^aiueor](?!er)\S{1,}/',$kata,$this->prefix)){ // aturan 8.


(8)

$kata_stem1 = preg_replace('/^(ter)/','',$kata); if($this->cekKamus($kata_stem1)){

$this->prefix = $this->prefix[1]; return $kata_stem1;

}

$kata_stem2 = $this->Hapus_akhiran($kata_stem1); if($this->cekKamus($kata_stem2)){

$this->prefix = $this->prefix[1]; return $kata_stem2;

} }

if(preg_match('/^(te)[^aiueor]er[aiueo]\S{1,}/',$kata,$this->prefix)){ // aturan 9.

$kata_stem1 = preg_replace('/^(te)/','',$kata); if($this->cekKamus($kata_stem1)){

$this->prefix = $this->prefix[1]; return $kata_stem1;

}

$kata_stem2 = $this->Hapus_akhiran($kata_stem1); if($this->cekKamus($kata_stem2)){

$this->prefix = $this->prefix[1]; return $kata_stem2;

} }

}

/*---end “te-”, ---*/ /*--- Awalan “me-”, ---*/

if(preg_match('/^(me)/'/*'/^(me)\S{1,}/'*/,$kata,$this->prefix)){ // Jika awalan

“me-”,

if(preg_match('/^(me)[lrwyv][aiueo]/',$kata,$this->prefix)){ // aturan 10 $kata_stem1 = preg_replace('/^(me)/','',$kata);

if($this->cekKamus($kata_stem1)){ $this->prefix = $this->prefix[1]; return $kata_stem1;

}

$kata_stem2 = $this->Hapus_akhiran($kata_stem1); if($this->cekKamus($kata_stem2)){

$this->prefix = $this->prefix[1]; return $kata_stem2;

} }

if(preg_match('/^(mem)[bfvp]/',$kata,$this->prefix)){ // aturan 11. /*--- cek luluh p- ---*/

$kata_stem1 = preg_replace('/^(mem)/','p',$kata); // luluh p- if($this->cekKamus($kata_stem1)){

return $kata_stem1; }

$kata_stem2 = $this->Hapus_akhiran($kata_stem1); if($this->cekKamus($kata_stem2)){

return $kata_stem2; }


(9)

$kata_stem1 = preg_replace('/^(mem)/','',$kata); if($this->cekKamus($kata_stem1)){

$this->prefix = $this->prefix[1]; return $kata_stem1;

}

$kata_stem2 = $this->Hapus_akhiran($kata_stem1); if($this->cekKamus($kata_stem2)){

$this->prefix = $this->prefix[1]; return $kata_stem2;

} }

/*if(preg_match('/^(mempe)\S{1,}/',$kata,$this->prefix)){ // aturan 12 $kata_stem1 = preg_replace('/^(mem)/','pe',$kata);

if($this->cekKamus($kata_stem1)){ $this->prefix = $this->prefix[1]; return $kata_stem1;

}

$kata_stem2 = $this->Hapus_akhiran($kata_stem1); if($this->cekKamus($kata_stem2)){

$this->prefix = $this->prefix[1]; return $kata_stem2; }

}*/

if (preg_match('/^(mem)((r[aiueo])|[aiueo])\S{1,}/', $kata,$this->prefix)){//aturan 13

$kata_stem1 = preg_replace('/^(mem)/','p',$kata); if($this->cekKamus($kata_stem1)){

$this->prefix = $this->prefix[1]; return $kata_stem1;

}

$kata_stem2 = $this->Hapus_akhiran($kata_stem1); if($this->cekKamus($kata_stem2)){

$this->prefix = $this->prefix[1]; return $kata_stem2;

}

$kata_stem1 = preg_replace('/^(mem)/','m',$kata); if($this->cekKamus($kata_stem1)){

$this->prefix = $this->prefix[1]; return $kata_stem1;

}

$kata_stem2 = $this->Hapus_akhiran($kata_stem1); if($this->cekKamus($kata_stem2)){

$this->prefix = $this->prefix[1]; return $kata_stem2;

} }

if(preg_match('/^(men)[cdjzt]\S{1,}/',$kata,$this->prefix)){ // aturan 14. $kata_stem1 = preg_replace('/^(men)/','',$kata);


(10)

$this->prefix = $this->prefix[1]; return $kata_stem1;

}

$kata_stem2 = $this->Hapus_akhiran($kata_stem1); if($this->cekKamus($kata_stem2)){

$this->prefix = $this->prefix[1]; return $kata_stem2;

} }

if (preg_match('/^(men)[aiueo]\S{1,}/',$kata,$this->prefix)){//aturan 15 $kata_stem1 = preg_replace('/^(men)/','n',$kata);

if($this->cekKamus($kata_stem1)){ $this->prefix = $this->prefix[1]; return $kata_stem1;

}

$kata_stem2 = $this->Hapus_akhiran($kata_stem1); if($this->cekKamus($kata_stem2)){

$this->prefix = $this->prefix[1]; return $kata_stem2;

}

$kata_stem1 = preg_replace('/^(men)/','t',$kata); if($this->cekKamus($kata_stem1)){

$this->prefix = $this->prefix[1]; return $kata_stem1;

}

$kata_stem2 = $this->Hapus_akhiran($kata_stem1); if($this->cekKamus($kata_stem2)){

$this->prefix = $this->prefix[1]; return $kata_stem2;

} }

if(preg_match('/^(meng)[ghqk]\S{1,}/',$kata,$this->prefix)){ // aturan 16. $kata_stem1 = preg_replace('/^(meng)/','',$kata);

if($this->cekKamus($kata_stem1)){ $this->prefix = $this->prefix[1]; return $kata_stem1;

}

$kata_stem2 = $this->Hapus_akhiran($kata_stem1); if($this->cekKamus($kata_stem2)){

$this->prefix = $this->prefix[1]; return $kata_stem2;

} }

if(preg_match('/^(meng)[aiueo]\S{1,}/',$kata,$this->prefix)){ // aturan 17 $kata_stem1 = preg_replace('/^(meng)/','',$kata);

if($this->cekKamus($kata_stem1)){ $this->prefix = $this->prefix[1]; return $kata_stem1;

}

$kata_stem2 = $this->Hapus_akhiran($kata_stem1); if($this->cekKamus($kata_stem2)){


(11)

$this->prefix = $this->prefix[1]; return $kata_stem2;

}

$kata_stem1 = preg_replace('/^(meng)/','k',$kata); if($this->cekKamus($kata_stem1)){

$this->prefix = $this->prefix[1]; return $kata_stem1;

}

$kata_stem2 = $this->Hapus_akhiran($kata_stem1); if($this->cekKamus($kata_stem2)){

$this->prefix = $this->prefix[1]; return $kata_stem2;

}

$kata_stem1 = preg_replace('/^(menge)/','',$kata); if($this->cekKamus($kata_stem1)){

$this->prefix = $this->prefix[1];

return $kata_stem1; }

$kata_stem2 = $this->Hapus_akhiran($kata_stem1); if($this->cekKamus($kata_stem2)){

$this->prefix = $this->prefix[1]; return $kata_stem2;

} }

if(preg_match('/^(meny)[aiueo]\S{1,}/',$kata,$this->prefix)){ // aturan 18. $kata_stem1 = preg_replace('/^(meny)/','s',$kata);

if($this->cekKamus($kata_stem1)){ $this->prefix = $this->prefix[1]; return $kata_stem1;

}

$kata_stem2 = $this->Hapus_akhiran($kata_stem1); if($this->cekKamus($kata_stem2)){

$this->prefix = $this->prefix[1]; return $kata_stem2;

}

$kata_stem1 = preg_replace('/^(me)/','',$kata); if($this->cekKamus($kata_stem1)){

$this->prefix = $this->prefix[1]; return $kata_stem1;

}

$kata_stem2 = $this->Hapus_akhiran($kata_stem1); if($this->cekKamus($kata_stem2)){

$this->prefix = $this->prefix[1]; return $kata_stem2;

} }

if(preg_match('/^(me)/',$kata,$this->prefix)){ $kata_stem1 = preg_replace('/^(me)/','',$kata); if($this->cekKamus($kata_stem1)){

$this->prefix = $this->prefix[1]; return $kata_stem1;


(12)

}

$kata_stem2 = $this->Hapus_akhiran($kata_stem1); if($this->cekKamus($kata_stem2)){

$this->prefix = $this->prefix[1]; return $kata_stem2;

}

/*--- cek luluh t- ---*/

$kata_stem1 = preg_replace('/^(men)/','t',$kata); // luluh t-

if($this->cekKamus($kata_stem1)){ $this->prefix = $this->prefix[1]; return $kata_stem1;

}

$kata_stem2 = $this->Hapus_akhiran($kata_stem1); if($this->cekKamus($kata_stem2)){

$this->prefix = $this->prefix[1]; return $kata_stem2;

}

} }

/*---end “me-”, ---*/ /*--- Awalan “pe-”, ---*/ if(preg_match('/^(pe)\S{1,}/',$kata,$this->prefix)){ // Jika awalan “pe-”,

if(preg_match('/^(pe)[wy]\S{1,}/',$kata)){ // aturan 20. if(preg_match('/^(pe)[wyr]\S{1,}/',$kata,$this->prefix)){

$kata_stem1 = preg_replace('/^(pe)/','',$kata); if($this->cekKamus($kata_stem1)){

$this->prefix = $this->prefix[1]; return $kata_stem1;

}

$kata_stem2 = $this->Hapus_akhiran($kata_stem1); if($this->cekKamus($kata_stem2)){

$this->prefix = $this->prefix[1]; return $kata_stem2;

} } }

if(preg_match('/^(per)[aiueo]\S{1,}/',$kata,$this->prefix)){ // aturan 21 $kata_stem1 = preg_replace('/^(per)/','',$kata);

if($this->cekKamus($kata_stem1)){ $this->prefix = $this->prefix[1]; return $kata_stem1;

}

$kata_stem2 = $this->Hapus_akhiran($kata_stem1); if($this->cekKamus($kata_stem2)){

$this->prefix = $this->prefix[1]; return $kata_stem2;

}

$kata_stem1 = preg_replace('/^(per)/','r',$kata); if($this->cekKamus($kata_stem1)){


(13)

$this->prefix = $this->prefix[1]; return $kata_stem1;

}

$kata_stem2 = $this->Hapus_akhiran($kata_stem1); if($this->cekKamus($kata_stem2)){

$this->prefix = $this->prefix[1]; return $kata_stem2;

} }

if(preg_match('/^(per)[^aiueor][[:alpha:]](?!er)\S{1,}/',$kata,$this->prefix)){ // aturan 23

$kata_stem1 = preg_replace('/^(per)/','',$kata); if($this->cekKamus($kata_stem1)){

$this->prefix = $this->prefix[1]; return $kata_stem1;

}

$kata_stem2 = $this->Hapus_akhiran($kata_stem1); if($this->cekKamus($kata_stem2)){

$this->prefix = $this->prefix[1]; return $kata_stem2;

} }

if(preg_match('/^(per)[^aiueor][[:alpha:]](er)[aiueo]\S{1,}/',$kata,$this->prefix)){ //aturan24

$kata_stem1 = preg_replace('/^(per)/','',$kata); if($this->cekKamus($kata_stem1)){

$this->prefix = $this->prefix[1]; return $kata_stem1;

}

$kata_stem2 = $this->Hapus_akhiran($kata_stem1); if($this->cekKamus($kata_stem2)){

$this->prefix = $this->prefix[1]; return $kata_stem2;

} }

if(preg_match('/^(pem)[bfv]\S{1,}/',$kata,$this->prefix)){ // aturan 25 $kata_stem1 = preg_replace('/^(pem)/','',$kata);

if($this->cekKamus($kata_stem1)){ $this->prefix = $this->prefix[1]; return $kata_stem1;

}

$kata_stem2 = $this->Hapus_akhiran($kata_stem1); if($this->cekKamus($kata_stem2)){

$this->prefix = $this->prefix[1]; return $kata_stem2;

} }


(14)

$kata_stem1 = preg_replace('/^(pem)/','p',$kata); if($this->cekKamus($kata_stem1)){

$this->prefix = $this->prefix[1]; return $kata_stem1;

}

$kata_stem2 = $this->Hapus_akhiran($kata_stem1); if($this->cekKamus($kata_stem2)){

$this->prefix = $this->prefix[1]; return $kata_stem2;

} }

if(preg_match('/^(pem)(r[aiueo]|[aiueo])\S{1,}/',$kata,$this->prefix)){ // aturan 26

$kata_stem1 = preg_replace('/^(pem)/','m',$kata); if($this->cekKamus($kata_stem1)){

$this->prefix = $this->prefix[1]; return $kata_stem1;

}

$kata_stem2 = $this->Hapus_akhiran($kata_stem1); if($this->cekKamus($kata_stem2)){

$this->prefix = $this->prefix[1]; return $kata_stem2;

}

$kata_stem1 = preg_replace('/^(pem)/','p',$kata); if($this->cekKamus($kata_stem1)){

$this->prefix = $this->prefix[1]; return $kata_stem1;

}

$kata_stem2 = $this->Hapus_akhiran($kata_stem1); if($this->cekKamus($kata_stem2)){

$this->prefix = $this->prefix[1]; return $kata_stem2;

} }

if(preg_match('/^(pen)[cdjzt]\S{1,}/',$kata,$this->prefix)){ // aturan 27 $kata_stem1 = preg_replace('/^(pen)/','',$kata);

if($this->cekKamus($kata_stem1)){ $this->prefix = $this->prefix[1]; return $kata_stem1;

break; }else{

$kata_stem2 = $this->Hapus_akhiran($kata_stem1); if($this->cekKamus($kata_stem2)){

$this->prefix = $this->prefix[1]; return $kata_stem2;

} } }


(15)

if(preg_match('/^(pen)[aiueo]\S{1,}/',$kata,$this->prefix)){ // aturan 28 $kata_stem1 = preg_replace('/^(pen)/','n',$kata);

if($this->cekKamus($kata_stem1)){ $this->prefix = $this->prefix[1]; return $kata_stem1;

}

$kata_stem2 = $this->Hapus_akhiran($kata_stem1); if($this->cekKamus($kata_stem2)){

$this->prefix = $this->prefix[1]; return $kata_stem2;

}

$kata_stem1 = preg_replace('/^(pen)/','t',$kata); if($this->cekKamus($kata_stem1)){

$this->prefix = $this->prefix[1]; return $kata_stem1;

}

$kata_stem2 = $this->Hapus_akhiran($kata_stem1); if($this->cekKamus($kata_stem2)){

$this->prefix = $this->prefix[1]; return $kata_stem2;

} }

if(preg_match('/^(peng)[^aiueo]\S{1,}/',$kata,$this->prefix)){ // aturan 29 $kata_stem1 = preg_replace('/^(peng)/','',$kata);

if($this->cekKamus($kata_stem1)){ $this->prefix = $this->prefix[1]; return $kata_stem1;

}

$kata_stem2 = $this->Hapus_akhiran($kata_stem1); if($this->cekKamus($kata_stem2)){

$this->prefix = $this->prefix[1]; return $kata_stem2;

} }

if(preg_match('/^(peng)[aiueo]\S{1,}/',$kata,$this->prefix)){ // aturan 30 $kata_stem1 = preg_replace('/^(peng)/','',$kata);

if($this->cekKamus($kata_stem1)){ $this->prefix = $this->prefix[1]; return $kata_stem1;

}

$kata_stem2 = $this->Hapus_akhiran($kata_stem1); if($this->cekKamus($kata_stem2)){

$this->prefix = $this->prefix[1]; return $kata_stem2;

}

$kata_stem1 = preg_replace('/^(peng)/','k',$kata); if($this->cekKamus($kata_stem1)){


(16)

$this->prefix = $this->prefix[1]; return $kata_stem1;

}

$kata_stem2 = $this->Hapus_akhiran($kata_stem1); if($this->cekKamus($kata_stem2)){

$this->prefix = $this->prefix[1]; return $kata_stem2;

}

$kata_stem1 = preg_replace('/^(penge)/','',$kata); if($this->cekKamus($kata_stem1)){

$this->prefix = $this->prefix[1]; return $kata_stem1;

}

$kata_stem2 = $this->Hapus_akhiran($kata_stem1); if($this->cekKamus($kata_stem2)){

$this->prefix = $this->prefix[1]; return $kata_stem2;

} }

if(preg_match('/^(peny)[aiueo]\S{1,}/',$kata,$this->prefix)){ // aturan 31 $kata_stem1 = preg_replace('/^(peny)/','s',$kata);

if($this->cekKamus($kata_stem1)){ $this->prefix = $this->prefix[1]; return $kata_stem1;

}

$kata_stem2 = $this->Hapus_akhiran($kata_stem1); if($this->cekKamus($kata_stem2)){

$this->prefix = $this->prefix[1]; return $kata_stem2;

}

$kata_stem1 = preg_replace('/^(pe)/','',$kata); if($this->cekKamus($kata_stem1)){

$this->prefix = $this->prefix[1]; return $kata_stem1;

}

$kata_stem2 = $this->Hapus_akhiran($kata_stem1); if($this->cekKamus($kata_stem2)){

$this->prefix = $this->prefix[1]; return $kata_stem2;

} }

if(preg_match('/^(pel)[aiueo]\S{1,}/',$kata,$this->prefix)){ // aturan 32 $kata_stem1 = preg_replace('/^(pel)/','l',$kata);

if($this->cekKamus($kata_stem1)){ $this->prefix = $this->prefix[1]; return $kata_stem1;


(17)

$kata_stem2 = $this->Hapus_akhiran($kata_stem1); if($this->cekKamus($kata_stem2)){

$this->prefix = $this->prefix[1]; return $kata_stem2;

} }

if (preg_match('/^(pelajar)\S{0,}/',$kata,$this->prefix)){ $kata_stem1 = preg_replace('/^(pel)/','',$kata); if($this->cekKamus($kata_stem1)){

$this->prefix = $this->prefix[1]; return $kata_stem1;

}

$kata_stem2 = $this->Hapus_akhiran($kata_stem1); if($this->cekKamus($kata_stem2)){

$this->prefix = $this->prefix[1]; return $kata_stem2;

} }

if(preg_match('/^(pe)[^rwylmn]er[aiueo]\S{1,}/',$kata,$this->prefix)){ // aturan 33

$kata_stem1 = preg_replace('/^(pe)/','',$kata); if($this->cekKamus($kata_stem1)){

$this->prefix = $this->prefix[1]; return $kata_stem1;

}

$kata_stem2 = $this->Hapus_akhiran($kata_stem1); if($this->cekKamus($kata_stem2)){

$this->prefix = $this->prefix[1]; return $kata_stem2;

} }

if(preg_match('/^(pe)[^rwylmn](?!er)\S{1,}/',$kata,$this->prefix)){ // aturan 34

$kata_stem1 = preg_replace('/^(pe)/','',$kata); if($this->cekKamus($kata_stem1)){

$this->prefix = $this->prefix[1]; return $kata_stem1;

}

$kata_stem2 = $this->Hapus_akhiran($kata_stem1); if($this->cekKamus($kata_stem2)){

$this->prefix = $this->prefix[1]; return $kata_stem2;

} }

if(preg_match('/^(pe)[^aiueor]er[^aiueo]\S{1,}/',$kata,$this->prefix)){ // aturan 36


(18)

if($this->cekKamus($kata_stem1)){ $this->prefix = $this->prefix[1]; return $kata_stem1;

}

$kata_stem2 = $this->Hapus_akhiran($kata_stem1); if($this->cekKamus($kata_stem2)){

$this->prefix = $this->prefix[1]; return $kata_stem2;

} } } }

/*---end “pe-”, ---*/

/*--- Awalan “memper-”, ---*/ if(preg_match('/^(memper)\S{1,}/',$kata,$this->prefix)){

$kata_stem1 = preg_replace('/^(memper)/','',$kata); if($this->cekKamus($kata_stem1)){

$this->prefix = $this->prefix;

$this->prefix = substr($this->prefix[1],0,3)." ".substr($this->prefix[1],3); return $kata_stem1;

}

$kata_stem2 = $this->Hapus_akhiran($kata_stem1); if($this->cekKamus($kata_stem2)){

$this->prefix = $this->prefix;

$this->prefix = substr($this->prefix[1],0,3)." ".substr($this->prefix[1],3); return $kata_stem2;

}

//*-- Cek luluh -r ---

$kata_stem1 = preg_replace('/^(memper)/','r',$kata); if($this->cekKamus($kata_stem1)){

$this->prefix = $this->prefix[1]; return $kata_stem1;

}

$kata_stem2 = $this->Hapus_akhiran($kata_stem1); if($this->cekKamus($kata_stem2)){

$this->prefix = $this->prefix[1]; return $kata_stem2;

} }

if(preg_match('/^(mempel)\S{1,}/',$kata,$this->prefix)){ $kata_stem1 = preg_replace('/^(mempel)/','',$kata); if($this->cekKamus($kata_stem1)){

$this->prefix = $this->prefix;

$this->prefix = substr($this->prefix[1],0,3)." ".substr($this->prefix[1],3); return $kata_stem1;

}

$kata_stem2 = $this->Hapus_akhiran($kata_stem1); if($this->cekKamus($kata_stem2)){

$this->prefix = $this->prefix;

$this->prefix = substr($this->prefix[1],0,3)." ".substr($this->prefix[1],3); return $kata_stem2;

}


(19)

$kata_stem1 = preg_replace('/^(mempel)/','l',$kata); if($this->cekKamus($kata_stem1)){

$this->prefix = $this->prefix[1]; return $kata_stem1;

}

$kata_stem2 = $this->Hapus_akhiran($kata_stem1); if($this->cekKamus($kata_stem2)){

$this->prefix = $this->prefix[1]; return $kata_stem2;

} }

if(preg_match('/^(menter)\S{1,}/',$kata,$this->prefix)){ $kata_stem1 = preg_replace('/^(menter)/','',$kata); if($this->cekKamus($kata_stem1)){

$this->prefix = $this->prefix;

$this->prefix = substr($this->prefix[1],0,3)." ".substr($this->prefix[1],3);

return $kata_stem1; }

$kata_stem2 = $this->Hapus_akhiran($kata_stem1); if($this->cekKamus($kata_stem2)){

$this->prefix = $this->prefix;

$this->prefix = substr($this->prefix[1],0,3)." ".substr($this->prefix[1],3); return $kata_stem2;

}

//*-- Cek luluh -r ---

$kata_stem1 = preg_replace('/^(menter)/','r',$kata); if($this->cekKamus($kata_stem1)){

$this->prefix = $this->prefix[1]; return $kata_stem1;

}

$kata_stem2 = $this->Hapus_akhiran($kata_stem1); if($this->cekKamus($kata_stem2)){

$this->prefix = $this->prefix[1]; return $kata_stem2;

} }

if(preg_match('/^(member)\S{1,}/',$kata,$this->prefix)){ $kata_stem1 = preg_replace('/^(member)/','',$kata); if($this->cekKamus($kata_stem1)){

$this->prefix = $this->prefix;

$this->prefix = substr($this->prefix[1],0,3)." ".substr($this->prefix[1],3); return $kata_stem1;

}

$kata_stem2 = $this->Hapus_akhiran($kata_stem1); if($this->cekKamus($kata_stem2)){

$this->prefix = $this->prefix;

$this->prefix = substr($this->prefix[1],0,3)." ".substr($this->prefix[1],3); return $kata_stem2;

}

//*-- Cek luluh -r ---

$kata_stem1 = preg_replace('/^(member)/','r',$kata); if($this->cekKamus($kata_stem1)){


(20)

return $kata_stem1; }

$kata_stem2 = $this->Hapus_akhiran($kata_stem1); if($this->cekKamus($kata_stem2)){

$this->prefix = $this->prefix[1]; return $kata_stem2;

} }

/*---end “diper-”, ---*/ if(preg_match('/^(diper)\S{1,}/',$kata,$this->prefix)){

$kata_stem1 = preg_replace('/^(diper)/','',$kata); if($this->cekKamus($kata_stem1)){

$prefix = $this->prefix;

$this->prefix = substr($this->prefix[1],0,2)." ".substr($this->prefix[1],2); return $kata_stem1;

}

$kata_stem2 = $this->Hapus_akhiran($kata_stem1); if($this->cekKamus($kata_stem2)){

$prefix = $this->prefix;

$this->prefix = substr($this->prefix[1],0,2)." ".substr($this->prefix[1],2); return $kata_stem2;

}

/*-- Cek luluh -r ---*/

$kata_stem1 = preg_replace('/^(diper)','r',$kata); if($this->cekKamus($kata_stem1)){

$prefix = $this->prefix;

$this->prefix = $this->prefix[1]; return $kata_stem1;

}

$kata_stem2 = $this->Hapus_akhiran($kata_stem1); if($this->cekKamus($kata_stem2)){

$prefix = $this->prefix;

$this->prefix = $this->prefix[1]; return $kata_stem2;

} }

/*---end “diper-”, ---*/ /*---end “diter-”, ---*/ if(preg_match('/^(diter)\S{1,}/',$kata,$this->prefix)){

$kata_stem1 = preg_replace('/^(diter)/','',$kata); if($this->cekKamus($kata_stem1)){

$this->prefix = $this->prefix;

$this->prefix = substr($this->prefix[1],0,2)." ".substr($this->prefix[1],2); return $kata_stem1;

}

$kata_stem2 = $this->Hapus_akhiran($kata_stem1); if($this->cekKamus($kata_stem2)){

$this->prefix = $this->prefix;

$this->prefix = substr($this->prefix[1],0,2)." ".substr($this->prefix[1],2); return $kata_stem2;

}

/*-- Cek luluh -r ---*/

$kata_stem1 = preg_replace('/^(diter)','r',$kata); if($this->cekKamus($kata_stem1)){


(21)

$this->prefix = $this->prefix[1]; return $kata_stem1;

}

$kata_stem2 = $this->Hapus_akhiran($kata_stem1); if($this->cekKamus($kata_stem2)){

$this->prefix = $this->prefix[1]; return $kata_stem2;

} }

/*---end “diter-”, ---*/ /*---end “dipel-”, ---*/ if(preg_match('/^(dipel)\S{1,}/',$kata,$this->prefix)){

$kata_stem1 = preg_replace('/^(dipel)/','l',$kata); if($this->cekKamus($kata_stem1)){

$this->prefix = $this->prefix;

$this->prefix = substr($this->prefix[1],0,2)." ".substr($this->prefix[1],2); return $kata_stem1;

}

$kata_stem2 = $this->Hapus_akhiran($kata_stem1); if($this->cekKamus($kata_stem2)){

$this->prefix = $this->prefix;

$this->prefix = substr($this->prefix[1],0,2)." ".substr($this->prefix[1],2); return $kata_stem2;

}

/*-- Cek luluh -l---*/

$kata_stem1 = preg_replace('/^(dipel)/','',$kata); if($this->cekKamus($kata_stem1)){

$this->prefix = $this->prefix[1]; return $kata_stem1;

}

$kata_stem2 = $this->Hapus_akhiran($kata_stem1); if($this->cekKamus($kata_stem2)){

$this->prefix = $this->prefix[1]; return $kata_stem2;

} }

/*---end “dipel-”, ---*/

/*---kata “terpelajar”(kasus khusus), --- ----*/

if(preg_match('/terpelajar/',$kata,$this->prefix)){ $kata_stem1 = preg_replace('/terpel/','',$kata); if($this->cekKamus($kata_stem1)){

$this->prefix = $this->prefix[1]; return $kata_stem1;

}

$kata_stem2 = $this->Hapus_akhiran($kata_stem1); if($this->cekKamus($kata_stem2)){

$this->prefix = $this->prefix[1]; return $kata_stem2;

} }

/*---end “terpelajar”-”, ---*/

/*---kata seseorang(kasus khusus), --- -*/


(22)

if(preg_match('/seseorang/',$kata,$this->prefix)){ $kata_stem1 = preg_replace('/^(sese)/','',$kata); if($this->cekKamus($kata_stem1)){

$this->prefix = 'suatu';//$this->prefix[1]; return $kata_stem1; }

}

/*---end seseorang-”, ---*/ if(preg_match('/^(diber)\S{1,}/',$kata,$this->prefix)){

$kata_stem1 = preg_replace('/^(diber)/','',$kata); if($this->cekKamus($kata_stem1)){

$this->prefix = $this->prefix;

$this->prefix = substr($this->prefix[1],0,2)." ".substr($this->prefix[1],2); return $kata_stem1;

}

$kata_stem2 = $this->Hapus_akhiran($kata_stem1); if($this->cekKamus($kata_stem2)){

$this->prefix = $this->prefix;

$this->prefix = substr($this->prefix[1],0,2)." ".substr($this->prefix[1],2); return $kata_stem2;

}

/*-- Cek luluh -l---*/

$kata_stem1 = preg_replace('/^(diber)/','r',$kata); if($this->cekKamus($kata_stem1)){

$this->prefix = $this->prefix[1]; return $kata_stem1;

}

$kata_stem2 = $this->Hapus_akhiran($kata_stem1); if($this->cekKamus($kata_stem2)){

$this->prefix = $this->prefix[1]; return $kata_stem2;

} }

if(preg_match('/^(keber)\S{1,}/',$kata,$this->prefix)){ $kata_stem1 = preg_replace('/^(keber)/','',$kata); if($this->cekKamus($kata_stem1)){

$this->prefix = $this->prefix;

$this->prefix = substr($this->prefix[1],0,2)." ".substr($this->prefix[1],2); return $kata_stem1;

}

$kata_stem2 = $this->Hapus_akhiran($kata_stem1); if($this->cekKamus($kata_stem2)){

$this->prefix = $this->prefix;

$this->prefix = substr($this->prefix[1],0,2)." ".substr($this->prefix[1],2); return $kata_stem2;

}

/*-- Cek luluh -l---*/

$kata_stem1 = preg_replace('/^(keber)/','r',$kata); if($this->cekKamus($kata_stem1)){

$this->prefix = $this->prefix[1]; return $kata_stem1;

}

$kata_stem2 = $this->Hapus_akhiran($kata_stem1); if($this->cekKamus($kata_stem2)){


(23)

$this->prefix = $this->prefix[1]; return $kata_stem2;

} }

if(preg_match('/^(keter)\S{1,}/',$kata,$this->prefix)){ $kata_stem1 = preg_replace('/^(keter)/','',$kata); if($this->cekKamus($kata_stem1)){

$this->prefix = $this->prefix;

$this->prefix = substr($this->prefix[1],0,2)." ".substr($this->prefix[1],2);

return $kata_stem1; }

$kata_stem2 = $this->Hapus_akhiran($kata_stem1); if($this->cekKamus($kata_stem2)){

$this->prefix = $this->prefix;

$this->prefix = substr($this->prefix[1],0,2)." ".substr($this->prefix[1],2); return $kata_stem2;

}

/*-- Cek luluh -l---*/

$kata_stem1 = preg_replace('/^(keter)/','r',$kata); if($this->cekKamus($kata_stem1)){

$this->prefix = $this->prefix[1]; return $kata_stem1;

}

$kata_stem2 = $this->Hapus_akhiran($kata_stem1); if($this->cekKamus($kata_stem2)){

$this->prefix = $this->prefix[1]; return $kata_stem2;

} }

if(preg_match('/^(berke)\S{1,}/',$kata,$this->prefix)){ $kata_stem1 = preg_replace('/^(berke)/','',$kata); if($this->cekKamus($kata_stem1)){

$this->prefix = $this->prefix;

$this->prefix = substr($this->prefix[1],0,3)." ".substr($this->prefix[1],3); return $kata_stem1;

}

$kata_stem2 = $this->Hapus_akhiran($kata_stem1); if($this->cekKamus($kata_stem2)){

$this->prefix = $this->prefix;

$this->prefix = substr($this->prefix[1],0,3)." ".substr($this->prefix[1],3); return $kata_stem2;

} }

if(preg_match('/^(berpeng)\S{1,}/',$kata,$this->prefix)){ $kata_stem1 = preg_replace('/^(berpeng)/','',$kata); if($this->cekKamus($kata_stem1)){

$this->prefix = $this->prefix;

$this->prefix = substr($this->prefix[1],0,3)." ".substr($this->prefix[1],3); return $kata_stem1;

}

$kata_stem2 = $this->Hapus_akhiran($kata_stem1); if($this->cekKamus($kata_stem2)){


(24)

$this->prefix = $this->prefix;

$this->prefix = substr($this->prefix[1],0,3)." ".substr($this->prefix[1],3); return $kata_stem2;

} }

/*---end "berke-"---*/

/* --- Cek Ada Tidaknya Prefik/Awalan (“di-”, “ke-”, “se-”, “te-”, “be-”, “me-”, atau

“pe-”) ---*/

if(preg_match('/^(di|[kstbmp]e)\S{1,}/',$kata,$this->prefix) == FALSE){ return $kataAsal;

}

return $kataAsal; }


(25)

DAFTAR PUSTAKA

Adriani, M., Asian, J., Nazief, B., Tahaghoghi, S.M.M., dan Williams, H.E. 2007. Stemming Indonesian: A Confix-Stripping Approach. Transaction on Asian Language Information Processing. Vol. 6, No. 4, Articel 13. Association for Computing Machinery: New York .

Agusta, Ledy. 2009. Perbandingan Algoritma Stemming Porter Dengan Algoritma Nazief & Adriani Untuk Stemming Dokumen Teks Bahasa Indonesia. Bali: Proceeding Konferensi Nasional Sistem dan Informatika.

Anonim. 2012. Stbi.rar. http://www.4shared.com/rar/124o0Xqi/stbi.htm. 30-04-2013.

Asian, Jelita, 2007. “Effective Techniques for Indonesian Text Retrieval”. PhD thesis

School of Computer Science and Information Technology RMIT University Australia.

Budhi G. S., Gunawan I., dan Yuwono F. 2006. Algoritma Porter Stemmer For Bahsa Indonesia Untuk Pre-processing Text Mining Berbasis Metode Market Basket Analysis. Skripsi. Universitas Kristen Petra: Jakarta.

Darmawan, H. A., Wurijanto, T., dan Masturi A. 2011. Rancang Bangun Aplikasi Search Engine Tafsir Al-Qur’an Menggunakan Teknik Text Mining Dengan Algoritma VSM (Vector Space Model). Skripsi. STIKOM: Surabaya.

Hakim, L., Samino, et al. Kamus Sistem Bahasa Isyarat Indonesia. 2008. Departemen Pendidikan Nasional: Jakarta.

Kadir, Abdul. 2001. Dasar Pemrograman Web Dinamis Menggunakan PHP. Yogyakarta: ANDI.

Manikam R., M., dan Ali, U. 2010. Kamus Elektronik Sistem Isyarat Bahasa Indonesia. Universitas Mercu Buana: Jakarta.


(26)

Mahendra, I. P. A. K., Arifin, A. Z., dan Ciptaningtyas , H. T. 2008. Penggunaan Algoritma Semut dan Confix Stripping Stemmer Untuk Klasifikasi Dokumen Berita Berbahasa Indonesia. Skripsi. Institut Teknologi Sepuluh Nopember: Surabaya.

Nazief, B. dan Adriani, M. 1996. Confix Stripping: Approach to Stemming Algorithm for Bahasa Indonesia. University of Indonesia: Jakarta.

Nugroho, B., 2008. Latihan Membuat Aplikasi Web PHP dan MYSQL dengan Deamweaver MX (6, 7, 2008) dan 8. Yogyakarta: Gava Media.

Sholihin, A., Solihin F., dan Rachman, F. H. 2013.Penerapan Modifikasi Metode Enhanced Confix Stripping Stemmer Pada Teks Berbahasa Madura. Jurnal Sarjana Teknik Informatika Vol. 1 No. 1. Hal 1-4.

Sutarman. 2007. Membangun Aplikasi Web Dengan PHP dan MySQL. Yogyakarta: Graha Ilmu.

Tahitoe, A. D. dan Purwitasari, D. 2010. Implementasi Modifikasi Enhaced Confix Stripping Stemmer Untuk Bahasa Indonesia Dengan Metode Corpus Based Stemming. Skripsi. Institut Teknologi Sepuluh Nopember: Surabaya.


(27)

BAB 3

ANALISIS DAN PERANCANGAN SISTEM

Pada bab ini, akan dibahas beberapa hal diantaranya data yang digunakan, penerapan algoritma dan analisa perancangan sistem dalam mengimplementasikan algoritmaconfix stripping stemmer pada proses stemming untuk penerjemahan bahasa Indonesia ke dalam bentuk bahasa isyarat Indonesia.

3.1 Data Yang Digunakan

Data yang digunakan merujuk pada buku Yaquti (2005) dimana kata-kata tersebut sering digunakan masyarakat dalam percakapan sehari-hari dan untuk kata dalam bahasa isyarat Indonesianya merujuk kepada kamus dari Departemen Pendidikan Nasional (2008).

3.2 Algoritma Enhanced Confix StrippingStemmer (ECS)

Algoritma enhanced confix stripping stemmer adalah algoritma stemming yang akurat untuk mencari kata dasar dari suatu kata dalam bentuk bahasa Indonesia (Sholihin, 2013). Penerapan algoritma ECS dinilai efektif (Sholihin, 2013) karena struktur kata bahasa isyarat Indonesia mengacu pada tata bahasa Indonesia yang memiliki sedikit perbedaan pada kata yang berbentuk imbuhan di mana imbuhan yang ditemukan pada proses stemming tidak mengalami peluruhan melainkan disimpan sehingga hasil stemming yang akan didapat berupa kata imbuhan dan kata dasarnya.

Pada tahap pertama dilakukan proses parsing terhadap kalimat yang diinputkan oleh user. Kemudian tiap kata hasil parsing yang tersimpan di dalam array akan di-stemming menggunakan algoritma ECS yang sudah dimodifikasi. Jika kata tersebut terdapat dalam kamus kata, maka kata merupakan kata dasar. Jika kata tidak terdapat di dalam kamus kata, maka kata tersebut akan mengalami proses stemming dan jika kata tersebut tidak dapat di-stemming, maka kata tersebut akan diurai menjadi huruf per huruf.


(28)

Proses penerjemahan bahasa Indonesia ke dalam bentuk bahasa isyarat Indonesia dapat direpresentasikan dengan diagram pada gambar 3.1 berikut ini :

Kalimat di-parsing menjadi kata per

kata

Kata yang telah diparsing

di-stemming menggunakan algoritma ECS

Kata yang telah di-stemming, di-parsing

kembali

Kata yang tidak terdapat pada database

diurai menjadi huruf per huruf Input kalimat oleh

user

Menampilkan kata sesuai dengan gambar yang ada

pada database

1

2

3

4

5

6

Gambar 3.1 Diagram Sistem

Diagram tersebut juga dapat dijelaskan dengan contoh sebagai berikut: 1. Input kalimat : Ayah membaca koran

2. Kalimat diparsing menjadi :[ayah][membaca][koran]

3. Kata yang telah diparsing, di-stemming menggunakan algoritma ECS (Enhanced Confix stripping)

- jika [ayah] pada saat di-stemming, ditemukan ada pada kamus kata maka [ayah] dikembalikan sebagai kata dasar

- jika [membaca] pada saat di-stemming mengalami tahap berikut

1) kata yang di-stemming dicari di kamus, karena tidak dtemukan maka lakukan langkah 2.

2) Cek kombinasi awalan dan akhiran yang dilarang sesuai Tabel 2.1 (pasangan awalan dan akhiran yang tidak diperbolehkan), karena bernilai salah, maka algoritma berjalan normal sesuai langkah 3, 4, 5, 6, 7.

3) Hilangkan partikel (“-lah”, “-kah”, “-tah” atau “-pun”)

4) hilangkan kata ganti kepemilikan (possessive pronoun) (“-ku”, “-mu”, “ -nya”).


(29)

5) Hilangkan derivation suffixes (akhiran) (“-i”, “-kan”, “-an”, “-man”, “ -wati”, “-wan”).

6) Hilangkan derivation prefixes (awalan) (“me-“, “ber-“, “di-“, “ke-“, “pe-“, “ter-“, dan “se-“). Pemenggalan awalan sesuai dengan Tabel 2.2 dimana mem{baca} menjadi mem-baca.

7) Kata baca dicari di kamus kata, karena ditemukan maka hasil stemming adalah mem sebagai awalan dan baca sebagai kata dasar.

- untuk [koran] karena tidak terdapat pada kamus kata dan setelah mengalami proses stemming dikembalikan sebagaimana bentuk semula, maka [koran] dianggap sebagai kata dasar.

4. Kata yang telah di-stemming akan diparsing kembali. - untuk [ayah] menjadi [ayah]

- untuk [mem-baca] menjadi [mem][baca]

5. Untuk [koran] harus mengalami proses penguraian menjadi huruf per huruf karena tidak dapat di-stemming dan tidak terdapat di dalam kamus kata. Maka [koran] menjadi [k][o][r][a][n].

6. Hasil gambar yang ditampilkan adalah sebagai berikut

ayah me(m) baca k o r a n


(30)

Mulai

Input kalimat oleh user

Kalimat di-parsing menjadi kata per

kata

Kata yang telah diparsing

di-stemming

Kata yang telah di-stemming, di-parsing

kembali

Menampilkan kata sesuai

dengan gambar yang

ada pada database

Sesuai Membandingkan kata hasil parsing dengan kata yang ada pada database

Kata diurai menjadi huruf per huruf

Tabel kata

Ya

Tidak

Selesai

P1

P2

Cari gambar pada database yang sesuai

dengan huruf

Tabel kata


(31)

Pada penelitian ini algoritma ECS perlu dimodifikasi agar sesuai dengan aturan tata bahasa isyarat Indonesia. Pada penelitian ini, aturan mereduksi imbuhan akan diganti dengan aturan menyimpan imbuhan. Berikut adalah algoritma ECS yang telah dimodifikasi untuk tata bahasa isyarat Indonesia.

1. Kata yang di-stemming dicari di kamus, jika ada maka algoritma berhenti, jika tidak maka lakukan langkah 2.

2. Cek rule precedence sesuai Tabel 2.1 (pasangan awalan dan akhiran yang tidak diperbolehkan), apabila bernilai benar maka lakukan langkah 6, 5, 7. Apabila bernilai salah, maka algoritma berjalan normal sesuai langkah 3, 4, 5, 6, 7.

3. Hilangkan partikel (“-lah”, “-kah”, “-tah” atau “-pun”)

4. Hilangkan kata ganti kepemilikan (possessive pronoun) (“-ku”, “-mu”, “-nya”) 5. Hilangkan derivation suffixes (akhiran) (“-i”, “-kan”, “-an”, “-man”, “-wati”, “

-wan”)

6. Hilangkan derivation prefixes (awalan) (“me-“, “ber-“, “di-“, “ke-“, “pe-“, “ter-“, dan “se-“)

a. langkah 5 berhenti jika:

(i) terjadi imbuhan terlarang (rule precedence)

(ii) awalan yang terdeteksi saat ini sama dengan yang dihilangkan sebelumnya. (iii) tiga awalan telah dihilangkan

b. identifikasikan tipe awalan dan hilangkan, awalan ada 2 tipe: (i) standar yang dapat langsung dihilangkan

(ii) kompleks adalah tipe-tipe awalan yang dapat bermorfologi sesuai kata dasar yang mengikutinya. Gunakan tabel aturan pemenggalan awalan (Tabel 2.2).

(iii) cari kata yang telah dihilangkan awalannya ini dalam kamus. Jika tidak ada maka ulangi langkah 5 ini.

7. Jika setelah 6 langkah sebelumnya dilakukan tetapi kata dasar tidak ditemukan pada database, maka kata awal yang dimasukkan dalam proses stemming dianggap sebagai kata dasar.

Pada setiap langkah, dilakukan proses pengecekan output stemming ke kamus. Apabila ditemukan, maka proses ini berhenti. Flowchart untuk proses stemming dapat dilihat pada Gambar 3.3.


(32)

Cek database

Cek kombinasi awalan dan akhiran

yang tidak diperbolehkan

Hapus awalan Cek database Tidak ada

Ya

Hapus

akhiran Cek database Tidak Tidak ada Ada Kata mengandung partikel Tidak Hapus

partikel Cek database

Kata mengandung kata ganti kepunyaan Tidak Tidak ada Hapus kata

ganti kepunyaan Cek database

Kata mengandung

akhiran

Hapus

akhiran Cek database Tidak Tidak ada

Tidak

Tidak ada

Hapus awalan Cek database Kata dasar Ada Ada Ada Ada Ada Ada Kata mengandung awalan Ya P1 P2


(33)

3.3 Analisis Sistem

Analisis sistem merupakan tahap awal untuk mengidentifikasi dan menjelaskan sistem yang akan dikembangkan. Pada tahap ini akan dipaparkan kebutuhan sistem yang sesuai dengan permasalahan, analisa use case dan pemodelan proses yang terjadi di dalam sistem.

3.3.1 System Requirement

System dibangun sebagai media pembelajaran untuk berkomunikasi dengan bahasa isyarat Indonesia. User dapat menginputkan kalimat yang ingin diterjemahkannya ke dalam bentuk bahasa isyarat. Kalimat inputan tersebut akan diparsing menjadi kata per kata. Hasil parsing tersebut akan di-stemming dan apabila kata mengandung imbuhan, maka imbuhan dan kata dasarnya akan diparsing kembali. Setiap kata yang telah diparsing akan dicocokkan dengan database kata yang telah disediakan. Apabila kata yang dimaksudkan tidak terdapat dalam kamus bahasa isyarat, maka kata tersebut akan diurai menjadi huruf per huruf, sehingga system akan menampilkan gambar isyarat tiap huruf yang telah diurai.

3.3.2 Process Modeling

Process model merepresentasikan bagaimana sistem diproses yang menggambarkan proses atau aktivitas dan perpindahan data yang berlangsung didalamnya. Pemodelan proses tersebut menggunakan teknik data flow diagram (DFD).

DFD adalah sebuah teknik grafis yang menggambarkan aliran informasi dan transformasi yang diaplikasikan pada saat bergerak dari input menjadi output. DFD sistem untuk menyelesaikan permasalahan flow shop adalah sebagai berikut :

a. Context Diagram

Context diagram adalah DFD tingkat atas yang menggambarkan secara umum aliran data dalam suatu sistem dengan entitas-entitas eksternalnya. Context diagram pada sistem penerjemahan bahasa Indonesia ke bentuk bahasa isyarat Indonesia dapat digambarkan seperti pada Gambar 3.4 berikut ini.


(34)

User kata Input kalimat

Hasil terjemahan

1.0 Penerjemahan

kata

Gambar 3.4 Context Diagram

Context diagram pada gambar 3.4 memiliki satu entity yakni user. User akan memberikan input kepada sistem berupa kalimat yang ingin diterjemahkan. Selanjutnya diproses dalam sistem dan sistem memberikan hasil akhir kepada user.

b. DFD level n

Diagram level n digunakan untuk merepresentasikan diagram fisik maupun logis. Pada diagram inilah digambarkan aliran data secara lebih detail yang merupakan pengembangan dari context diagram sehingga disebut top-down partitioning.

Context diagram pada gambar 3.4 dapat dipartisi atau dibagi menjadi beberapa level yang lebih detail. DFD level 1 yang merupakan representasi detail dari context diagram dapat digambarkan seperti pada gambar 3.5 berikut ini.

Gambar 3.5 menjelaskan proses penerjemahan kalimat inputan user ke dalam bentuk bahasa isyarat. Kalimat akan mengalami proses parsing kemudian hasil parsing yang berupa kata akan mengalami proses stemming. Kata awal input-an yang terdapat pada database akan dikembalikan sebagai kata dasar pada saat proses stemming dan mengambil gambar dari database yang sesuai dengan kata dasar input-an, sedangkan kata berimbuhan yang berhasil di-stemming akan diparsing kembali kemudian dicocokkan dengan kata di dalam database, jika ada maka gambar isyarat akan ditampilkan.Namun, jika kata tidak tersedia di dalam database, kata tersebut akan mengalami penguraian menjadi huruf per huruf. Sistem akan menampilkan gambar isyarat huruf per huruf dari kata yang tidak tersedia tersebut.


(35)

(36)

3.3Rancangan Sistem

Rancangan sistem menggambarkan dan menjelaskan arsitektur dan rancangan antar muka yang dibuat untuk sistem ini.Arsitektur sistem meliputi kebutuhan spesifikasi hardware dan software yang dibutuhkan sebelum atau sesudah pembuatan sistem.

Rancangan antarmuka manggambarkan dan menjelaskan proses input ke dalam proses sehingga menghasilkan sebuah output yang diharapkan dan dapat dipahami oleh pengguna.

3.3.3 Kebutuhan Hardware

Perancangan dan pembuatan sistem yang membantu dalam menyelesaikan permasalahan dalam penelitian ini membutuhkan spesifikasi hardware sebagai berikut:

1. Processor Intel Core 2 Duo 2,1GHz 2. RAM 2.00 GB

Spesifikasi hardware tersebut selanjutnya digunakan juga untuk menjalankan sistem setelah perancangan dan pembuatan dilakukan.

3.3.4 Kebutuhan Software

Perancangan dan pembuatan sistem untuk menyelesaikan masalah flow shop scheduling membutuhkan spesifikasi software sebagai berikut :

1. XAMPP For Windows 2. Browser Mozilla Firefox

3. Operating system Windows 7 Ultimate 3.3.5 Antarmuka Sistem

Perancangan tampilan antarmuka digunakan untuk menggambarkan tampilan antarmuka sebelumnya. Beberapa rancangan tampilan antarmuka yang digunakan dalam skripsi ini sebagai berikut :

1. Rancangan Halaman Utama

Rancangan tampilan halaman utama menampilkan text box untuk kalimat masukan user dan button “Terjemahkan” untuk menjalankan proses. Rancangan halaman utama dapat dilihat pada gambar 3.6.


(37)

Gambar 3.6 Rancangan halaman utama

2. Rancangan Halaman Output

Rancangan tampilan halaman output menampilkan gambar hasil dari penerjemahan ke bentuk bahasa isyarat beserta kata yang bersesuaian dengan gambar yang ditampilkan. Rancangan halaman output dapat dilihat pada gambar 3.7.


(38)

BAB 4

IMPLEMENTASI DAN PENGUJIAN

Pada bab ini, akan dibahas hasil implementasi algoritma ECS pada system pembelajaran bahasa isyarat Indonesia.

4.1 Implementasi

Tampilan antarmuka sistem adalah sebagai berikut:

4.1.1 Tampilan Halaman Utama

Pada halaman yang ditunjukkan pada Gambar 4.1 terdapat header yang menjelaskan maksud dan kegunaan website ini.

Gambar 4.1 Halaman Utama 4.1.2 Tampilan Halaman Input

Pada halaman yang ditunjukkan Gambar 4.2 terdapat textbox dimana user dapat menginputkan kalimat yang ingin diterjemahkan ke dalam bahasa isyarat dan button Proses untuk melanjutkan proses terjemahan. Contoh kata yang diinputkan “ayah membaca koran”.


(39)

Gambar 4.2 Halaman Input 4.1.3 Tampilan Halaman Output

Halaman output yang ditunjukkan Gambar 4.3 menampilkan kata yang telah diterjemahkan ke dalam bahasa isyarat yang berupa gambar dan penjelasan kata yang bersesuaian di bawah gambar. Hasil yang ditampilkan berupa ayah.jpg, mem.jpg, baca.jpg, Koran.jpg.

Gambar 4.3 Halaman Output 4.1.4 Tabel Kata Pada Database Kata

Pada penelitian ini digunakan 539 kata yang diinputkan ke dalam database MySQL dengan merujuk Yaquti (2005) dimana kata seperti adat akan dirujuk pada gambar


(40)

adat dengan ekstensi .jpg. Contoh kata yang diinputkan dapat dilihat pada Gambar 4.4 berikut.

Gambar 4.4 Database Kata 4.2 Pengujian

Dalam bahasa isyarat Indonesia, hanya terdapat satu gerakan untuk awalan me- yang dapat mewakili awalan mem-, meng-, dan menge-. Begitu juga dengan awalan pe- yang dapat mewakili awalan pem-, pe-, dan penge-.

Untuk mengisyaratkan nama diri, singkatan, nama daerah, dan kata yang belum ada isyaratnya, sistem akan menampilkan isyarat jari yaitu isyarat yang dibentuk dengan jari-jari tangan untuk mengeja huruf dan angka sesuai dengan ketentuan dalam aturan bahasa isyarat Indonesia

Data yang di-input-kan ke database hanya 600 kata yang dirujuk pada (Yaquti, 2005) sedangkan di dalam kamus kata bahasa isyarat Indonesia (Hakim et al, 2008) terdapat sekitar 8000 kata. Namun, kata yang belum di-input-kan ke dalam database tetap dapat diproses untuk diterjemahkan dengan isyarat abjad jari dimana kata tersebut akan dieja huruf per huruf dengan isyarat jari.

Contoh kalimat yang diinputkan untuk pengujian, misalnya “Ayah membaca koran Tribun dan ibu pergi membeli ikan ke pasar.” Proses stemming dari kalimat tersebut dapat dilihat pada Tabel 4.1 berikut dengan output yang dihasilkan berupa gambar.

Tabel 4.1 Output Sistem dari input-an kalimat “Ayah membaca koran Tribun dan ibu pergi membeli ikan ke pasar.”

Kata Hasil Stemming Gambar


(41)

Tabel 4.1 Output Sistem dari input-an kalimat “Ayah membaca koran Tribun dan ibu pergi membeli ikan ke pasar.” (Lanjutan)

Kata Hasil Stemming Gambar

Membaca Mem

Baca

Koran Koran

Tribun T

R

I

B

U

N


(42)

Tabel 4.1 Output Sistem dari input-an kalimat “Ayah membaca koran Tribun dan ibu pergi membeli ikan ke pasar.” (Lanjutan)

Kata Hasil Stemming Gambar

Ibu Ibu

Pergi Pergi

membeli Mem

Beli

ikan Ikan

ke Ke


(43)

BAB 5

KESIMPULAN DAN SARAN

Pada bab ini diuraikan kesimpulan yang didapat dari pengimplementasian algoritma confix stripping stemmer pada pembelajaran bahasa isyarat Indonesia, beserta saran-saran yang dapat digunakan sebagai bahan pertimbangan untuk pengembangan atau riset selanjutnya.

5.1 Kesimpulan

Algoritma Confix stripping Stemmer dapat diterapkan dalam sistem pembelajaran bahasa isyarat. Algoritma ini mampu memenggal kata dengan kombinasi Prefiks 1 + Prefiks 2 + Kata dasar + Sufiks 3 + Sufiks 2 + Sufiks 1 dimana Sufiks 3 = akhiran, Sufiks 2 = kata ganti kepunyaan, dan Sufiks 1 = partikel. Namun, untuk kata bersisipan tidak dapat dilakukan proses stemming karena di dalam bahasa isyarat Indonesia tidak ada aturan yang menjelaskan tentang sisipan sedangkan untuk kata berhomonim di dalam bahasa isyarat tidak memiliki perbedaan bentuk, seperti bisa ular dengan bisa kulakukan.

5.2 Saran

Sistem ini belum dapat membedakan antara awalan ke- dan kata depan ke, begitu juga dengan awalan di- dengan kata depan di, sehingga diharapkan pada penelitian selanjutnya dapat mengatasi kekurangan ini.

Untuk penelitian selanjutnya juga diharapkan dapat menampilkan data yang berupa animasi sehingga pengguna lebih mudah mempelajari bahasa isyarat Indonesia.


(44)

BAB 2

TINJAUAN PUSTAKA

Pada bab ini, akan dibahas landasan teori, penelitian terdahulu, dan kerangka pikir yang mendasari penyelesaian permasalahan stemming dengan menggunakan algoritma enhanced confix stripping stemmer.

2.1Kamus Sistem Bahasa Isyarat Indonesia

Sistem Isyarat Bahasa Indonesia (SIBI) yang telah dibakukan merupakan salah satu media yang membantu komunikasi sesama kaum tunarungu di dalam masyarakat yang lebih luas.Wujudnya adalah tataan yang sistematis tentang seperangkat isyarat jari, tangan, dan berbagai gerak yang melambangkan kosa kata bahasa Indonesia. Di dalam upaya pembakuan tersebut, dipertimbangkan beberapa tolak ukur yang mencakup segi kemudahan, keindahan, dan ketepatan pengungkapan makna atau struktur kata, di samping beberapa segi yang lain.

Berdasarkan pembentukannya, isyarat dapat dibedakan menjadi tiga macam : 1. Isyarat pokok, yaitu isyarat yang melambangkan sebuah kata atau konsep.

Isyarat ini dibentuk dengan berbagai macam penampil, tempat, arah, dan frekuensi sebagaimana telah diuraikan di atas.

2. Isyarat tambahan, yaitu isyarat yang melambangkan awalan, akhiran, dan partikel.

a. Isyarat awalan

Isyarat ini dibentuk dengan tangan kanan sebagai penampil utama dan tangan kiri sebagai penampil pendamping.Isyarat walan dibentuksebelum isyarat pokok.Seluruhnya ada tujuh buah isyarat awalan yang meliputi isyarat awalan me-, ber-, di-, ke-, pe-, ter-, dan se-.


(45)

Gambar 2.1 Contoh kata melempar b. Isyarat akhiran dan partikel

Isyarat ini dibentuk sesudah isyarat pokok dengan tangan kanan sebagai penampil, bertempat di depan dada dan digerakkan mendatar ke kanan. Isyarat ini terdiri atas isyarat akhiran i, kan,an, man, -wati,-wan, dan partikel lah, -kah, dan –pun.

Contohnya dapat dilihat pada Gambar 2.2 dengan kata alirkan.

Gambar 2.2 Contoh kata alirkan

c. Isyarat bentukan

Isyarat ini dibentuk dengan menggabungkan isyarat pokok dengan isyarat imbuhan dan dengan menggabungkan dua isyarat pokok atau lebih.

a. Isyarat yang mendapat awalan dan/atau akhiran/partikel, isyarat yang hanya mendapat awalan dan hanya akhiran, atau gabungan awalan dan akhiran dibentuk sesuai dengan urutan pembentukannya.


(46)

Contohnya dapat dilihat pada Gambar 2.3 dengan kata berlompatan.

Gambar 2.3 Contoh kata berlompatan 3. Abjad jari

Abjad jari adalah isyarat yang dibentuk dengan jari-jari tangan (kanan atau kiri) untuk mengeja huruf dan angka.

Bentuk isyarat bagi huruf dan angka di dalam Sistem Isyarat Bahasa Indonesia serupa dengan International Manual Alphabet (dengan perubahan-perubahan).

Abjad jari digunakan untuk : a. Mengisyaratkan nama diri;

b. Mengisyaratkan singkatan atau akronim; dan c. Mengisyaratkan kata yang belum ada isyaratnya. 2.2Proses Stemming

Stemming merupakan suatu proses yang terdapat dalam sistem IR (Information Retrieval) untuk mengolah kata-kata yang terdapat dalam suatu dokumen dengan menggunakan aturan-aturan tertentu sehingga didapatkan kata dasarnya (root word). Sebagai contoh, kata bersama, kebersamaan, menyamai, akan distem ke root word-nya yaitu “sama” (Mahendra et al, 2008).

Algoritma stemming untuk bahasa yang satu berbeda dengan algoritma stemming untuk bahasa lainnya. Sebagai contoh bahasa Inggris memiliki morfologi yang berbeda dengan bahasa Indonesia sehingga algoritma stemming untuk kedua bahasa tersebut juga berbeda. Proses stemming pada teks berbahasa Indonesia lebih rumit/kompleks karena terdapat variasi imbuhan yang harus dibuang untuk


(47)

mendapatkan root word (kata dasar) dari sebuah kata. Pada umumnya kata dasar pada bahasa Indonesia terdiri dari kombinasi:

Prefiks 1 + Prefiks 2 + Kata dasar + Sufiks 3 + Sufiks 2 + Sufiks 1

Algoritma confix-stripping stemmer adalah algoritma yang akurat dalam stemming bahasa Indonesia karena sesuai dengan aturan morfologi bahasa Indonesia (Adriani et al, 2007).

Dalam menyelesaikan permasalahan untuk melakukan proses stemming secara tepat, para peneliti telah banyak menggunakan algoritma-algoritma yang dapat memberikan hasil yang sesuai harapan.

Mahendra et al (2008) mengembangkan enhanced confix stripping stemmer, sebagai perbaikan dari algoritma confix strippingstemmeruntuk stemmingdokumen berita berbahasa Indonesia. Hasil uji coba membuktikan bahwa enhanced confix stripping stemmerberhasil mengatasi kesalahan-kesalahan confix stripping stemmer dan mampu mereduksi jumlah term hingga 32.66%, sedangkan confix stripping stemmer hanya mampu mereduksi 30.95% jumlah term.

Tahitoe dan Purwitasari (2006) pada penelitiannya mengimplementasikan metode corpus based stemming untuk memperbaiki kesalahan stemming dari algoritma ECS. Dari hasil uji coba, perbaikan yang dilakukan dapat memperbaiki seluruh kesalahan stemming yang dilakukan oleh algoritma ECS Stemmer.

Budhi et al (2006) menggunakan algoritma Porter Stemmer for Bahasa Indonesia untuk proses stemming pada langkah pre-processing yang mengubah sebuah teks dalam bahasa Indonesia menjadi bentuk Compact Transaction. Compact Transaction digunakan sebagai masukan untuk proses Keyword-Based Association Analysis, sebuah metode Text Mining yang dikembangkan dari metode Market Basket Analysis, digunakan untuk membentuk rule-rule asosiasi dari data teks. Dari hasil uji coba didapatkan bahwakesalahan proses 'stem' kata secara otomatis cukup kecil, yaitu 2% sehingga dapat diatasi dengan cepat menggunkan pemeriksaan kembali secara manual terhadap hasil stemmer.

Darmawan et al menggunakan algoritma enhanced confix stripping stemmer dalam penelitiannya.Pemilihan algoritma Enhanced confix stripping stemmer merujuk pada penelitian I Putu Adhi Kerta Mahendra yang merupakan salah satu mahasiswa Institut Teknologi Sepuluh November (ITS) – Surabaya mengenai metode atau algoritma stemming yang spesifik untuk Bahasa Indonesia (Mahendra, 2008).


(48)

Berdasarkan penelitian-penelitian terdahulu maka penulis dalam penelitian ini menggunakan enhanced confix stripping stemmer dalam menyelesaikan permasalahan stemming agar sesuai dengan aturan morfologi pada bahasa isyarat Indonesia.

2.3Algoritma Enhanced confix strippingStemmer

Enhanced confix stripping stemmer merupakan salah satu algoritma yang dapat mengatasi proses stemming yang spesifik untuk Bahasa Indonesia. Pemilihan algoritma enhanced confix stripping stemmer merujuk pada penelitian Mahendra (2008). Pada dasarnya, algoritma enhanced confix stripping stemmer merupakan modifikasi dari algoritma confix stripping stemmer (Asian, 2007) yang dikembangkan dari algoritma stemming yang dibuat oleh Nazief dan Adriani (1996) dengan beberapa penambahan aturan tertentu yang telah terbukti mampu meningkatkan kinerja stemmer tersebut. Algoritma stemming Nazief dan Adriani dikembangkan berdasarkan pada aturan morfologi Bahasa Indonesia yang mengelompokkan dan mengenkapsulasi imbuhan-imbuhan, termasuk di dalamnya adalah awalan (prefix), sisipan (infix), akhiran (suffix) dan gabungan awalan-akhiran (confixes). Algoritma enhanced confix stripping stemmer menambahkan penggunaan kamus kata dasar dan mendukung recoding, yakni penyusunan kembali kata-kata yang mengalami proses stemming berlebih.

Tabel 2.1 Kombinasi Awalan-Akhiran yang dilarang Awalan

(prefix)

Akhiran (suffix) yang

tidak diperbolehkan

be- -i

di- -an

ke- -i, -kan

me- -an

se- -i, -kan

te- -an

Algoritma enhanced confix stripping stemmer (Mahendra, 2008) adalah sebagai berikut:

1. Cek kombinasi akhiran dan awalan yang dilarang sesuai Tabel 2.1, apabila bernilai benar maka lakukan penghilangan awalan terlebih dahulu. Apabila bernilai salah, maka penghilangan akhiran dilakukan terlebih dahulu.


(49)

2. Lakukan recoding apabila diperlukan. 3. Lakukan loopPengembalianAkhiran.

4. Cek apakah terdapat tanda hubung (‘-’) yang menandakan bahwa input kata tersebut adalah kata ulang atau bentuk jamak. Jika ada, maka lakukan stemming pada sub-kata di sebelah kiri dan kanan tanda hubung tersebut. Apabila stemming memberikan hasil yang sama, maka kata dasar kata ulang tersebut adalah hasil stemming yang didapatkan.

5. Jika proses-proses di atas gagal, maka input kata yang distemming dianggap sebagai kata dasar.

Pada setiap langkah, dilakukan proses pengecekan output stemming ke kamus. Apabila ditemukan, maka proses ini berhenti. Berikut adalah contoh proses stemming pada kata “perpolitikan” dengan menggunakan enhanced confix stripping stemmer:

1. Cek kombinasi awalan dan akhiran yang dilarang: salah. Hilangkan akhiran terlebih dahulu.Penghilangan akhiran menyisakan kata “perpoliti”.

2. Penghilangan awalan menyisakan kata “politi” (sesuai aturan 23 pada Tabel 2.2).

3. Karena aturan 23 pada Tabel 2.2 tidak mendefinisikan karakter recoding, maka proses recoding tidak dilakukan.

4. Kata “politi” tidak ada di kamus, oleh karena itu dilakukan loopPengembalianAkhiran:

 Awalan-awalan yang telah dihilangkan, dikembalikan lagi. Langkah ini menghasilkan kata “perpoliti”.

 Akhiran-akhiran dikembalikan. Karena akhiran yang sebelumnya dihilangkan adalah “-kan”, maka karakter ’k’ saja yang dikembalikan terlebih dahulu. Proses ini menghasilkan kata “perpolitik”.

 Karena “perpolitik” tidak ada di kamus, maka proses penghilangan awalan dilakukan. Proses ini menghasilkan kata “politik”.

 Karena “politik” ditemukan dalam kamus, proses loopPengembalianAkhiran ini berhenti. Kata dasar “perpolitikan” adalah “politik”.

Pada Tabel 2.2, simbol C merupakan konsonan, simbol V menandakan vokal, simbol A merupakan vokal atau konsonan, dan simbol P merepresentasikan partikel atau fragmen dari suatu kata, misalnya “er”.


(50)

Tabel 2.2 Aturan Pemenggalan Awalan Stemmer Nazief dan Adriani yang sudah dimodifikasi

Aturan Format Kata

Pemenggalan Contoh

1 berV... ber-V... | be-rV... Ber-air

2 berCAP.

..

ber-CAP... dimana

C!= ‘r’ & P!= ‘er’ Bersamalah

3 berCAer

V...

ber-CaerV... dimana C!= ‘r’

4 belajar bel-ajar

5 beC1erC

2...

be-C1erC2... dimana C1!={‘r’|‘l’}

6 terV... ter-V... | te-rV... Terajarkan 7 terCerV.

..

ter-CerV... dimana C!= ‘r’

8 terCP... ter-CP... dimana

C!=‘r’ dan P!=‘er’ Terbukalah

9 teC1erC

2...

te-C1erC2... dimana C1!=‘r’

10 me{l|r|w |y}V...

me-{l|r|w|y}V... Me-rampok, me-lahirkan, me-warnai, me-yakinkan 11 mem{b|f

|v}...

mem-{b|f|v}... Mem-baca, mem-filmkan

12 mempe

… mem-pe... Mem-pelopori

13 mem{rV

|V}...

m{rV|V}... | me-p{rV|V}...

Me-program 14 men{c|d|

j|s|z}...

men-{c|d|j|z}... Men-cintai, men-datangkan, men-jumpai,

15 menV... me-nV... | me-tV Me-nikmati | me-tarik 16 meng{g|

h|q|k}...

meng-{g|h|q}... Meng-gugurkan, meng-hidangkan

17 mengV.. .

meng-V... |meng-kV...| (mengV-... jika V=’e’)

Meng-ajarkan. Meng-eja, meng-kejutkan

18 menyV.. .

meny-sV... Meny-sekolahkan

19 mempA.

..

mem-pA... dengan

A!=’e’ Mem-populerkan 20 pe{w|y}

V...

pe-{w|y}V... Pe-waris 21 perV... per-V... | pe-rV... Per-anakan 23 perCAP per-CAP... dimana

C!=‘r’ dan P!=‘er’ 24 perCAer

V...

per-CAerV... dimana C!=‘r’

25 pem{b|f| V}...


(51)

Tabel 2.2 Aturan Pemenggalan Awalan Stemmer Nazief dan Adriani yang sudah dimodifikasi (Lanjutan)

Aturan Format Kata

Pemenggalan Contoh

26 pem{rV| V}...

m{rV|V}... | pe-p{rV|V}...

Pemrogaman 27 pen{c|d|j

|z}...

pen-{c|d|j|z}... Pencucian, pendapatan, penjaga

28 penV... pe-nV... | pe-tV... Penikmat | penarik 29 pengC... peng-C... Penggajian, 30 pengV... peng-V... | peng-kV...|

(pengV-... jika V=’e’)

Pengajaran, pengejutan, pengeja

31 penyV... peny-sV... Penyekolahan 32 pelV... pe-lV... kecuali

“pelajar” yang menghasilkan “ajar”

Pelarut

33 peCerV. ..

per-erV... dimana C!={r|w|y|l|m|n} 34 peCP... pe-CP... dimana

C!={r|w|y|l|m|n} dan P!=‘er’

35 terC1erC

2…

ter-C1erC2... dimana C1!= ‘r’

36 peC1erC 2...

pe-C1erC2... dimana C1!={r|w|y|l|m|n}

Pada bahasa isyarat Indonesia tidak terdapat aturan mengenai sisipan, sehingga untuk kata awal yang di-input-kan memiliki sisipan akan dianggap sebagai kata dasar.

Proses stemming untuk penelitian Darmawan et al (2011) dapat direpresentasikan dengan flowchart pada Gambar 2.4 berikut. Langkah pertama adalah mencocokkan term pada elemen di index tertentu dengan daftar “kata dasar” dalam database kamus. Jika cocok maka term tersebut langsung disimpan dalam variable stemTerm, jika tidak maka dilakukan pengecekan rulePrecedence yakni larangan kombinasi awalan dan akhiran. Jika rulePrecedence mengembalikan nilai true proses reduksiAwalan dilakukan dan selanjutnya melakukan pencocokan kembali terhadap database kamus, jika tidak lakukan proses recording bila perlu. Jika semua proses itu tidak berhasil, maka term yang ada langsung disimpan dalam variable dan dianggap sebagai sebuah kata dasar. Proses ini terus berulang pada setiap elemen yang mengandung term di variable filterTerm hingga akhir elemen variable ini.


(52)

Start Daftar filterTerm dalam tipe data vektor Proses pencocokan fliterTerm[index] dengan kamus

index + 1 Kamus

(filterTerm[index] == token)

Cek rulePrecedence() (Term == kamus) Proses reduksiAwalan() True Proses reduksiAkhiran() False (Term == kamus)

Sudah melakukan proses reduksiAwalan()

False

Proses loopPengembalianAkhiran()

Cek apakah term merupakan kata ulang

Proses ambil sub kata di sebelah kanan dan kiri setelah

tanda “-”

Lakukan proses stemming pada dua sub

kata

(Index > filterTerm.size())

Proses simpan term ke variabel

stemTerm

Sama ?

Proses pengembalian kata ulang sebelum proses

stemming Daftar stemTerm dalam tipe data vektor Finish Recording ? (Term == kamus) recording False True False True True False True True False True


(53)

2.4Bahasa Pemrograman PHP

PHP (Hypertext Preprocessor) adalah bahasa komputer yang dibuat untuk pengembangan web dinamis. Pada umumnya PHP digunakan di server namun juga dapat berdiri sendiri sebagai aplikasi graphical (Kadir, 2001).

Penggunaan PHP dan MySQL dipilih karena PHP dan MySQL memilikibeberapa kelebihan seperti dinyatakan oleh Sutarman (2007) kelebihannya sebagai berikut:

1. Bahasa pemograman PHP adalah sebuah bahasa script yang tidak melakukan sebuah kompilasi dalam penggunaannya.

2. Web Server yang mendukung PHP dapat ditemukan dimana-mana dari mulai IIS sampai dengan Apache dengan konfigurasi yang relatif mudah.

3. Dapat berjalan pada sistem operasi yang berbeda seperti UNIX, Windows, dan Macintosh.

Sedangkan database MySQL memiliki beberapa kelebihan, yaitu: 1. Portability

MySQL dapat berjalan stabil pada berbagai sistem operasi seperti Windows,Linux, FreeBSD, Mac Os X Server, Solaris, Amiga dan masih banyak lagi.

2. Open Source

MySQL dapat didistribusikan secara open source, dibawah lisensi GPL sehingga dapat digunakan secara gratis.

3. Multiuser

MySQL dapat digunakan oleh beberapa user dalam waktu yang bersamaan tanpa mengalami masalah atau konflik.

4. Performance tuning

MySQL memiliki kecepatan yang baik dalam menangani query sederhana, dengan kata lain dapat memproses lebih banyak SQL per satuan waktu.

5. Column types

MySQL memiliki tipe kolom yang sangat kompleks, seperti signed/ unsignedinteger, float, double, char, text, date, timestamp, dan lain-lain.

6. Command dan functions

MySQL memiliki operator dan fungsi secara penuh yang mendukung perintah Select dan Where dalam query.


(1)

PENGHARGAAN

Alhamdulillah, puji dan syukur penulis ucapkan kehadirat Allah SWT, serta shalawat dan salam kepada junjungan kita nabi Muhammad SAW, karena atas berkah, rahmat dan hidayahnya penulis dapat menyelesaikan penyusunan skripsi ini.

Dalam penulisan skripsi ini penulis banyak mendapatkan bantuan serta dorongan dari pihak lain. Dalam kesempatan ini dengan segala kerendahan hati,penulis mengucapka terima kasih kepada:

1. Ketua dan Sekretaris Jurusan Prof. Dr. Opim Salim, M.Sc dan Drs.Sawaluddin, M.IT.

2. Kepada Bapak M. Anggia Muchtar, ST, M.MIT dan Ibu Dr. Erna Budhiarti Nababan, MIT selaku dosen pembimbing penulis yang telah memberikan saran dan masukan serta bersedia meluangkan waktu, tenaga dan pikiran dalam membantu menyelesaikan skripsi ini.

3. Bapak Muhammad Andri Budiman, S.T., M.Comp.Sc. dan Bapak M. Fadly Syahputra, ST., M.MIT selaku dosen pembanding dan penguji yang telah banyak memberikan petunjuk, saran dan kritik dalam menyelesaikan skripsi ini.

4. Kedua orang tua penulis, yaitu Mama, Analisa beserta Ayah, Muhammad Amin, karena berkat dukungan mereka baik secara moril maupun materil secara terus-menerus sehingga penulis dapat menyelesaikan skripsi ini. Kepada adik-adik penulis, Annisa Iqramina dan Muhammad Alhamidi serta kepada Donny Fadli, Amd. yang telah banyak memberikan dukungan moril maupun materil kepada penulis selama ini, dan seluruh keluarga besar atas perhatiannya dan dukungannya kepada penulis.

5. Bapak M. Safri Lubis, ST, M.Com selaku dosen penasihat akademik saya. 6. Seluruh Dosen yang mengajar dan staff tata usaha pada program studi

Teknologi Informasi Universitas Sumatera Utara.

7. Teman-teman Teknologi Informasi stambuk 2009, baik yang sudah tamat atau pun sedang menyelesaikan skripsi, Umay, Jihan, Nurul, Dila, Amira, Rafiqa, Lisa, Fadil, Alvin, Sion, Fida, Stella, Cynthia, Riska, Asri, Iqbal, Firdaus, Denny, Mahatir, Dulah, Yunisha, Ade dan mamanya, Dijah, Bagus, Ari, dan Satria serta Bang Nazar dan Bang Nasir yang bersedia meluangkan waktunya untuk membantu penulis..

8. Seluruh rekan-rekan kuliah sejawat yang tidak dapat disebutkan satu persatu. Dalam penyusunan skripsi ini penulis menyadari bahwa masih banyak kekurangan, untuk itu penulis mengharapkan saran dan kritik yang bersifat membangun dari semua pihak demi kesempuranaan skripsi ini.

Akhir kata penulis mengharapkan semoga skripsi ini dapat bermanfaat dan membantu semua. pihak yang memerlukannya


(2)

ABSTRAK

Bahasa isyarat merupakan bahasa alami yang memiliki proses penentuan struktur kalimat berdasarkan aturan tata bahasa dan kamus kata sesuai dengan bahasa isyarat. Aturan tata bahasa dalam bahasa isyarat memiliki sedikit perbedaan dengan tata aturan dalam bahasa Indonesia. Untuk penguraian kata berimbuhan, bahasa isyarat hanya mengenal awalan me-, berbeda dengan bahasa Indonesia yang terdapat awalan me-, men-, meng-, menge-. Begitu juga dengan awalan pe- pada bahasa isyarat, yang di dalam bahasa Indonesia terdapat awalan pe-, pen-, peng-, penge-. Melihat aturan tata bahasa dalam bahasa isyarat yang memerlukan penguraian imbuhan, maka diperlukan proses stemming untuk mendapatkan kata imbuhan dan kata dasar yang di-input-kan. Proses stemming yang dilakukan menggunakan algoritma Enhanced Confix Stripping Stemmer. Algoritma ini dapat menghasilkan kata dasar yang lebih akurat, sehingga penerjemahan sesuai dengan kaedah yang berlaku pada system bahasa isyarat Indonesia. Algoritma Enhanced Confix Stripping Stemmer dapat diterapkan dalam sistem pembelajaran bahasa isyarat. Algoritma ini mampu memenggal kata dengan kombinasi Prefiks 1 ditambah Prefiks 2 ditambah Kata dasar ditambah Sufiks 3 ditambah Sufiks 2 ditambah Sufiks 1 dimana Sufiks 3 adalah akhiran, Sufiks 2 adalah kata ganti kepunyaan, dan Sufiks 1 adalah partikel. Output yang dihasilkan berupa gambar dari database yang sesuai dengan kata yang di-input-kan user.


(3)

ABSTRACT

Sign languageis a natural language that has the process of determining the structure of sentences based on rules of grammar and dictionary of words according to the sign language. Grammar rulesin sign languagehas littledifferencewith thegrammarrules inIndonesian language. For the decomposition of confixes, sign language only has the prefix me-, which in Indonesian language has prefix me-, men-, meng-, menge-. It is same to the prefix pe- in sign language, which in Indonesian language has prefix pe-, pen-, peng-, penge-. The rules of grammar in sign language which require to parse the word has confixes, accordingly require stemming process to get the confixes and the root word that user has input. Algorithm of stemming process are performed using enhanced confix stripping stemmer. This algorithm can produce more accurate root word in previous research, so the translation can be match with the grammar of Indonesian sign language. Enhanced Confix Stripping Stemmer algorithm is applied to a sign language learning system. This algorithm is able to cut off the word with a combination of prefixes 1 plus prefixes 2 plus root word plus suffix 3 plus suffixes 2 plus suffixes 1 where the suffix 3 is a suffix, suffix 2 is a possessive pronoun, and the suffix 1 is a particle. The output is an image from the database according to the words that the user has input.


(4)

DAFTAR ISI

PERSETUJUAN ii

PERNYATAAN iii

PENGHARGAAN iv

ABSTRAK v

ABSTRACT vi

DAFTAR ISI vii

DAFTAR TABEL viii

DAFTAR GAMBAR ix

BAB 1PENDAHULUAN 1

1.1Latar Belakang 1

1.2Rumusan Masalah 2

1.3Batasan Masalah 2

1.4Tujuan Penelitian 2

1.5Manfaat Penelitian 2

1.6Metodologi Penelitian 3

1.7Sistematika Penulisan 3

BAB 2 TINJAUAN PUSTAKA 6

2.1Kamus Sistem Bahasa Isyarat Indonesia 6

2.2Proses Stemming 7

2.3Algoritma Enhanced Confix Stripping Stemmer 9

2.4Bahasa Pemrograman PHP 14

BAB 3 ANALISIS DAN PERANCANGAN SISTEM 18

3.1Data Yang Digunakan 18

3.2Agoritma Enhanced Confix Stripping Stemmer (ECS) 18

3.3Analisis Sistem 23

3.3.1 System Requirement 23

3.3.2 Process Modeling 23

3.3.3 Kebutuhan Hardware 26

3.3.4 Kebutuhan Software 26

3.3.5 Antarmuka Sistem 26

BAB 4IMPLEMENTASI DAN PENGUJIAN 29

4.1Implementasi 29

4.1.1 Tampilan Halaman Utama 29

4.1.2 Tampilan Halaman Input 29


(5)

DAFTAR TABEL

Halaman Tabel 2.1 Kombinasi Awalan-Akhiran yang dilarang 10 Tabel 2.2 Aturan Pemenggalan Awalan Stemmer Nazief dan Adriani

yang sudah dimodifikasi 12

Tabel 4.1 Output Sistem dari input-an kalimat “Ayah membaca koran Tribun


(6)

DAFTAR GAMBAR

Halaman

Gambar 2.1 Contoh kata melempar 6

Gambar 2.2 Contoh kata alirkan 6

Gambar 2.3 Contoh kata berlompatan 7

Gambar 2.4 Flowchart Proses Stemming 13

Gambar 3.1 Diagram Sistem 18

Gambar 3.2 Flow Chart Sistem 20

Gambar 3.3 Flow Chart Proses Stemming 22

Gambar 3.4 Context Diagram 24

Gambar 3.5 DFD Level 1 25

Gambar 3.6 Rancangan halaman utama 27

Gambar 3.7 Rancangan halaman output 27

Gambar 4.1 Halaman Utama 31

Gambar 4.2 Halaman Input 31

Gambar 4.3 Halaman Output 32