Pseudocode Algortima Boyer-Moore PERANCANGAN SISTEM

admin login User dan password Konfirmasi login Input pasal Data pasal pasal Data pasal Edit pasal Data pasal Data pasal Gambar 3.6. DFD Sub Proses Input Pasal user pencarian Parsing pasal Data pasal pasal Data pasal Data pasal Data pasal Gambar 3.7. DFD Sub Proses Pencarian

3.3. Pseudocode Algortima Boyer-Moore

Algoritma ini dianggap sebagai algoritma yang paling efisien pada aplikasi umum. Tidak seperti algoritma pencarian string yang ditemukan sebelumnya, algoritma Boyer-Moore mulai mencocokkan karakter dari sebelah kanan pattern. Ide dibalik algoritma ini adalah bahwa dengan memulai pencocokkan karakter dari kanan, dan bukan dari kiri, maka akan lebih banyak informasi yang didapat. Adapun cara kerja dari Algortima Boyer-Moore adalah Misalnya ada sebuah usaha pencocokan yang terjadi pada teks[i..i + n − 1], dan anggap Hak Cipta © milik UPN Veteran Jatim : Dilarang mengutip sebagian atau seluruh karya tulis ini tanpa mencantumkan dan menyebutkan sumber. ketidakcocokan pertama terjadi diantara teks[i + j] dan pattern[j], dengan 0 j n . Berarti, teks[i + j + 1..i + n − 1] = pattern[j + 1..n − 1] dan a = teks[i + j] tidak sama dengan b = pattern[j]. Jika u adalah akhiran dari pattern sebelum b dan v adalah sebuah awalan dari pattern, maka penggeseran-penggeseran yang mungkin adalah: 1. Penggeseran good-suffix yang terdiri dari mensejajarkan potongan teks[i + j + 1..i + n − 1] = pattern[j + 1..n − 1] dengan kemunculannya paling kanan di pattern yang didahului oleh karakter yang berbeda dengan pattern [j]. Jika tidak ada potongan seperti itu, maka algoritma akan mensejajarkan akhiran v dari teks[i + j + 1..i + n − 1] dengan awalan dari pattern yang sama. 2. Penggeseran bad-character yang terdiri dari mensejajarkan teks[i + j] dengan kemunculan paling kanan karakter tersebut di pattern. Bila karakter tersebut tidak ada di pattern, maka pattern akan disejajarkan dengan teks[i + n + 1]. Secara sistematis, langkah-langkah yang dilakukan algoritma Boyer-Moore pada saat mencocokkan string adalah: 1. Algoritma Boyer-Moore mulai mencocokkan pattern pada awal teks. 2. Dari kanan ke kiri, algoritma ini akan mencocokkan karakter per karakter pattern dengan karakter di teks yang bersesuaian, sampai salah satu kondisi berikut dipenuhi: Hak Cipta © milik UPN Veteran Jatim : Dilarang mengutip sebagian atau seluruh karya tulis ini tanpa mencantumkan dan menyebutkan sumber. 1. Karakter di pattern dan di teks yang dibandingkan tidak cocok mismatch. 2. Semua karakter di pattern cocok. Kemudian algoritma akan memberitahukan penemuan di posisi ini. 3. Algoritma kemudian menggeser pattern dengan memaksimalkan nilai penggeseran good-suffix dan penggeseran bad-character, lalu mengulangi langkah 2 sampai pattern berada di ujung teks. Berikut adalah flowchart dan pseudocode algoritma Boyer-Moore pada fase pra- pencarian : function stoplistparameter kata{ input kata : preg_replace[a-zA-Z\s], , kata; input kata : str_replace , ,kata; ifsubstrkata,0,1== kata=lefttrimrighttrimkata; else kata=righttrimkata; return kata; } Gambar 3.8. Pseudocode Prosedur Function Stoplist Hak Cipta © milik UPN Veteran Jatim : Dilarang mengutip sebagian atau seluruh karya tulis ini tanpa mencantumkan dan menyebutkan sumber. Berikut adalah flowchart algoritma Boyer-Moore pada fase pencarian : start Input data string stoplist split ,word A=0 split ,cari i=0 icountcari T j=0 jcountword T k=0 k=strlenword[j] cari[i]==substrword[j], k,strlencari[i] T word_list[s]=word[j]; K++ J++ i++ is_arrayword_idx T array_uniqueword_idx array_uniqueword_list countword_idx0 F T return val End F val[id] = idx val[rank] = countword_ idx val[word] = word_list val = NULL Gambar 3.9 flowchart fungsi Boyer-Moore Hak Cipta © milik UPN Veteran Jatim : Dilarang mengutip sebagian atau seluruh karya tulis ini tanpa mencantumkan dan menyebutkan sumber. function cari_bmparameter idx, string, cari{ input word = strtolowerstring; input word = stoplistword; input word = split ,word; inisialisasi s=0; cari = split ,cari; fori=0;icountcari;i++{ forj=0;jcountword;j++{ fork=0;k=strlenword[j]-strlencari[i];k++{ ifcari[i]==substrword[j],k,strlencari[i]{ maka input word_list[s]=word[j]; word_idx[s]=j; s++; } } } } ifis_arrayword_idx { array_uniqueword_idx; array_uniqueword_list; } ifcountword_idx0 { val[id] = idx; val[rank] = countword_idx; val[word] = word_list; } else val = NULL; return val; } Gambar 3.10 Pseudocode Prosedur Fungsi Cari_bm Dan berikut adalah pseudocode algoritma Boyer-Moore pada fase pencarian: function selectkata{ query sql = select from pasal order by id_pasal; compile run = mysql_querysql; inisialisasi i=0; whilerun r=mysql_fetch_arrayrun{ input a=cari_bmr[id_pasal],strip_tagsr[isi_pasal],kata; ifa=NULL {val_id[i]=a[id];val_rank[i]=a[rank];val_word[i]=a[word];} else ifa==NULL{ inisialisasi b=cari_stemr[id_pasal],strip_tagsr[isi_pasal],kata; ifb=NULL {vst_id[i]=b[id];vst_rank[i]=b[rank];vst_word[i]=b[word];} } i++; } Hak Cipta © milik UPN Veteran Jatim : Dilarang mengutip sebagian atau seluruh karya tulis ini tanpa mencantumkan dan menyebutkan sumber. ifcountval_id0 or countvst_id0{ tampilkan pHasil dari pencarian boyer moore : ; ifcountval_id0 tampilkan countval_id. pasal; else tampilkan 0 pasal; ifcountvst_id0 echo - dengan bantuan stemming .countvst_id. pasal; tampilkan p; } ifcountval_id0{ array_multisortval_rank, SORT_DESC, SORT_NUMERIC, val_id, SORT_NUMERIC, val_word, SORT_STRING; tampilkan table; fori=0;icountval_id;i++{ get sql = select isi_pasal from pasal where id_pasal=.val_id[i]; compile run = mysql_querysql; run r=mysql_fetch_arrayrun; ? trtdbPasal ?=val_id[i]?btdtr trtd ? Forj=0;jcountval_word[i];j++{ r[isi_pasal]= highlightWordsval_word[i]][j],r[isi_pasal]1;35 } tsmpilkan r[isi_pasal]; tdtr trtdnbsp;tdtr ? } echo table; } ifcountvst_id0{ array_multisortvst_rank, SORT_DESC, SORT_NUMERIC, vst_id, SORT_NUMERIC, vst_word, SORT_STRING; ifcountval_id==0 echo table; fori=0;icountvst_id;i++{ sql = select isi_pasal from pasal where id_pasal=.vst_id[i]; run = mysql_querysql; r=mysql_fetch_arrayrun; ? trtdspan style=text- decoration:underlinebPasal ?=vst_id[i]?bspantdtr trtd ? forj=0;jcountvst_word[i];j++{ r[isi_pasal] = highlightWordsvst_word[i][j],r[isi_pasal]; } echo r[isi_pasal]; ? tdtr Hak Cipta © milik UPN Veteran Jatim : Dilarang mengutip sebagian atau seluruh karya tulis ini tanpa mencantumkan dan menyebutkan sumber. trtdnbsp;tdtr ? } echo table; } ifcountval_id==0 and countvst_id==0{ echo table; echo trtdTidak Ada Hasil Pencarian Yang Cocoktdtr; echo table; } } Gambar 3.11 Pseudocode Prosedur Pada Fase Pencarian

3.4. Perancangan Desain Basis Data