Eliminasi Stopwords Algoritma Turbo Boyer-Moore

Rolt 2007 mengemukakan pendapat bahwa manajemen kearsipan elektronik adalah pengelolaan berbagai jenis dokumen dalam organisasi yang menggunakan program komputer dan penyimpanan.Sebuah sistem kearsipan elektronik memungkinkan suatu organisasi dan pengguna untuk membuat dokumen, memindai hard copy dalam bentuk elektronik dan menyimpan, mengedit, mencetak, proses, dan juga mengelola dokumen.

2.5 Eliminasi Stopwords

Eliminasi stopwords merupakan penghilangan kata-kata yang frekuensinya terlalu banyak terdapat dalam dokumen.Biasanya kata-kata ini tidak memiliki arti yang lebih di dalam memenuhi kebutuhan seorang pencari di dalam mencari informasi.Eliminasi stopwords bermanfaat dengan adanya pengurangan ukuran strukur indeks Karena pengurangan ukuran indeks, beberapa kata kerja, kata sifat, dan kata keterangan lainnya dapat juga dapat dimasukkan juga ke dalam daftar stopword. Berikut ini adalah contoh stopwords dalam bahasa Indonesia : yang, juga, dari, dia, kami, kamu, aku, saya, ini, itu, atau, dan, tersebut, pada, dengan, adalah, yaitu, ke, tak, tidak, di, pada, jika, maka, ada, pun, lain, saja, hanya, namun, seperti, kemudian.

2.6 Algoritma Turbo Boyer-Moore

Algoritma Turbo Boyer-Moore adalah pengembangan dari algoritma Boyer- Moore.Algoritma Boyer-Moore adalah algoritma pencarian string yang dipublikasikan pertama kali oleh Robert S. Boyer, dan J. Strother Moore pada tahun 1977. Menurut Christian Thierry Charras dalam bukunya Handbook of Exact String Matching Algorithm mengatakan algoritma Boyer-Moore adalah algoritma yang paling efisien pada aplikasi umum.Algoritma Boyer-Moore bekerja dengan memulai pencocokan pattern dari kanan bukan dari kiri. Dengan memulai pencocokan karakter dari kanan, maka akan lebih banyak informasi yang didapat. Algoritma Turbo Boyer-Moore tidak jauh berbeda dengan algoritma pendahulunya yaitu Algoritma Boyer-Moore yang melakukan pencocokan dimulai dari karakter yang paling kanan hingga karakter paling kiri pattern. Jika terjadi ketidakcocokan antara karakter paling kanan pattern dengan karakter pada text yang dicocokkan maka, karakter pada pattern akan diperiksa satu persatu untuk mendeteksi apakah ada karakter pada teks tersebut yang sama dengan karakter pada pattern. Apabila terjadi kecocokan, maka pattern akan digeser sedemikian rupa sehingga posisi karakter yang sama antara pattern dan text terletak sejajar menggunakan dua fungsi penggeseranyaitu penggeseran good-suffix dan penggeseran bad-character. Algoritma ini tidak membutuhkan proses tambahan, hanya membutuhkan ruang tambahan untuk menyimpan faktor dari teks yang cocok dengan akhiran dari pattern selama attempt terakhir dan hanya jika penggeseran good-suffix dilakukan. Dengan demikian teknik ini memiliki dua keuntungan Charras, 2001, yaitu: 1. Teknik ini memungkinkan segmen yang diingat tadi dilewati tanpa perlu diperiksa. 2. Teknik ini mengizinkan sebuah penggeseran turbo Penggeseran bad-character dan good-suffix pada algoritma Turbo Boyer- Mooresama dengan penggeseran yang dilakukan algoritma Boyer-Moore.Cara kerja algoritma Turbo Boyer-Moore adalah sebagai berikut: 1. Inisialisasi, karena algoritma ini menggunakan penggeseran good-suffix dan penggeseran bad-characterdari algoritma Boyer-Moore maka untuk inisialisasi dijalankan prosedur preBmBc dan preBmGs seperti algoritma Boyer-Moore. 2. Melakukan proses pencocokan karakter pada pattern dengan karakter pada teks. Jika terjadi ketidakcocokan maka dilakukan penggeseran terbesar berdasarkan tabel BmBc, tabel BmGs dan turbo shift. Sebuah penggeseran turbo pada algoritma Turbo Boyer-Moore dapat terjadi bila pada attempt yang sedang dilakukan, akhiran dari pattern yang cocok dengan teks lebih pendek dari bagian dari teks yang diingat dari attempt sebelumnya. Fase inisialisasi pada algoritma ini sama dengan fase inisialisasi pada algoritma Boyer-Moore, yaitu mempunyai kompleksitas waktu dan ruang sebesar On + σ dengan σ adalah besar ruang alfabet. Sedangkan pada fase pencocokan, algoritma ini mempunyai kompleksitas waktu sebesar Om, Jumlah pencocokan karakter pada algoritma ini adalah 2m. 2.6.1 Penggeseran Bad-Character Penggeseran bad-character yang terdiri dari mensejajarkan karakter y[i+j] dengan kemunculan paling kanan karakter tersebut di pattern, penggeseran ini diilustrasikan oleh Gambar 2.2. Dan bila karakter tersebut tidak ada di pattern, maka pattern akan disejajarkan dengan y[i+n+1], seperti yang diilustrasikan oleh Gambar 2.3. Penggeseran bad-character ini akan sering terjadi pada pencocokan string dengan ruang alfabet yang besar dan dengan pattern yang pendek yang sering terjadi di praktik pada umumnya. Hal ini terjadi karena akan banyak karakter di teks yang tidak muncul di pattern. Namun, untuk file biner, ya ng mempunyai alfabet Σ ={0, 1}, penggeseran ini kemungkinan besar tidak akan membantu sama sekali. Hal ini dapat diatasi dengan membandingkan beberapa bit sekaligus Kumara,2009. Gambar 2.2 Penggeseran bad-character, b muncul pada xCharras, 2001 Gambar 2.3 Penggeseran bad-character, tidak ada kemuncul b pada x Charras, 2001 Pada tabel bad-character, setiap karakter pada pattern diberi nilai sesuai dengan ukuran jauhnya karakter tersebut dari karakter paling kanan dari pattern dan untuk karakter yang tidak terdapat pada pattern akan diberi nilai sejumlah karakter pada pattern. Procedure preBmBc input y : array[0..n-1]of char, input n : integer, inputoutput bmBc : array of integer Deklarasi i:integer Algoritma for i=0; iASIZE; ++i bmBc[i]  n endfor for i=0; i n - 1; ++i bmBc[y[i]]  n – i – 1 endfor Gambar 2.4Pseudocode Bad-CharacterCharras, 2001 2.6.2 Penggeseran Good-Suffix Asumsikan bahwa ketidak cocokan terjadi antara karakter x[i] = a pada pattern dan karakter y[i+j] = b pada teks selama attempt pada posisi j, v adalah akhiran dari pattern setelah b dan u adalah sebuah awalan dari pattern. Kemudian x[i+1 .. m-1] = y[i+j+1 .. j+m-1]= u dan x[i] ≠ y[i+j]. Penggeseran good-suffix terdiri atas mensejajarkan y[i+j+1 .. j+m-1] = x[i+1 .. m-1] dengan kemunculan paling kanan potongan tersebut pada x yang didahului oleh karakter yang berbeda dari x[i], seperti terlihat pada gambar 2.2. Namun jika tidak ada potongan seperti itu, maka algoritma akan mensejajarkan akhiran dari v dari y[i+j+1 .. j+m-1] dengan awalan u dari pattern yang sama, seperti yang terlihat pada gambar 2.5. Gambar 2.5Penggeseran good-suffix, u muncul didahului oleh karakter cCharras, 2001 Gambar 2.6Penggeseran good-suffix, hanya akhiran dari u yang muncul pada y Charras, 2001 Pada tabel Penggeserangood-suffix, nilai Penggeseran digunakan ketika ketidakcocokan ditemukan berdasarkan karakter pada posisi keberapa yang menyebabkan ketidakcocokan.Untuk menentukan nilai-nilai tersebut, lebih dahulu menghitung nilai tabel suffix yang bertujuan untuk memberi tanda adanya perulangan akhiran. Dari tabel suffix inilah tabel good-suffixakan didapat. Pada tabel suffix berisi nilai dari tiap karakter yang ada pada pattern yang menunjukkan ada atau tidaknya perulangan akhiran suffix dan dimana posisi perulangan tersebut sehingga ketika proses perhitungan tabel good-suffix dapat diketahui seberapa banyak penggeseran yang akan dilakukan untuk pencocokan selanjutnya. Nilai dari setiap karakter yang ada pada pattern bergantung terhadap ada atau tidaknya perulangan akhiransuffix v dari text pada pattern. Semakin banyak perulangan, maka akan semakin kecil nilai penggeseran. Procedure suffixes input y: array[0..n-1] of char, input n: integer, inputoutput suff: array of integer Deklarasi f, g, i : integer Algoritma suff[n-1]  n g  n-1 for i = n-2; i = 0; --i ifi g and suff[i + n – 1 - f] i-gdo suff[i]  suff[i + n – 1 - f] else ifigdo g  i endif f = i whileg = 0 and y[g] == y[g + n – 1 - f]do --g; endwhile suff[i]  f-g; endif endfor Gambar 2.7Pseudocode Good-SuffixCharras, 2001 procedure preBmGs input y: array of char, input n:integer, inputoutput bmGs: array of integer Deklarasi i, j : integer suff : array [0..YSIZE] of integer Algoritma suffixesy, n, suff for i=0; i n; ++i bmGs [i]  n endfor for i= n-1; i = -1; --1 ifi == -1 or suff[i] == i+1 forj=0; j n-1-i; ++j ifbmGs[j] == n bmGs[j]  n-1-i endif endfor endif endfor for i=0; i = n-2; ++i bmGs[n-1-suff[i]]  n-1-i endfor Gambar 2.7Pseudocode Good-Suffix lanjutan 2.6.3 Penggeseran Turbo Penggeseranturbo dapat terjadi bila pada attempt yang sedang dilakukan, akhiran dari pattern yang cocok dengan teks lebih pendek dari bagian dari teks yang diingat dari attempt sebelumnya hanya pada saat good-suffix terjadi. Pada kasus ini, anggap u adalah faktor yang diingat dari attempt sebelumnya, dan v adalah bagian dari pattern yang cocok pada attempt yang sedang dilakukan, sehingga uzv adalah akhiran dari pattern. Lalu anggap a adalah karakter di teks dan b adalah karakter dari pattern yang sedang dicocokan pada attempt tersebut. Maka av adalah akhiran dari pattern, dan juga akhiran dari u karena |v||u|.Dua karakter a dan b muncul dengan jarak p di teks, dan akhiran dari uzv dari pattern mempunyai periode p=|zv|, karena u merupakan pinggiran dari uv, sehingga tidak mungkin melewati duakemunculan karakter a dan b di teks. Penggeseran terkecil yang mungkin dilakukan adalah sebesar |u|-|v|, yang disebut sebagai penggeseran turbo dan diilustrasikan oleh Gambar 2.8. Gambar 2.8Penggeseran turbo dapat terjadi jika | v | |u |Charras, 2001 Gambar 2.9 c ≠ d, maka tidak dapat disejajarkan pada karakter yang sama di vCharras, 2001 Masih dalam kasus dimana |v||u|, dan panjang dari penggeseran bad- characterlebih besar dari penggeseran good-suffix maupun penggeseran turbo.Pada kasus ini, seperti yang diilustrasikan pada Gambar 2.9, dua karakter c dan d pastilah berbeda karena disyaratkan bahwa jika u ≠0 maka penggeseran sebelumnya adalah penggeseran good-suffix. Sebagai akibatnya, jika penggeseran dengan panjang yang lebih besar dari penggeseran turbo namun lebih kecil dari |u|+1 maka c dan dakan disejajarkan dengan karakter yang sama di teks. Oleh karena itu, dalam kasus ini panjang penggeseran minimal adalah |u|+1. procedure Turbo Boyer Moore input m,n : integer, input y: array of[0..n-1] char, input x: array of[0..m-1] char, input m:integer Deklarasi i, j, u, v, shift, bmBcShift, bmGsShift, tuboShift : integer bmGs : array [0..n-1] of integer bmBc : array [0..ASIZE] of integer Gambar 2.10Pseudocode Turbo Boyer-MooreCharras, 2001 Algoritma preBmGsy, n, bmGs preBmBcy, n, bmBc i:= u:=0 shift:=n while i= m-n do j:= n-1 while j=0 n and T[i+j] = P[j] do j:= j-1 ifnotu=0 and i=m-1-shift j:=j-u endif endwhile ifj0 then ketemu[i]:=true shift:=bmGs[0] u=n-shift else v: =n-1-j turboShift:=u-v bmBcShift :=bmBc[chartointT[i+j]] – n + j + 1 bmGsShift := BmGs[j] shift:= maxbmBcShift, bmGsShift shift:= maxshift, turboShift ifshift = bmGs[i] then v1:=minm-shift, v else ifturboShift bmBcShift shift:=maxshift, u+1 endif endif endif i:= i+shift endwhile Gambar 2.10Pseudocode Turbo Boyer-Moore lanjutan

2.7 Algoritma Quick Sort