• Tidak ada hasil yang ditemukan

3.5 Perancangan algoritma

Flow chart merupakan langkah awal pembuatan program. Dengan adanya flowchart urutan poses kegiatan menjadi lebih jelas. Jika ada penambahan proses maka dapat dilakukan lebih mudah. Setelah flowchart selesai disusun, selanjutnya

menerjemahkannya ke bentuk program dengan bahasa pemrograman.

3.5.1 Flow chart Porter

Flow chart atau diagram alir pada stemming porter menggambarkan langkah-langkah sistematis dari algoritma itu sendiri. Dimulai dengan menginput kata yang akan di stemm, lalu kata tersebut akan diproses sesuai dengan algoritma porter, seperti yangdi gambarkan pada gambar 3.5 .

Gambar 3.5 Flow Chart Stemmer Porter

Pada flowchart winnowing pertama tentukan gram yang akan di bentuk, lalu bentuk gram dan hash. Setelah hash terbentuk, maka langkah selanjutnya window pun di bentuk. Nilai-nilai dari minimal dari masing-masing window inilah yang akan menjadi nilai fingerprint untuk menghitung nilai kesamaan dokumen tersebut.

Gambar 3.6 Flow chart Winnowing mulai Tentukan gram Bentuk gram Bentuk window Buat hash Bentuk fingerprint selesai

3.5.3 Algoritma Porter Stemmer

Awalan-awalan pada stemmer ditentukan dengan langkah-langkah berikut.

1. Jika awalannya adalah: “di-”, “ke-”, atau “se-” maka tipe awalannya secara berturut-turut adalah “di-”, “ke-”, atau “se-”.

2. Jika awalannya adalah “te-”, “me-”, “be-”, atau “pe-” maka dibutuhkan sebuah proses tambahan untuk menentukan tipe awalannya.

3. Jika dua karakter pertama bukan “di-”, “ke-”, “se-”, “te-”, “be-”, “me-”, atau “pe-” maka berhenti.

4. Jika tipe awalan adalah “none” maka berhenti. Jika tipe awalan adalah bukan “none” maka awalan dapat dilihat pada Tabel 2. Hapus awalan jika ditemukan.

Tabel 3.2 Kombinasi Awalan Akhiran Yang Tidak Diijinkan Awalan Akhiran yang tidak diizinkan

be- -i

di- -an

ke- -i, -kan

me- -an

se- -i, -kan

Tabel 3.3 Cara Menentukan Tipe Awalan Untuk awalan “te-”

Following Characters Tipe

Awalan

“-r-“ “-r-“ - - None

“-r-“ - - ter-luluh

“-r-“ not (vowel or “-r-”)

“-er-“ vowel Ter

“-r-“ not (vowel or “-r-”) “-er-“ not vowel ter- “-r-“ not (vowel or “-r-”)

not “-er-“ - Ter

not (vowel or “-r-”)

“-er-“ Vowel - None

not (vowel or “-r-”)

“-er-“ not vowel - Te

Tabel 3.4 Jenis Awalan Berdasarkan Tipe Awalannya Tipe Awalan Awalan yang harus dihapus

di- di- ke- ke- se- se- te- te- ter- ter- ter-luluh Ter

Untuk mengatasi keterbatasan pada algoritma di atas, maka ditambahkan aturan-aturan dibawah ini:

1. Aturan untuk reduplikasi.

1. Jika kedua kata yang dihubungkan oleh tanda penghubung adalah kata yang sama maka root word adalah bentuk tunggalnya, contoh : “buku-buku” root word-nya adalah “buku”.

2. Kata lain, misalnya “bolak-balik”, “berbalas-balasan, dan ”seolah-olah”. Untuk mendapatkan root word-nya, kedua kata diartikan secara terpisah. Jika keduanya memiliki root word yang sama maka diubah menjadi bentuk tunggal, contoh: kata “berbalas-balasan”, “berbalas” dan “balasan” memiliki root word yang sama yaitu “balas”, maka root word “berbalas-balasan” adalah “balas”. Sebaliknya, pada kata “bolak-balik”, “bolak” dan “balik” memiliki root word yang berbeda, maka root word-nya adalah “bolak-balik”.

2. Tambahan bentuk awalan dan akhiran serta aturannya.

1. Untuk tipe awalan “mem-“, kata yang diawali dengan awalan “memp-” memiliki tipe awalan “mem-”.

2. Tipe awalan “meng-“, kata yang diawali dengan awalan “mengk-” memiliki tipe awalan “meng-”.

Berikut contoh-contoh aturan yang terdapat pada awalan sebagai pembentuk kata dasar.

1. Awalan SE-

1. Se + bungkus = sebungkus

2. Se + nasib = senasib

3. Se + arah = searah

4. Se + ekor = seekor 2. Awalan ME-

Me + vokal (a,i,u,e,o) menjadi sengau “meng”

Contoh : 1. Me + inap = menginap 2. Me + asuh = mengasuh 3. Me + ubah = mengubah 4. Me + ekor = mengekor 5. Me + oplos = mengoplos Me + konsonan b menjadi “mem”

Contoh :

1. Me + beri = member

2. Me + besuk = membesuk Me + konsonan c menjadi “men”

Contoh :

1. Me + cinta = mencinta

Me + konsonan d menjadi “men”

Contoh :

1. Me + didik = mendidik

2. Me + dengkur = mendengkur Me + konsonan g dan h menjadi “meng”

Contoh :

1. Me + gosok = menggosok

2. Me + hukum = menghukum Me + konsonan j menjadi “men”

Contoh :

1. Me + jepit = menjepit

2. Me + jemput = menjemput

Me + konsonan k menjadi “meng” (luluh)

Contoh :

1. Me + kukus = mengukus

2. Me + kupas = mengupas

Contoh :

1. Me + pesona = mempesona

2. Me + pukul = memukul

Me + konsonan s menjadi “meny” (luluh)

Contoh :

1. Me + sapu = menyapu

2. Me + satu = menyatu

Me + konsonan t menjadi “men” (luluh)

Contoh :

1. Me + tanama = menanam

2. Me + tukar = menukar

Me + konsonan (l,m,n,r,w) menjadi tetap “me”

Contoh : 1. Me + lempar = melempar 2. Me + masak = memasak 3. Me + naik = menaik 4. Me + rawat = merawat 5. Me + warna = mewarna 3. Awalan KE-

Contoh :

1. Ke + bawa = kebawa

2. Ke + atas = keatas 4. Awalan PE-

Pe + konsonan (h,g,k) dan vokal menjadi “per”

Contoh :

1. Pe + hitung + an = perhitungan

2. Pe + gelar + an = pergelaran

3. Pe + kantor + = perkantoran Pe + konsonan “t” menjadi “pen” (luluh)

Contoh :

1. Pe + tukar = penukar

2. Pe + tikam = penikam

Pe + konsonan (j,d,c,z) menjadi “pen”

Contoh :

1. Pe + jahit = penjahit

2. Pe + didik = pendidik

3. Pe + cuci = pencuci

Pe + konsonan (b,f,v) menjadi “pem”

Contoh :

1. Pe + beri = pemberi

2. Pe + bunuh = pembunuh

Pe + konsonan “p” menjadi “pem” (luluh)

Contoh :

1. Pe + pikir = pemikir

2. Pe + potong = pemotong

Pe + konsonan “s” menjadi “peny” (luluh)

Contoh :

1. Pe + siram = penyiram

2. Pe + sabar = penyabar

Contoh : 1. Pe + lamar = pelamar 2. Pe + makan = pemakan 3. Pe + nanti = penanti 4. Pe + wangi = pewangi 3.5.4 Algoritma Winowing

Langkah-langkah algoritma Winnowing :

1. Penghapusan karakter-karakter yang tidak relevan (whitespace insensitivity), antara lain spasi atau tanda baca.

2. Pembentukan rangkaian gram dengan ukuran k.

3. Penghitungan nilai hash dari setiap gram.

4. Membagi ke dalam window tertentu.

5. Pemilihan beberapa nilai hash menjadi document fingerprinting.

6. Menentukan prosentase kesamaan antara 2 dokumen dengan persamaan Jaccard Coefficient

Winnowing memiliki rumus sebagai berikut:

Berikut salah satu contoh untuk menghitung nilai fingerprints dari suatu kata;

1. Saya belajar

Hapus spasi = sayabelajar

Ditentukan Gram : 3 , Window : 3

Bentuk Gram  Say | aya | yab | abe | bel | ela | laj | aja | jar Nilai Hash:

H(say | b=2 | k=3)  ascii(s) * 2(31) + ascii(a) * 2(21) + ascii(y) * 2(11)  115 * 22 + 97 * 21 + 121 * 20 = 460 + 194 + 121 = 775 H(aya | b=2 | k=3)  ascii(a) * 2(31) + ascii(y) * 2(21) + ascii(a) * 2(11)

 97 * 22 + 121 * 21 + 97 * 20 = 388 + 242 + 97 = 727 H(yab | b=2 | k=3)  ascii(y) * 2(31) + ascii(a) * 2(21) + ascii(b) * 2(11)

 121 * 22 + 97 * 21 + 98 * 20 = 484 + 194 + 98 = 776 H(abe | b=2 | k=3)  ascii(a) * 2(31) + ascii(b) * 2(21) + ascii(e) * 2(11)

 97 * 22 + 98 * 21 + 101 * 20 = 388 + 196 + 101 = 685 H(bel | b=2 | k=3)  ascii(b) * 2(31) + ascii(e) * 2(21) + ascii(l) * 2(11)

 98 * 22 + 101 * 21 + 108 * 20 = 392 + 202 + 108 = 702 H(ela | b=2 | k=3)  ascii(e) * 2(31) + ascii(l) * 2(21) + ascii(a) * 2(11)

 101 * 22 + 108 * 21 + 97 * 20 = 404 + 216 + 97 = 717 H(laj | b=2 | k=3)  ascii(l) * 2(31) + ascii(a) * 2(21) + ascii(j) * 2(11)

 108 * 22 + 97 * 21 + 106 * 20 = 432 + 194 + 106 = 732 H(aja | b=2 | k=3)  ascii(a) * 2(31) + ascii(j) * 2(21) + ascii(a) * 2(11)

 97 * 22 + 106 * 21 + 97 * 20 = 388 + 212 + 97 = 697 H(jar | b=2 | k=3)  ascii(j) * 2(31) + ascii(a) * 2(21) + ascii(r) * 2(11)

 106 * 22 + 97 * 21 + 114 * 20 = 424 + 194 + 114 = 732 Nilai Hash : 775 | 727 | 776 | 685 | 702 | 717 | 732 | 697 | 732

Maka didapat Window : {775 727 776} {727 776 685} {776 685 702} {685 702 717} {702 717 732} {717 732 697} {732 697 732}

Sehingga diperoleh nilai Fingerprint : [727, 1] [685,2] [702,5] [697,6]

2. Saya bermain

Ditentukan Gram : 3, Window : 3

Bentuk Gram  say | aya | yab | abe | ber | erm | rma | mai | ain Nilai Hash:

H(say | b=2 | k=3)  ascii(s) * 2(31) + ascii(a) * 2(21) + ascii(y) * 2(11)  115 * 22 + 97 * 21 + 121 * 20 = 460 + 194 + 121 = 775 H(aya | b=2 | k=3)  ascii(a) * 2(31) + ascii(y) * 2(21) + ascii(a) * 2(11)

 97 * 22 + 121 * 21 + 97 * 20 = 388 + 242 + 97 = 727 H(yab | b=2 | k=3)  ascii(y) * 2(31) + ascii(a) * 2(21) + ascii(b) * 2(11)

 121 * 22 + 97 * 21 + 98 * 20 = 484 + 194 + 98 = 776 H(abe | b=2 | k=3)  ascii(a) * 2(31) + ascii(b) * 2(21) + ascii(e) * 2(11)

 97 * 22 + 98 * 21 + 101 * 20 = 388 + 196 + 101 = 685 H(ber | b=2 | k=3)  ascii(b) * 2(31) + ascii(e) * 2(21) + ascii(r) * 2(11)

 98 * 22 + 101 * 21 + 114 * 20 = 392 + 202 + 114 = 708 H(erm | b=2 | k=3)  ascii(e) * 2(31) + ascii(r) * 2(21) + ascii(m) * 2(11)

 101 * 22 + 114 * 21 + 109 * 20 = 404 + 228 + 109 = 741 H(rma | b=2 | k=3)  ascii(r) * 2(31) + ascii(m) * 2(21) + ascii(a) * 2(11)

 114 * 22 + 109 * 21 + 97 * 20 = 456 + 218 + 97 = 771 H(mai | b=2 | k=3)  ascii(m) * 2(31) + ascii(a) * 2(21) + ascii(i) * 2(11)

 109 * 22 + 97 * 21 + 105 * 20 = 436 + 194 + 105 = 735 H(ain | b=2 | k=3)  ascii(a) * 2(31) + ascii(i) * 2(21)

97 * 22 + 105 * 21 + 110 * 20 = 388 + 210 + 110 = 708 Nilai Hash : 775 | 727 | 776 | 685 | 708 | 741 | 771 | 735 | 708

Maka didapat Window : {775 727 776} {727 776 685} {776 685 708} {685 708 741} {708 741 771} {741 771 735} {771 735 708}

Dari kalimat pertama dan kedua didapat nilai fingerprint nya sebagai berikut: Fingerprint1 : [727, 1] [685,2][702,5] [697,6]

Fingerprint2 : [727,1] [685,2] [708,5][735,6]

3.5.5 Perhitungan kemiripan

Untuk menghitung kemiripan dari dua dokumen tersebut, diperlukan Jaccard’s Similarity Coefficient, dengan rumus :

│ Aᴖ B│

D(A,B) = ________________ X 100% │ AᴗB│- │ Aᴖ B│

│ Aᴖ B│ jumlah dari fingerprints dokumen 1 dan 2 yang sama,

│ AᴗB│ ialah jumlah fingerprints dokumen 1 dan 2 dikurangi jumlah yang sama.

Sehingga dari rumus bisa dihitung tingkat kemiripan dari kalimat pertama dan kedua ;

Kesamaan : (2 / 6 ) * 100% = 33,3 %

Penggunaan nilai window yang semakin besar dapat mempengaruhi dalam waktu proses, karena semakin besar nilai dari suatu window mempengaruhi proses pembentukan nilai-nilai hashing yang semakin kecil. Selain itu, nilai k-gram dan basis juga mempengaruhi dalam memberikan persentasi kemiripan yang diperoleh sistem itu sendiri.

Dokumen terkait