Hash teks[i] = Hash pattern Ya Substring teks[i ... II.pdf · mempersiapkan teks agar dapat...
Transcript of Hash teks[i] = Hash pattern Ya Substring teks[i ... II.pdf · mempersiapkan teks agar dapat...
9
BAB II
TINJAUAN PUSTAKA
2.1 Algoritma Rabin-Karp
Algoritma Rabin-Karp adalah suatu algoritma pencarian string yang
diciptakan Michael O. Rabin dan Richard M. Karp pada tahun 1987 yang
menggunakan fungsi hashing untuk menemukan pola berupa substring di dalam
sebuah teks. Algoritma ini jarang digunakan untuk melakukan pencarian kata
tunggal, namun sangat efektif apabila digunakan untuk pencarian lebih dari satu
kata (Atmopawiro, 2006). Dalam implementasinya Algoritma Rabin Karp
memiliki tahapan – tahapan dalam yang harus dilalui seperti yang digambarkan
pada flowchart pada Gambar 2.1 berikut.
MULAI
Teks : stringPattern : string
i=0
Menghitung Nilai Hash
i=Hash teks. length
Nilai String Sama Bertambah
Hash teks[i] = Hash pattern
Ya
SELESAI
Membentuk K-Gram
Substring teks : arrayPattern
Hash teks : arrayHash pattern :
string
Substring teks[i] = Substring pattern
Ya
Ya
Hitung similarity pattern dan teks
Tidak
Tidak
Tidak
Gambar 2.1 Flowchart Algoritma Rabin-Karp
10
Dalam algoritma Rabin-Karp, ada beberapa tahap yang harus dilalui dalam
implementasi algoritma tersebut.
1) Preprocessing
Tahap ini adalah tahap dimana dilakukan pemrosesan awal untuk
mempersiapkan teks agar dapat digunakan dalam proses selanjutnya. Teks akan
diubah ke dalam bentuk k-grams, dimana dalam hal ini teks akan dipotong – potong
dengan panjang K dari sebuah teks yang secara kontinuitas dibaca dari awal
dokumen hingga akhir dari dokumen.
2) Rolling Hash
Fungsi yang digunakan untuk menghasilkan nilai hash dari rangkaian gram
dalam Algoritma Rabin-Karp adalah dengan menggunakan fungsi rolling hash.
Fungsi hash 𝐻(𝐶1…𝐶𝑘) didefinisikan sebagai berikut,
𝑐1 ∗ 𝑏(𝑘−1) + 𝑐2 ∗ 𝑏(𝑘−2) + ⋯ + 𝑐(𝑘−1) ∗ 𝑏𝑘 + 𝑐𝑘…………………….. (2.1)
Keterangan :
c : nilai ASCII karakter
b : basis (bilangan prima)
k : banyak karakter
Metode hashing digunakan untuk mempercepat pencarian atau pencocokan
suatu string. Apabila tidak di-hash, pencarian akan dilakukan karakter per karakter.
Namun pencarian akan menjadi lebih mangkus setelah di-hash karena hanya akan
membandingkan empat digit angka untuk mengetahui kesamaan suatu substring.
Berikut ini merupakan contoh penghitungan rolling hash dengan k-grams
= 6 dan basis = 101:
Diketahui
Teks : abracadabra
ASCII : a = 97, b = 98, r = 114
Maka
hash(“abr”) = ( 97 x 1012 ) + ( 98 x 1011 ) + ( 114 x 1010 ) = 999.509
Untuk menghitung nilai hash dari substring selanjutnya, dapat dilakukan
dengan mengurangi hash dengan nilai dari karakter yang hilang kemudian
11
mengalikannya dengan basis dan menambahkannya dengan nilai karakter yang
ditambahkan.
hash(“bra”) = [101 x ( 999.509 – (97 x 1012 ))] + ( 97 x 1010 ) = 1.011.309
3) Pencocokan
Proses pencocokan dalam Algoritma Rabin-Karp dilakukan dengan
menggunakan sebuah teorema yaitu:
Sebuah stringA identik dengan stringB, jika (syarat perlu) stringA memliki
hash key yang sama dengan hash key yang dimiliki oleh stringB
4) Pengukuran Nilai Kemiripan
Mengukur similarity (kemiripan) dan jarak antara dua entitas informasi
adalah syarat inti pada semua kasus penemuan informasi, seperti pada Information
Retrieval dan Data Mining yang kemudian dikembangkan dalam bentuk perangkat
lunak, salah satunya adalah sistem deteksi kesamaan (Salmusih, 2013). Penggunaan
ukuran similarity yang tepat tidak hanya meningkatkan kualitas pilihan informasi
tetapi juga membantu mengurangi waktu dan biaya proses sehingga memperangkat
lunakkan Dice's Similarity Coefficient dalam penghitungan nilai similarity yang
menggunakan pendekatan k-gram.
𝑆 = 𝐾 × 𝐶
(𝐴+𝐵)……………………………………………..(2.2)
Dimana S adalah nilai similarity, A dan B adalah jumlah dari kumpulan k-
grams dalam teks 1 dan teks 2. C adalah jumlah dari k-grams yang sama dari teks
yang dibandingkan. Berikut adalah contoh dari penggunaan rumus tersebut.
Terdapat dua buah dokumen teks (dok A dan dok B) dengan nilai k-gram masing-
masing dokumen secara bertutur-turut adalah 2608 dan 3040, sedangkan nilai k-
gram yang sama adalah sebesar 1203. Maka hasil nilai dari kemiripan kedua
dokumen tersebut adalah :
𝑆 = 𝐾 × 𝐶
(𝐴 + 𝐵)=
2 × 1203
(2608 + 3040)
= 2406
5648= 0,4259 𝑥 100% = 42,59%
12
2.2 Peningkatan Performa Algoritma Rabin-Karp
Pada Algoritma Rabin-Karp spurious hit merupakan beban tambahan bagi
algoritma yang akan meningkatkan waktu proses. Hal ini dikarenakan algoritma
harus membandingkan pola terhadap teks yang hasil modulonya sama tetapi nilai
hashnya berbeda. Untuk menghindari pencocokan yang tidak perlu, Chillar dan
Kochar (2008) memberikan solusi untuk tidak hanya membandingkan sisa hasil
bagi, tetapi membandingkan hasil baginya juga.
Jadi, successful hit harus memenuhi dua syarat, yaitu nilai sisa hasil bagi
dan nilai hasil baginya harus sama. Selebihnya adalah unsuccessful hit tanpa perlu
melakukan pencocokan lagi. Hal ini berarti tidak ada pemborosan waktu untuk
mengecek spurious hit.
Berikut merupakan flowchart dari Algoritma Rabin-Karp yang telah
dimodifikasi:
MULAI
Teks : stringPattern : string
i=0
Menghitung Nilai Hash
i=Hash teks. length
Nilai String Sama Bertambah
Hash teks[mod][i] = Hash mod pattern && Hash teks[div][i] = Hash
div patternYa
SELESAI
Membentuk K-Gram
Substring teks : arrayPattern
Hash teks : arrayHash mod pattern: stringHash div pattern : string
Ya
Hitung similarity pattern dan teks
Tidak
Tidak
Gambar 2.2 Flowchart Algoritma Rabin-Karp varian Chillar - Kochar
13
2.3 Text Preprocessing
Melihat dari kemungkinan berbagai macam bentuk struktur data teks yang
akan diproses, maka sebelum dilakukannya penghitungan kesamaan teks perlu
dilakukan beberapa tahap awal yang bertujuan untuk agar teks dapat diubah
menjadi lebih terstruktur dan menghilangkan noise pada dokumen. Proses
preprocessing tersebut meliputi case folding, tokenizing, filtering, dan stemming.
Gambar 2.3 berikut merupakan gambaran dari tahapan – tahapan text preprocessing
Gambar 2.3 Tahapan Text Preprocessing
2.3.1 Case Folding
Case folding merupakan proses pertama dari rangkaian preprocessing
dokumen. Dalam proses ini akan dilakukan perubahan pada kata – kata dalam
dokumen menjadi huruf kecil (a sampai z). Gambar 2.4 menunjukan flowchart dari
proses case folding.
14
MULAI
Teks : array of chari=0
Teks[i] = lower case( Teks[i] )
i=Teks.length
Tidak
SELESAI
Ya
Gambar 2.4 Flowchart Case Folding
Berikut ini merupakan contoh dari proses case folding :
[1] Input : Rabin Karp adalah algoritma pencarian kata yang mencari sebuah
pola dalam sebuah teks.
[2] Output : rabin karp adalah algoritma pencarian kata yang mencari sebuah
pola dalam sebuah teks.
2.3.2 Tokenizing
Tokenizing merupakan tahapan dimana dilakukannya pemotongan terhadap
string input berdasarkan atas delimiter yang telah ditentukan. Karakter selain huruf
akan dianggap sebagai delimiter dan akan dihilangkan atau dihapus untuk proses
mendapat kata – kata penyusun teks. Dari proses ini akan dihasilkan kata – kata
penyusun string / teks atau yang sering disebut token/term.
15
MULAI
Teks : array of charDelimiter : array of char
stringKata : array of string
i=0, j=0Count = 0
Teks[i] = Delimiter[j]
i=Teks.length
Tidak
j=0Kata[i] = Substring
Substring =
SELESAI
Ya
Kata
Ya
j++Substring =
Substring + Teks[i]
Tidak
Gambar 2.5 Flowchart Tokenizing
Berikut ini merupakan contoh dari proses tokenizing :
[1] Input : rabin karp adalah algoritma pencarian kata yang mencari sebuah
pola dalam sebuah teks.
[2] Output : {rabin} {karp} {adalah} {algoritma} {pencarian} {kata} {yang}
{mencari} {sebuah} {pola} {dalam} {sebuah} {teks}
2.3.3 Filtering
Filtering merupakan tahap pengambilan kata – kata penting dari hasil
tokenizing string. Filtering dilakukan dengan membuang kata – kata yang telah
terdaftar ke dalam stopword/stoplist. Stopword adalah kata-kata yang sering
muncul dalam teks dalam jumlah besar dan dianggap tidak memiliki makna
penting.
16
MULAI
Kata : array of string Stop word : array of string
i : 0j : 0
Kata[i] = Stop word [j]
j++
Tidak
i = Kata.length
Ya
SELESAI
Hapus Kata[i]Ya
Tidaki++j=0
Kata
Gambar 2.6 Flowchart Filtering
Berikut ini merupakan contoh dari proses filtering :
[1] Input : {rabin} {karp} {adalah} {algoritma} {pencarian} {kata} {yang}
{mencari} {sebuah} {pola} {dalam} {sebuah} {teks}
[2] Output : {rabin} {karp} {algoritma} {pencarian} {kata} {mencari} {pola}
{teks}
2.3.4 Stemming
Stemming merupakan proses yang dilakukan untuk mendapatkan kata dasar
dari suatu kata. Stemming Nazief – Adriani merupakan suatu algoritma stemming
yang dibuat oleh Bobby Nazief dan Mirna Adriani.
17
MULAI
Kata : String
Apakah kata terdapat di kamus kata dasar
SELESAI
Hapus Inflection Suffixes
Tidak
Apakah kata terdapat di kamus kata dasar
Hapus Derivation Suffixes
Tidak
Apakah kata terdapat di kamus kata dasar
Hapus Derivation Prefix
Tidak
Ya
Ya
Ya
Gambar 2. 7 Flowchart Stemming Nazief – Adriani
Pencarian kata dasar dilakukan dengan menghilangkan semua imbuhan dari
kata, baik itu awalan (prefiks), sisipan (infiks), maupun akhiran (suffiks).
Berikut ini merupakan contoh dari proses stemming :
[1] Input : {rabin} {karp} {algoritma} {pencarian} {kata} {mencari} {pola}
{teks}
[2] Output : {rabin} {karp} {algoritma} {cari} {kata} {cari} {pola} {teks}
2.4 Metode Pengembangan Waterfall
Model proses mencakup kegiatan yang merupakan bagian dari proses
perangkat lunak, produk perangkat lunak, dan peran orang yang terlibat dalam
18
rekayasa perangkat lunak. Model proses Waterfall merupakan suatu model proses
klasik yang bersifat sistematis, berurutan dari satu tahap ke tahap lain dalam
membangun perangkat lunak (Sommerville, 2011).
Model proses Waterfall memiliki tahapan - tahapan dalam prosesnya, setiap
tahapan tersebut harus diselesaikan sebelum berlanjut ke tahap berikutnya. Berikut
tahapan yang ada dalam Waterfall adalah (Sommerville, 2011):
Gambar 2.8 Model proses waterfall
Berikut merupakan tahapan-tahapan dalam model proses Waterfall:
1) Analisis kebutuhan dan definisi (requirements analysis and definition)
Layanan sistem, kendala, dan tujuan yang ditetapkan dengan berkonsultasi
dengan pengguna sistem. Kemudian didefinisikan secara rinci dan dijadikan
sebagai spesifikasi sistem.
2) Design sistem dan perangkat lunak (system and software design)
Software desain meliputi mengidentifikasi dan menggambarkan abstraksi
sistem perangkat lunak yang mendasar dan hubungan mereka.
3) Implementasi dan pengujian unit (implementation and unit testing)
Selama tahap ini, perancangan perangkat lunak direalisasikan sebagai
serangkaian program atau unit program. Unit pengujian melibatkan
verifikasi bahwa setiap unit memenuhi spesifikasinya.
4) Integrasi dan pengujian sistem (integration and system testing)
Tahapan dimana unit program individu atau program yang terintegrasi diuji
sebagai sistem yang lengkap untuk memastikan bahwa persyaratan
19
perangkat lunak telah dipenuhi. Setelah pengujian, sistem perangkat lunak
disampaikan kepada pengguna.
5) Pengoprasian dan maintenance (operation and maintenance)
Biasanya tahap ini merupakan tahapan dengan masa waktu paling lama.
Pemeliharaan meliputi kesalahan mengoreksi yang tidak ditemukan pada
awal tahap siklus hidup, meningkatkan implementasi unit sistem dan
meningkatkan pelayanan sistem sebagai kebutuhan baru ditemukan.
Model ini memiliki keunggulan dalam kemudahan pengaplikasiannya,
selain itu kelebihan lain yang dimiliki oleh model proses Waterfall adalah ketika
seluruh kebutuhan sistem dapat didefinisikan secara lengkap, eksplisit, dan benar
di awal proyek, maka fase - fase dalam pembangunan sistem akan dapat berjalan
dengan baik. Sedangkan kekurangan utama dari model proses Waterfall ini adalah
kesulitan dalam mengakomodasi perubahan setelah proses dijalani. Fase
sebelumnya harus lengkap dan telah selesai sebelum dapat lanjut mengerjakan fase
berikutnya.
2.5 Pengujian Sistem
Terdapat 4 jenis pengujian yang dapat dilakukan pada suatu perangkat
lunak, yaitu static testing, blackbox testing, whitebox testing, performance testing
(Everett, 2007).
2.5.1 Static Testing
Sekitar 85% kecacatan perangkat lunak bisa dilihat pada fase design dari
pengembangan (Software Testing, Testing Across the Entire Software Development
Life Cycle), sehingga diperlukan sebuah pengujian pada fase design tersebut untuk
mengurangi cacat yang ada.
Pengujian dilakukan dengan cara menguji dokumen – dokumen pendukung
sistem, hal ini dilaksanakan dikarenakan proses dokumentasi telah dimulai dan
dibuat dari saat pengembangan dimulai, berlanjut, bahkan berakhir. Pengujian
dokumentasi dapat dilakukan dengan beberapa cara, diantaranya adalah dilakukan
dengan inspeksi, presentasi, walktrough, dan pengecekkan. Teknik – teknik tersebut
akan menguji kebenaran dan kelengkapan dari suatu dokumen. Dan apabila
20
ditemukkan kekurangan atau kecacatan pada dokumen, maka dokumen tersebut
harus segera dikoreksi atau dibenahi.
2.5.2 Blackbox Testing
Blackbox Testing merupakan test yang dapat dilakukan walaupun tester
tidak memiliki source code dari software yang diuji, dan hanya yang software yang
bisa dijalankan. Testing blackbox dilakukan dengan menjalankan aplikasi dan
melakukan apa yang bisa dikerjakan oleh aplikasi, apa yang dilakukan dan
bagaimana hasil yang diberikan aplikasi adalah hal yang diteliti. Hal penting yang
harus dilakukan pada testing ini adalah, apakah tester mengetahui hasil (benar) apa
yang diharapkan dan apakah tester melakukan test dengan benar. Dari kedua hal
tersebut maka bisa dilihat apabila terjadi kesalahan, apakah kesalah tersebut
dikarenakan kesalahan aplikasi atau kesalahan implementasi.
2.5.3 Whitebox Testing
Whitebox testing merupakan sebuah pengujian yang dapat dilakukan saat
user atau tester memiliki source code dari software yang akan dilakukan test.
Testing whitebox dapat dilakukan oleh developer dengan cara mengetest tiap line
dalam code satu-persatu. Namun Hal ini akan memakan banyak waktu untuk
mengetest masing-masing line, terutama jika line mencapai ribuan hingga puluhan
ribu, sehingga developer terkadang harus membuat rencana testing yang mengetest
kebanyakan source code secara metodis. Testing seperti inipun lebih condong ke
pengujian logika karena dominannya analisis jalur logika bagaimana input yang
dimasukkan di proses oleh perangkat lunak menjadi hasil-hasil yang akan diproses
hingga menjadi hasil yang diinginkan.
Salah satu metode yang digunakan dalam White Box Testing adalah
pengujian basis path testing atau disebut dengan Cylomatic Complexity. Dalam
pelaksanaan White Box Testing, berikut langkah yang dilakukan (Pressman, 2010):
a. Menggambar flowgraph yang ditransfer oleh flowchart.
b. Menghitung Cylomatic Complexity V (G) untuk flowgraph yang telah
dibuat. V(G) untuk flowgraph dapat dihitung dengan rumus:
21
V(G) = E – N + 2
Keterangan:
E = Jumlah edge pada flowrgaph
N = Jumlah node pada flowrgaph
c. Menentukan jalur pengujian dari flowgraph yang berjumlah sesuai
dengan Cyclomatic Complexity yang telah ditentukan.
Cyclomatic complexity yang tinggi menunjukkan prosedur kompleks yang
sulit untuk dipahami, diuji dan dipelihara. Ada hubungan antara cyclomatic
complexity dan resiko dalam suatu prosedur. Berikut hubungan antara cyclomatic
complexity dan resiko dalam suatu prosedur.
Tabel 2.1 Hubungan Cyclomatic Complexity dan resiko
Cyclomatic Complexity Evaluasi Resiko
1-10 Sebuah program sederhana, tanpa banyak resiko
11-20 Agak kompleks, resiko sedang
21-50 Kompleks, program resiko tinggi
Lebih dari 50 Program belum diuji (resiko sangat tinggi)
2.6 Tinjauan Studi
Ada beberapa penelitian terkait yang pernah dilakukan mengenai sistem
penilaian jawaban esai otomatis dan Algoritma Rabin-Karp, antara lain yaitu:
1) Automatic Essay Grading System Menggunakan Metode Latent
Semantic Analysis (Bayu P, Baizal, dan Firdaus, 2011)
Penelitian ini memiliki tujuan untuk membangun serta menganalisis
kelayakan Automatic Essay Grading dengan mengimplementasikan Latent
Semantic Analysis (LSA). Pada jurnal penilitian ini peniliti juga melakukan analisis
mengenai seberapa besar pengaruh stemming pada proses essay grading bahasa
Indonesia pada penerapan Latent Semantic Analysis. Pada penilitian ini peniliti
menggunakan LSA dikarenakan LSA telah digunakan pada IEA dan memiliki
kecocokan dengan human rater serta dianggap reliable dalam memberikan skor
yang sama dengan human rater. Dalam penelitian ini peniliti menyatakan bahwa
tingkat akurasi rata – rata dari penilaian yang oleh sistem tidak tinggi, akurasi
22
berada di kisaran 45,03% dan 50,55%. Hal ini dikarenakan beberapa hal, seperti
perbedaan panjang jawaban dengan kunci jawaban, persebaran term pada kalimat
jawaban serta ketidakmampuan sistem untuk mendeteksi adanya maksud jawaban
yang sama maupun sinonim. Selain itu dinyatakan pula bahwa proses stemming
mampu menambah keakuratan dalam penilaian dengan rata – rata nilai perbedaan
0,49% dan 0,63%.
2) A Comparison of Rabin Karp and Semantic-Based Plagiarism Detection
(Supriyanto, Rakasiwi, & Syukur, 2012)
Pada penilitian ini dilakukan perbandingan dua buah algoritma yaitu Rabin-
Karp dan LSA. Penelitian ini bertujuan untuk membandingkan performa kedua
algoritma tersebut dalam mendeteksi plagiarisme pada dokumen. Di dalam
penilitian ini dihasilkan suatu kesimpulan bahwa performa Algoritma Rabin-Karp
dalam pendeteksian plagiarisme melebihi performa dari Algoritma LSA.
3) Deteksi Plagiat Dokumen menggunakan Algoritma Rabin Karp
(Firdaus, 2008)
Pada penelitian ini peneliti membahas secara skematis bagaimana
Algoritma Rabin-Karp bekerja dalam mendeteksi kesamaan pada suatu dokumen.
Algoritma Rabin-Karp digunakan dalam mendeteksi kesamaan sebab
memungkinkan untuk mencari pola tulisan yang didapat dari substring-substring
pada sebuah teks dalam dokumen, dimana algoritma pencarian string tunggal
sangat tidak efisien dan praktis.
Untuk peningkatan akurasi pencarian pola dokumen kesamaan, dapat
dikembangkan varian dari Algoritma Rabin-Karp untuk menyesuaikan dengan jenis
dokumen. Salah satu contohnya menyesuaikan filtering dengan menambah atau
mengubah kata-kata apa saja yang dapat diabaikan dan yang tidak. Selain itu dapat
pula melakukan teknik pengelompokkan nilai hash.
Dalam penelitian ini dihasilkan suatu kesimpulan bahwa Algoritma Rabin-
Karp menghasilkan efisiensi waktu yang baik dalam mendeteksi string yang
memiliki lebih dari satu pola.