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