ANALISIS DAN PERANCANGAN SISTEM
3.3 Analisis Data
Perincian proses pada gambar 3.1 dijelaskan dengan tahapan sebagai berikut :
1. User mengetikan input kalimat : Perangainya yang degil membuat orang segan untuk berteman dengannya.
Kalimat tersebut di-parsing menjadi [Perangainya] [yang] [degil] [membuat] [orang] [segan] [untuk] [berteman] [dengannya].
2. Proses Stopwords
Kata-kata yang telah dibagi menjadi kumpulan array, yakni arr_kata(), program akan memulai proses penghilangan kata-kata yang tidak relevan atau tidak tepat terutama tanda baca dan kata penghubung (stopwords). Program melakukan pendeteksian kata per kata berdasarkan stopword yang ada di database. Kemudian kata-kata tersebut dihapus berdasarkan kamus kata yang berisi kata-kata “tidak
relevan” ( stopwords ). Penghapusan kata tidak relevan dengan kalimat masukan menjadi :
[Perangainya][degil][orang][segan][berteman] Kata yang dihapus antara lain, :
[yang][membuat][untuk] [dengannya] Proses penghapusan stopwords dapat dilihat pada Gambar 3.2.
Gambar 3.2 Proses stopwords
3. Proses Stemming
Setelah selesai proses stopword, maka dilanjutkan proses stemming menggunakan algoritma Porter. Pada penelitian ini, algoritma Porter dimodifikasi agar sesuai dengan imbuhan Bahasa Indonesia (Tala, 2003). Aturan ditambahkan untuk memberikan hasil yang maksimal dan mempermudah proses stemming. Berikut adalah aturan yang ditambahkan dalam algoritma Porter.
1. Kata dasar yang dilekati partikel infleksional yang tidak mempunyai imbuhan apapun. Contoh : masalah.
2. Kata dasar yang dilekati partikel berprefiks yang tidak mempunyai imbuhan apapun. Contoh : menikah.
3. Kata dasar yang dilekati kata ganti milik yang tidak mempunyai imbuhan apapun. Contoh : bangku.
4. Kata dasar yang dilekati kata ganti milik berprefiks yang tidak mempunyai imbuhan apapun. Contoh : bersuku.
5. Kata dasar yang dilekati prefix pertama yang tidak mempunyai imbuhan apapun. Contoh : median.
Mulai
Hapus tanda baca;
Explode ( textfile, “spasi” );
For i=1 to jumlah kata
For j =1 to jumlah stopwords If teks[i] == stopword[j] { Hapus teks[i]; } End for End for Implode (teks,”spasi”); Akhir
6. Kata dasar yang dilekati prefix pertama bersufiks yang berarti kata dasar yang memiliki suku kata pertama awalan dan mempunyai akhiran. Contoh : terapan. 7. Kata dasar yang dilekati prefiks kedua yang tidak mempunyai imbuhan apapun .
Contoh : percaya.
8. Kata dasar yang dilekati prefiks kedua bersufiks yang berarti kata dasar yang memiliki suku pertama awalan kedua dan mempunyai akhiran. Contoh: perasaan. 9. Kata dasar yang dilekati sufiks yang tidak mempunyai imbuhan apapun. Contoh:
pantai.
Keseluruhan proses stemming menggunakan algoritma Porter dapat dilihat pada gambar 3.3.
Gambar 3.3 Algoritma Porter dalam proses stemming
Algoritma Porter dimulai dengan langkah-langkah antara lain :
1. Kata yang distemming mula-mula dicari di kamus data, jika ada kata dasar yang sesuai, maka algoritma berhenti, jika tidak ada, maka lanjutkan ke langkah 2. 2. Cek aturan tambahan yang bukan merupakan imbuhan Bahasa Indonesia, jika ada
yang sesuai, maka algoritma berhenti. Jika tidak ada, maka lanjutkan ke langkah 3. 3. Hilangkan partikel (“-lah”, “-kah”,” –tah”,” –pun”).
Mulai
Cek kata dasar;
If kata = kata dasar then return kata;
Else
If kata mengandung partikel then Hapus partikel;
If kata mengandung kata ganti milik then Hapus kata ganti milik;
If kata mengandung kata awalan pertama then Hapus kata awalan pertama;
If kata mengandung kata awalan kedua then Hapus kata awalan kedua;
If kata mengandung akhiran then Hapus akhiran;
4. Hilangkan kata ganti kepemilikan (“-ku”, “-mu”, “-nya” ).
5. Hilangkan awalan pertama (“meng-“, “meny-“, “men-“, “mem-“, “me-“, “peng-“,
“peny-“, “pen-“, “pem-“, “di-“, “ter-“, “ke-“ ). Jika tidak terdapat awalan pertama pada kata, maka lanjutkan ke langkah 7. Jika ada, maka lanjutkan ke langkah 6. 6. Hilangkan awalan kedua ( “ber-“, “bel-“, “be-“, “per-“, “pel-“, “pe-“ ). Algoritma
akan berhenti jika sebelumnya sudah melalui langkah 7 dan masih tidak menemukan adanya awalan kedua pada kata. Algoritma akan menggangap kata yang dimasukkan sebagai kata dasar.
7. Hilangkan akhiran ( “-kan”, “-an”, “-i” ). Jika tidak terdapat akhiran pada kata, maka lanjutkan ke langkah 6.
Berdasarkan kata yang telah dihapus melalui proses stopwords, maka sistem memulai stemming menggunakan algoritma Porter untuk bahasa Indonesia. Proses yang terjadi sebagai berikut :
[perangainya] di-stemming, kamus kata tidak mendapati adanya kata dasar yang cocok dengan kata [perangainya] ,maka akan melalui tahapan berikut :
1. Hapus partikel ( -lah, -kah, -tah, -pun ), tidak ada kecocokan partikel dengan kata [perangainya], maka dilanjutkan ke langkah 2.
2. Hapus kata ganti kepunyaan(-ku, -mu, -nya), ada kecocokan kata ganti kepunyaan dengan kata [perangainya], maka dihapus menjadi [perangai]. 3. Hapus awalan pertama (First Order Derivational Prefix ) (meng-, meny-,
men-, me-, peng- ,dll ), tidak ada kecocokan awalan pertama dengan kata [perangai], maka dilanjutkan ke langkah 4.
4. Hapus akhiran (Derivation Suffix) ( -kan, -an, -i ), tidak ada kecocokan akhiran dengan kata [perangai], maka [perangai] sudah menjadi kata dasar.
[degil] di-stemming, maka kata [degil] akan dikembalikan menjadi kata dasar.
[orang] di-stemming, maka kata [orang] akan dikembalikan menjadi kata dasar.
[segan] di-stemming, maka kata [segan] akan dikembalikan menjadi kata dasar.
[berteman] di-stemming, kamus kata tidak mendapati adanya kata dasar yang cocok dengan kata [berteman] ,maka akan melalui tahapan berikut :
1. Hapus partikel ( -lah, -kah, -tah, -pun ), tidak ada kecocokan partikel dengan kata [berteman], maka dilanjutkan ke langkah 2.
2. Hapus kata ganti kepunyaan(-ku, -mu, -nya), tidak ada kecocokan kata ganti kepunyaan dengan kata [berteman], maka dilanjutkan ke langkah 3.
3. Hapus awalan pertama (First Order Derivational Prefix ) (meng-, meny-, men-, me-, peng- ,dll ), tidak ada kecocokan awalan pertama dengan kata [berteman], maka dilanjutkan ke langkah 4.
4. Hapus awalan kedua (Second Order Derivational Prefix ) (ber-, bel-, be-, per-, pel-, pe- ), pemenggalan awalan “ber-“ sesuai dengan [berteman], maka dihapus menjadi [teman].
5. Hapus akhiran (Derivation Suffix) ( -kan, -an, -i ), ), tidak ada kecocokan akhiran dengan kata [teman], maka [teman] sudah menjadi kata dasar.
4. Pencocokan Kata dan Sinonim Kata
Menurut Murad,et al(2007), pencarian relevansi kata yang satu dengan kata yang lain tidak memerlukan pencarian sinonim kata karena pencarian dilakukan dengan kemiripan kata yang diubah ke dalam fuzzy set. Pada penelitian ini, pencocokan langsung ditentukan berdasarkan makna kata nya itu sendiri. Kata yang telah di-stem dilanjutkan dengan mencari persamaan kata ( sinonim ) yang ada di dalam kamus sinonim kata. Tiap arr_kata[] (kata hasil stemming) dilakukan scanning dan hasil pencocokan persamaan kata akan dimuat ke dalam array baru,yaitu arr_Snmkata[]. Apabila hasil pencocokan terdapat lebih dari satu makna kata, maka program tetap akan memuat sinonim kata tersebut ke dalam arr_Snmkata[].
Kumpulan kata dasar [perangai][degil][orang][segan][teman] akan dicari persamaan kata pada kamus data yang memiliki makna serupa.
[perangai] memiliki persamaan makna kata dengan [perilaku], maka dibentuk arr_Snmkata[i]= [perilaku].
Fase Pre-processing
Fase Pencarian
Algoritma Two Sliding Windows Algoritma Berry-Ravindran
[degil] memiliki persamaan makna kata dengan [keras kepala], maka dibentuk arr_Snmkata[i+1] = [keras kepala].
[orang] memiliki persamaan makna kata dengan [manusia], maka dibentuk arr_Snmkata[i+2] = [manusia].
[segan] memiliki persamaan makna kata dengan [sungkan] dan [malu], maka dibentuk arr_Snmkata[i+3] = [sungkan] dan arr_Snmkata[i+4] = [malu].
[teman] memiliki persamaan makna kata dengan [sahabat] dan [rekan], maka dibentuk arr_Snmkata[i+5] = [sahabat] dan arr_Snmkata[i+6] = [rekan].
5. Pencarian teks
Pada tahapan pencarian teks digunakan Algoritma Two Sliding Windows (TSW) yang mencakupi dua proses utama yaitu fase pre-processing dan fase pencarian. Pada dasarnya, algoritma TSW melakukan pencarian dari dua sisi ( windows ) yaitu sisi kiri ( left window ) dan sisi kanan( right window ) secara parallel( Hudaib et al, 2008 ). Fase pre-processing menggunakan algoritma Berry-Ravindran untuk menentukan nilai shift yang akan digunakan pada saat fase pencarian. Proses keseluruhan pencarian teks dapat dilihat pada gambar 3.4.
Gambar 3.4 Proses pencarian teks Pengecekan bagian kiri dan
kanan teks START Kata dan sinonim kata Get ( shiftl ); Get ( shiftr ); END Menentukan karakter a dan b Database dokumen Ada di database dokumen ? Ya Tidak
a b
Fase Pre-Processing
Fase pre-processing menggunakan dua array yaitu nextl dan nextr. Nilai dari kedua array tersebut ditentukan oleh algoritma bad character Berry Ravindran (BR). Nilai dari kedua array tersebut akan dimasukkan ke dalam masing-masing variable shiftl dan shiftr. Kata-kata dasar [perangai] [degil] [orang] [segan] [teman] dan persamaan kata [perilaku] [keras kepala] [manusia] [sungkan] [malu] [sahabat][rekan] melalui proses penentuan nilai kedua shiftsebagai berikut : Variabel shiftl
Langkah – langkah pencarian nilai shiftl dijelaskan sebagai berikut :
1. Apabila pencarian dimulai pertama kalinya, maka nilai variabel shiftl adalah 0. Jika tidak, maka nilai awal shiftl = m+2 dimana m merupakan jumlah pola ( pattern ) yang ingin dicari.
2. Penetapan nilai a dan b yang merupakan dua karakter berurutan di hitung setelah posisi pola, antara lain :
Dimana, P = Pattern ; m = banyak pola yang dicari ; n = nilai tengah dari banyak pola yang dicari.
Pada contoh sebelumnya, berarti :
Kata “perangai” memiliki nilai a = “k” ; b = “a”
Kata “degil” memiliki nilai a = “s” ; b = “a”
Kata “orang” memiliki nilai a = “s” ; b = “a” Kata “segan” memiliki nilai a = “s” ; b = “a” Kata “teman” memiliki nilai a = “s” ; b = “a”
Proses penetapan nilai a dan b dapat dilihat pada gambar 3.5.
p e r a n g a i b e r d a s a r k a n a n ... d e g i l b e r d a s a r k a n a n ... a = P[m+1] b = P[m+2] Pattern Text Pattern Text
shiftl a, b = � { − �+ + � [ − ] = � [�][� + ] = � [ ] = ℎ �� } o r a n g b e r d a s a r k a n a n ... s e g a n b e r d a s a r k a n a n ... t e m a n b e r d a s a r k a n a n ...
Gambar 3.5 Ilustrasi posisi penentuan letak pada bagian kiri teks
3. Lakukan loop yang dimulai dari awal sampai akhir karakter yang sebanyak m- 2.
4. Pada saat terjadi looping, algoritma menghitung nilai array nextl yang akan dimasukkan kedalam variabel shiftl. Apabila hasil array nextl lebih dari satu nilai, maka algoritma memilih nilai terkecil dari hasil tersebut. Proses perhitungan nilai shiftl dapat dilihat pada gambar 3.5.
Gambar 3.6 Aturan Operasi Hitung Nilai shift kiri
Berdasarkan contoh sebelumnya, maka :
nilai shiftl(a,b) pada kata “perangai” = (“k”,”a”) = m + 2 = 8 + 2 = 10. nilai shiftl(a,b) pada kata “degil” = (“s”,”a”) = m + 2 = 5 + 2 = 7.
nilai shiftl(a,b) pada kata “orang” = (“s”,”a”) = m + 2 = 5 + 2 = 7.
nilai shiftl(a,b) pada kata “segan” = (“s”,”a”) = m + 2 = 5 + 2 = 7. nilai shiftl(a,b) pada kata “teman“ = (“s”,”a”) = m + 2 = 5 + 2 = 7.
Hal ini berarti bahwa algoritma melakukan penggeseran pada kata “perangai”
sebanyak 7 langkah ke kanan dan kata “degil”, “orang”, “segan”, “teman” sebanyak
7 langkah ke kanan. Penentuan nilai shiftl selanjutnya ditentukan oleh dua karakter berurutan (a,b) pada teks.
Pattern Text Pattern Text Pattern Text
a b
Variabel shiftr
Langkah – langkah penentuan nilai shiftr dijelaskan sebagai berikut :
1. Apabila pencarian dimulai pertama kalinya, maka nilai variabel shiftl adalah 0. Jika tidak, maka nilai awal shiftl = m+2 dimana m merupakan jumlah pola ( pattern ) yang ingin dicari.
2. Penetapan nilai a dan b seperti pada gambar 3.6 yang merupakan dua karakter berurutan di hitung setelah pola tersebut, antara lain :
Dimana, P = Pattern ; m = banyak pola yang dicari ; n = nilai tengah dari banyak pola yang dicari.
Pada contoh diatas, berarti :
Kata “perangai” memiliki nilai a = “a” ; b = “a” Kata “degil” memiliki nilai a = “g” ; b = “o” Kata “orang” memiliki nilai a = “g” ; b = “o” Kata “segan” memiliki nilai a = “g” ; b = “o” Kata “teman” memiliki nilai a = “g” ; b= “o”
Proses penetapan nilai a dan b dapat dilihat pada gambar 3.7.
a n g a i b e d a a l g o r i t m a ... r e p s e g a n b e d a a l g o r i t m a ... d e g i l b e d a a l g o r i t m a ... o r a n g b e d a a l g o r i t m a ... Pattern Text a = P[n-m-1] b = P[n-m-2]
shiftr a, b = � { + − − − � + � [ − ] = � [�][� + ] = � [ ] = ℎ �� } t e m a n b e d a a l g o r i t m a ...
Gambar 3.7 Ilustrasi posisi penentuan letak pada bagian kanan teks
3. Lakukan loop yang dimulai dari awal sampai akhir karakter sebanyak m-2. 4. Pada saat terjadi looping, algoritma menghitung nilai array nextl yang akan
dimasukkan kedalam variabel shiftl. Apabila hasil array nextl lebih dari satu nilai, maka algoritma memilih nilai terkecil dari hasil tersebut. Proses perhitungan nilai shiftl pada gambar 3.8 sebagai berikut.
Gambar 3.8 Aturan Operasi Hitung Nilai shift kanan
Berdasarkan contoh sebelumnya, maka
nilai shiftr(a,b) pada kata “perangai” = shiftr (“a”,”a”) = m + 2 = 8 + 2 = 10 nilai shiftr(a,b) pada kata “degil” = shiftr (“g”,”o”) = m + 2 = 5 + 2 = 7 nilai shiftr(a,b) pada kata “orang” = shiftr (“g”,”o”) = m + 1 = 5 + 1 = 6 nilai shiftr(a,b) pada kata “segan” = shiftr (“g”,”o”) = m + 2 = 5 + 2 = 7 nilai shiftr(a,b) pada kata “teman” = shiftr (“g”,”o”) = m + 2 = 5 + 2 = 7
Hal ini berarti bahwa algoritma akan melakukan penggeseran kata “orang”
sebanyak 9 karakter ke kiri dan kata”segan” “perangai”, “degil”, “teman”
sebanyak 10 karakter ke kiri. Penentuan nilai shiftr selanjutnya ditentukan oleh dua karakter berurutan (a,b) pada teks. Keseluruhan proses penentuan nilai shift dapat dilihat pada gambar 3.8 sebagai berikut.
Gambar 3.9 Pseudocode Pre-processing bad character shift Algoritma Berry- Ravindran. Sumber : (Hudaib et al, 2008)
Fase Pencarian
Apabila nilai shiftl dan shiftr sudah didapatkan dari fase pre-processing, maka program akan memulai fase pencarian menggunakan algoritma Two Sliding Windows. Proses pencarian kata yang sesuai dengan dokumen adalah sebagai berikut :
1. Pencocokan string dari sebelah kiri teks dimulai dari posisi akhir string sampai posisi awal string. Jika terjadi kecocokan, maka algoritma akan berhenti. Jika tidak, maka lanjutkan ke langkah 3.
2. Pencocokan string dari sebelah kanan teks dimulai dari posisi awal string sampai posisi akhir string. Jika terjadi kecocokan, maka algoritma akan berhenti. Jika tidak, maka lanjutkan ke langkah 3.
3. Penentuan nilai shift kiri dan kanan dari algoritma BR.
4. Menggeser pattern sesuai nilai shift yang didapat dari langkah 3. Pada bagian kiri akan menggeser ke sebelah kanan dan bagian kanan menggeser ke sebelah kiri.
Seperti contoh sebelumnya,
Kata “perangai” dengan nilai shiftl = 10 ; shiftr = 10.
Begin
shiftl=shiftr=m+2
for (each character i=0 ….. i=m-2)
( Nextl[i] = m-I, nextr[i] = m-((m-2)-i)) if P[m-1] = a { shiftl=1, shiftr=m+1 } else if P[0] = b { shiftl = m+1, shiftr =1 }
else if P[i][i+1] = ab { shiftl=nextl[i], shiftr=nextr[i] } End
1 2 3 4 5 6 7 8 9 10 1 2 3 4 5 6 7 8 9 10
1 2 3 4 5 6 7
1 2 3 4 5 6 7