• Tidak ada hasil yang ditemukan

Implementasi Algoritma Levenshtein Distance dan Boyer Moore untuk Fitur Autocomplete dan Autocorrect pada Aplikasi Katalog Perpustakaan Daerah Aceh Timur

N/A
N/A
Protected

Academic year: 2019

Membagikan "Implementasi Algoritma Levenshtein Distance dan Boyer Moore untuk Fitur Autocomplete dan Autocorrect pada Aplikasi Katalog Perpustakaan Daerah Aceh Timur"

Copied!
21
0
0

Teks penuh

(1)

LISTING PROGRAM

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;

}

(2)

$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;

(3)

$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

(4)

$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;

(5)

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 "";

}

(6)

//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 0

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

(7)

Detail_buku.php

<html xmlns="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'];

(8)

?>

<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>

(9)

<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>

(10)

<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">

(11)

<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>

(12)

<?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

(13)

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;

(14)

//$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];

(15)

}

*/

$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];

(16)

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)){

(17)

$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>

(18)

</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);

(19)

$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/>

(20)

<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>

(21)

DAFTAR RIWAYAT HIDUP

Saya yang bertanda tangan dibawah ini :

DATA PRIBADI

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,

Referensi

Dokumen terkait

antara persepsi kanker serviks dengan sikap melakukan deteksi dini inspeksi visual asam asetat pada ibu di RW 03 Ngampilan Yogyakarta 2011 yang ditunjukkan dengan nilai t

Hadits juga merupakan sumber bagi da’wah dan bimbingan bagi seorang muslim, ia juga merupakan sumber ilmu pengetahuan religius (keagamaan), dan sosial yang dibutuhkna umat

Dalan pasal 1 ayat 1 sub lb ini yang non jadi tujuan da­ ri pcrbuatan terdalcwa adalah ncnggulingfcan, ncrusak atau nc- rongrong kekuasaan nogara atau kcwibawaan pcncrintah -yang

KEKADALUWARSAAN UNTUK DIBEBASKAN DARI KEWAJIBAN ATAU TUNTUTAN HUKUM ( EX - TINGTIEVE VERJARING)... KEKADALUWARSAAN YANG DIPERPENDEK... Bcntuk KHUSUS EXTINCTIEVE VERJARING.

Hasil penelitian terdapat hubungan yang signifikan antara sumber informasi dari teman sebaya dengan sikap seks pranikah pada remaja MAN Godean Sleman Yogyakarta di tunjukkan

In this thesis, we studied CCA and three kernelized CCA variants, KCCA, gradKCCA and (S)CCA-HSIC, in 12 simulated experiments and two ex- periments with real-world data.. In

Berdasarkan pada anggapan-anggapan seperti yang telah di kemukakan diatas, dapat dilakukan pengujian regangan, tegangan, dan gaya-gaya yang timbul pada penampang balok yang

Penutupan secara bedah fistula arterivena koroner yang terdengar dengan anatomi yang tepat direkomendasikan pada semua fistula arterivena koroner besar dan pada yang