Implementasi Algoritma Levenshtein Distance dan Boyer Moore untuk Fitur Autocomplete dan Autocorrect pada Aplikasi Katalog Perpustakaan Daerah Aceh Timur
Levenshtein Distance.php
<?php function levenshteinD($this = "", $that = "") { // memeriksa apakah kedua kata sama if ($this === $that) return 0; // dimensi matrix $m = strlen($this); $q = strlen($that); // memulai membuat matrix // kiri atas di inisialisasikan dengan nilai 0 $matrix[0][0] = 0; //membuat array dari setiap huruf for ($i = 1; $i <= $m; $i++) { $matrix[$i][0] = $i; if ($i != $m && substr($this, $i) === substr($that, $i)) return $i; } for ($i = 1; $i <= $q; $i++) {
$matrix[0][$i] = $i; if ($i != $q && substr($this, $i) === substr($that, $i)) return $i; } // membandingkan seluruh matrix dimulai dari kiri atas untuk menemukan nilau minimum for ($i = 1; $i <= $m; $i++) { $piece = substr($this, $i - 1, 1); for ($j = 1; $j <= $q; $j++) { $minimum = $m + $q; if ( ($matrix[$i - 1][$j] + 1) < $minimum) $minimum = $matrix[$i - 1][$j] + 1; if ( ($matrix[$i][$j - 1] + 1) < $minimum) $minimum = $matrix[$i][$j - 1] + 1; if ($piece === substr($that, $j - 1, 1)) $extraCost = 0; else $extraCost = 1; if ( ($matrix[$i - 1][$j - 1] + $extraCost) < $minimum) $minimum = $matrix[$i - 1][$j - 1] + $extraCost;
$matrix[$i][$j] = $minimum; } } // memberikan nilai terendah pada elemen paling kanan bawah return $matrix[$m][$q]; } echo levenshteinD("pemrograman","permograman");
Boyer Moore.php
<?php function boyermoore($cari, $kata, $kata2){ $ditemukan=0; //$cari="cari"; //$kata="mengubah kata yang dicari ke bentuk array"; $cari=strtolower($cari); $kata=strtolower($kata); $cari_arr= str_split($cari); //mengubah kata yang dicari ke bentuk array $cari_len= count($cari_arr); // menghitung panjang kata yang dicari $kata_arr= str_split($kata); //mengubah kata yang diperiksa ke bentuk array $kata_len= count($kata_arr); // menghitung panjang kata yang diperiksa
$batas=$kata_len-$cari_len; for ($n=0; $n < $cari_len; $n++) { $nilai=$cari_len-1-$n; $char=$cari_arr[$n]; if($nilai==0)
$val[$char]=1; else $val[$char]=$nilai;
} /* for ($n=0; $n < $cari_len; $n++) {
$char=$cari_arr[$n]; echo "$char = ".$val[$char]; }
- / $x=0; $y=1; while($x<=$batas) // perulangan sebanyak panjang kata yang diperiksa dikurang panjang kata yang di cari
{ $iterasike=$y; $cocok=''; for ($z=$x; $z < $cari_len+$x; $z++) { $cocok.=$kata_arr[$z];
} if ($cocok==$cari) { $ditemukan=1; break;
} $akhir=$kata_arr[$x+$cari_len-1]; if (in_array($akhir, $cari_arr)) {
$x+=$val[$akhir]; } else{
$x+=$cari_len; } $y++;
} if ($x>$batas) { //echo "kata tidak ditemukan"; return "";
} if ($ditemukan==1) {
//echo "kata ditemukan di iterasi ke $iterasike"; return $kata2; }
} include "koneksi.php"; $cari=trim($_GET['cari']); // menangkap variable cari yang dikirim $arr=array(); $result=mysql_query("SELECT id_buku ,judul_buku FROM buku",$koneksi) or die(mysql_error()); if(mysql_num_rows($result)>0){ //memuncullkan jika hasil lebih dari while($data=mysql_fetch_row($result)){
$id=$data[0]; $kata=$data[1]; $isi=boyermoore($cari, $kata, $kata); if ($isi != '') { $arr[]=array("id" => $id, "data" => $isi); //memasukkan data ke erray }
} } mysql_close($koneksi); echo json_encode($arr); //decode array kedalam json untuk di tampilkan ?>
Detail_buku.php <html ns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>User</title> <link href="css/style.css" rel="stylesheet" type="text/css"/> </head> <body> <?php $id=$_REQUEST['id']; include "koneksi.php"; $sql=mysql_query("SELECT * from buku WHERE id_buku=$id",$koneksi)or die(mysql_error()); $data=mysql_fetch_array($sql); $judul_buku=$data['judul_buku']; $pengarang=$data['pengarang']; $penerbit=$data['penerbit']; $tahun_terbit=$data['tahun_terbit']; $edisi=$data['edisi']; $jenis=$data['jenis']; $deskripsi=$data['deskripsi']; $subjek=$data['subjek']; $bahasa=$data['bahasa']; $jumlah_eks=$data['jumlah_eks'];
?> <div id="wrapper">
<h1><?php echo $judul_buku?></h1> <table width='960'> <tr>
<td class="col1" width='150'>Judul Buku :</td> <td class="col2"><?php echo $judul_buku?></td> </tr> <tr>
<td class="col1">Pengarang :</td> <td class="col2"><?php echo $pengarang?></td> </tr> <tr>
<td class="col1">Penerbit :</td> <td class="col2"><?php echo $penerbit?></td> </tr> <tr>
<td class="col1">Tahun Terbit :</td> <td class="col2"><?php echo $tahun_terbit?></td> </tr> <tr>
<td class="col1">Edisi :</td> <td class="col2"><?php echo $edisi?></td> </tr> <tr>
<td class="col1">Jenis :</td> <td class="col2"><?php echo $jenis?></td> </tr>
<tr> <td class="col1">Deskripsi :</td>
<td class="col2"><?php echo $deskripsi?></td> </tr> <tr>
<td class="col1">Subjek :</td> <td class="col2"><?php echo $subjek?></td> </tr> <tr>
<td class="col1">Bahasa :</td> <td class="col2"><?php echo $bahasa?></td> </tr> <tr>
<td class="col1">Jumlah Eks :</td> <td class="col2"><?php echo $jumlah_eks?></td> </tr> </table> </div> </body> </html>
Index.php
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> <html> <head>
<title>User</title> <script language="javascript" type="text/javascript" src="js/jquery.js"></script>
<script language="javascript" type="text/javascript" src="js/jquery.coolautosuggest.js"></script> <script language="javascript" type="text/javascript" src="js/jquery.coolfieldset.js"></script> <link rel="stylesheet" type="text/css" href="css/jquery.coolautosuggest.css" />
<link rel="stylesheet" type="text/css" href="css/style.css" /> <?php
$cari = $_REQUEST['cari']; ?>
</head> <body> <div id="wrapper">
<?php set_time_limit(0); if(!isset($cari)) {
?> <p align="center">
<img src="images/pintu_aceh.png" height="100"> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
<img src="images/aceh_timur.png" height="100"> </p> <div id="first_view">
<h3 align="center">IMPLEMENTASI ALGORITMA LEVENSHTEIN DISTANCE DAN BOYER MOORE UNTUK FITUR AUTOCOMPLETE DAN AUTOCORRECT PADA APLIKASI KATALOG PERPUSTAKAAN DAERAH ACEH TIMUR</h1>
<form action="index.php"> Buku yang dicari : <input type="text" name="cari" id="text1" value="<?php echo $cari?>"/>
<input type="submit" value="Cari" id="button"/> <script language="javascript" type="text/javascript">
$("#text1").coolautosuggest({ url:"data.php?cari=", //mengambil data pada data.php dengan mengirim variable cari
}); </script>
</form> </div> <?PHP
} else { ?>
<div> <!--form pemcarian-->
<form action="index.php"> Buku yang dicari : <input type="text" name="cari" id="text1" value="<?php echo $cari?>"/>
<input type="submit" value="Cari" id="button"/> <script language="javascript" type="text/javascript">
$("#text1").coolautosuggest({ url:"data.php?cari=", //mengambil data pada data.php dengan mengirim variable cari
}); </script>
</form> </div>
<div id="correct">
<?php include "koneksi.php"; $terkecil = -1; $sql=mysql_query("SELECT * from buku",$koneksi)or die(mysql_error()); //mengambil semua buku di database while($data=mysql_fetch_array($sql)){ //perulangan untuk membandingkan semua buku
$kata=$data['judul_buku']; $cari=strtolower($cari); //konversi yang dicari menjadi huruf kecil semua $kata=strtolower($kata); //konversi buku menjadi huruf kecil semua $lev = levenshtein($cari, $kata);
//mengambil nilai levenshtein if ($lev == 0) { //pemeriksaan apakah nilai levenshtein sama dengan 0 yang berarti cocok
$terdekat = $kata; //mendefenisikan kata yang paling dekat jika lev ==0 $terkecil = 0; // mendefenisikan nilai lev terkecil yang didapat = 0 break; //menghentikan proses perulangan
} if ($lev <= $terkecil || $terkecil < 0) { // melakukan pemeriksaan apakah nilai lev ini lebih kecil dari sebelumnya
$terdekat = $kata; //mendefenisikan kata yang paling dekat jika lev lebih kecil dari sebelumnya
$terkecil = $lev; // mendefenisikan nilai lev jika lev lebih kecil dari sebelumnya }
} if($cari) //kata yang di keluarkan jika ada objek yang di cari
{ if ($terkecil > 0) {
$link_terdekat=urlencode($terdekat); echo "Apakah Maksud Anda: <a href='index.php?cari=$link_terdekat'>$terdekat ($terkecil)</a>?\n";
} }
?> </div> <div id="hasil">
<div id="kiri"> <h4>Boyermoore (Auto Complete)</h4> <?php function boyermoore($cari, $kata, $kata2){
$ditemukan=0; //$cari="cari";
//$kata="mengubah kata yang dicari ke bentuk array"; $cari=strtolower($cari); $kata=strtolower($kata); $cari_arr= str_split($cari);
//mengubah kata yang dicari ke bentuk array $cari_len= count($cari_arr); // menghitung panjang kata yang dicari $kata_arr= str_split($kata);
//mengubah kata yang diperiksa ke bentuk array $kata_len= count($kata_arr); // menghitung panjang kata yang diperiksa $batas=$kata_len-$cari_len; for ($n=0; $n < $cari_len; $n++) {
$nilai=$cari_len-1-$n; $char=$cari_arr[$n]; if($nilai==0)
$val[$char]=1; else $val[$char]=$nilai;
} /* for ($n=0; $n < $cari_len; $n++) {
$char=$cari_arr[$n]; echo "$char = ".$val[$char];
}
- / $x=0; $y=1; while($x<=$batas) // perulangan sebanyak panjang kata yang diperiksa dikurang panjang kata yang di cari
{ $iterasike=$y; $cocok=''; for ($z=$x; $z < $cari_len+$x;
$z++) { $cocok.=$kata_arr[$z];
} if ($cocok==$cari) { $ditemukan=1; break;
} $akhir=$kata_arr[$x+$cari_len-
1]; if (in_array($akhir,
$cari_arr)) {
$x+=$val[$akhir]; } else{ $x+=$cari_len;
} $y++;
} if ($x>$batas) { //echo "kata tidak ditemukan"; return "";
} if ($ditemukan==1) { //echo "kata ditemukan di iterasi ke $iterasike"; return $kata2;
} } $cari=trim($_GET['cari']); // menangkap variable cari yang dikirim $arr=array(); $result=mysql_query("SELECT id_buku
,judul_buku,pengarang,penerbit,tahun_terbit FROM buku",$koneksi) or die(mysql_error()); // melakukan pengambilan dari database dengan nilai levenshtein kurang dari 15 yang diurutkan berdasarkan nilai lev terkecil while($data=mysql_fetch_array($result)){
$id=$data['id_buku'];
$kata= $data['judul_buku']; $isi=boyermoore($cari, $kata,
$kata); if ($isi != '') { $no++;
$id=$data['id_buku']; $judul_buku=
$data['judul_buku']; $pengarang=
$data['pengarang']; $penerbit=
$data['penerbit']; $tahun_terbit=
$data['tahun_terbit']; echo " <div class='buku_wrapper'>
<table> <tr>
<td width='40'>$no</td> <td>
<span ><a href='detail_buku.php?id=$id' class='judul'>$judul_buku</a></span><br/> <span class='pengarang'>$pengarang </span><br/> <span class='penerbit'>$penerbit </span><br/> <span class='tahun'>$tahun_terbit </span>
</td> </tr>
</table> </div> ";
} }
?> </div> <div id="kanan">
<h4>Levenshtein (Auto Correct)</h4> <?php if($cari) // hasil pencarian akan dikeluarkan jika ada objek yang di cari
{ $file = "index.php"; $cari=urlencode($cari); $page = "cari=$cari"; // Memanggil dan menginisiasi class include
"admin/library/class_paging.php"; $p = new Paging; // Tentukan limit atau batas $batas = 10; // Cek halaman dan posisi data $posisi = $p->cariPosisi($batas); $no=$posisi+1;
$search=$_REQUEST['search']; $query="SELECT id_buku
,judul_buku,pengarang,penerbit,tahun_terbit,levenshtein('$cari', judul_buku) as lev FROM buku ORDER BY lev"; $sql = mysql_query("$query LIMIT
$posisi,$batas", $koneksi) or die (mysql_error()); $sql2 = mysql_query("$query"); $no=0; while($row=mysql_fetch_array($sql)) {
$no++; $id=$row['id_buku']; $judul_buku=
$row['judul_buku']; $pengarang=$row['pengarang']; $penerbit=$row['penerbit'];
$tahun_terbit=$row['tahun_terbit']; echo " <div class='buku_wrapper'>
<table> <tr>
<td width='40'>$no</td> <td>
<span ><a href='detail_buku.php?id=$id' class='judul'>$judul_buku</a></span><br/>
<span class='pengarang'>$pengarang</span><br/>
<span class='penerbit'>$penerbit</span><br/> <span class='tahun'>$tahun_terbit</span>
</td> </tr>
</table> </div> ";
} // Dapatkan jumlah data keseluruhan $jmldata = mysql_num_rows($sql2); // Dapatkan jumlah halaman $jmlhalaman = $p-
>jumlahHalaman($jmldata, $batas); // Cetak link navigasi halaman $linkHalaman = $p-
>navHalaman($_GET[halaman], $jmlhalaman, $page); echo $linkHalaman; }
?> </div>
</div> <?php
} ?> </div> </body></html> Saya yang bertanda tangan dibawah ini :
Nama : Teuku Ighfar Hajar Alamat : Jalan Gajah Mada, Gang Makmur 15B, Medan Hp : 0811642809 Email :teukuighfarhajar@yahoo.com Tempat/tanggal lahir : Kuta Binjei/ 28 September 1992 Jenis Kelamin : Laki-laki Status : Belum Menikah PENDIDIKAN 1998-2004 : SD Negeri 1 Kuta Binjei 2004-2007 : MTsN 1 Kuta Binjei 2007- 2010 : SMA Negeri Ungul Aceh Timur 2010-2013 : DIII Teknik Informatika Universitas Sumatera Utara 2013- 2015 : S-1 Ekstensi Ilmu Komputer Universitas Sumatera Utara SEMINAR
- Seminar Nasional Literasi Informasi (SENARAI) 2014 Fakultas Ilmu Komputer dan Teknologi Informasi Universitas Sumatera Utara.
Demikianlah Daftar Riwayat Hidup ini saya perbuat dengan sebenarnya.
Hormat Saya, Teuku Ighfar Hajar