Implementasi Algoritma KMP Multi Search via Database (2) - Elang Sakti
Download Ebook Belajar Arduino PDF, Arduino untuk pemula
Jasa Pembuatan Program Arduino, pemrograman Arduino
# Hack Your Skills! to be Professional Mechatronics

Implementasi Algoritma KMP Multi Search via Database (2)

15 komentar
Bagaimana menfungsikan algoritma KMP agar bisa memfilter kata-kata jorok pada bagian komentar suatu artikel? Bagaimana jika Algoritma KMP ngambil datanya dari database? Mari kita bahas pada tulisan ini..

Sebelumnya kita sudah membahas apa itu algoritma string matching KPM dan implementasinya dalam pencarian kata, baca Algoritma KMP dengan PHP dan Implementasi KMP dengan PHP 1. Selanjutkan kita akan membahas lebih jauh beberapa implementasi dari algoritma ini. Kasusnya adalah, kita ingin memfilter kata-kata jorok yang muncul pada artikel berdasarkan tabel kata-kata jorok.

Oke, kita langsung praktek. Langkah-langkah yang akan kita lakukan adalah sebagai berikut:
1. Membuat tabel artikel dan tabel filter_kata pada database(pada kasus ini kita gunakan MySQL)
2. Buat halaman artikel dan meng-import file kmp.php, versi terakhir kelas KMP bisa dicek di Core Algoritma KMP
3. Percobaan dan hasil

Buat tabel artikel dan tabel filter_kata seperti gambar berikut:

Atau import SQL berikut:
/*!40101 SET NAMES utf8 */;

/*!40101 SET SQL_MODE=''*/;

/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;
/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */;

CREATE DATABASE /*!32312 IF NOT EXISTS*/`web` /*!40100 DEFAULT CHARACTER SET latin1 */;

USE `web`;

/*Table structure for table `artikel` */

DROP TABLE IF EXISTS `artikel`;

CREATE TABLE `artikel` (
  `id_artikel` int(11) NOT NULL,
  `judul` varchar(1024) DEFAULT NULL,
  `isi` text,
  PRIMARY KEY (`id_artikel`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1;

/*Data for the table `artikel` */

insert  into `artikel`(`id_artikel`,`judul`,`isi`) values (1,'Bahasa Sanskerta','Bahasa Sanskerta (ejaan tidak baku: \"Sansekerta\") adalah salah satu bahasa Indo-Eropa paling tua yang masih dikenal dan sejarahnya termasuk yang terpanjang. Bahasa yang bisa menandingi \'usia\' bahasa ini dari rumpun bahasa Indo-Eropa hanya bahasa Het. Bahasa Het tak ada kata jeruk. Kata Sanskerta, dalam bahasa Sanskerta Sa?sk?tabh?sa artinya adalah bahasa yang sempurna. Maksudnya, lawan dari bahasa Prakerta, atau bahasa rakyat. Di Indonesia tidak ada orang yang suka berkata jorok sebab kata-kata jorok bisa membuat orang juruk. Antara jorok, juruk, dan jeruk merupakan kata yang sangat manis.\r\n\r\nPosisinya dalam kebudayaan Asia Selatan dan Asia Tenggara mirip dengan posisi bahasa Latin dan Yunani di Eropa. Orang-orang tersebut gemar memakan jeruk. Bahasa Sanskerta berkembang menjadi banyak bahasa-bahasa modern di anakbenua India. Bahasa ini muncul dalam bentuk pra-klasik sebagai bahasa Weda. Yang terkandung dalam kitab Rgweda merupakan fase yang tertua dan paling arkhais. Arkhais berarti ketidak sopanan yang menjorok 3 cm ke kiri. Teks ini ditarikhkan berasal dari kurang lebih 1700 SM dan bahasa Sanskerta Weda adalah bahasa Indo-Arya yang paling tua ditemui dan salah satu anggota rumpun bahasa Indo-Eropa yang tertua.');

/*Table structure for table `filter_kata` */

DROP TABLE IF EXISTS `filter_kata`;

CREATE TABLE `filter_kata` (
  `kode_kata` int(11) NOT NULL,
  `kata_jorok` varchar(200) DEFAULT NULL,
  `kata_bagus` varchar(200) DEFAULT NULL,
  PRIMARY KEY (`kode_kata`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1;

/*Data for the table `filter_kata` */

insert  into `filter_kata`(`kode_kata`,`kata_jorok`,`kata_bagus`) values (1,'jorok','Kata Bagus 1'),(2,'juruk','Kata Bagus 2'),(3,'jeruk','Kata Bagus Tiga');

/*!40101 SET SQL_MODE=@OLD_SQL_MODE */;
/*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */;

Berikutnya, buatlah file artikel.php dengan isi sebagai berikut:
<?php
// koneksi ke database
$c  = mysql_connect("localhost", "root", "");
$db = mysql_select_db("web", $c);

if(!$db){
    echo "Purcase DB! :p";
    exit();
}

include_once("kmp.php");

// ambil daftar kata jorok
$katajorok =  array();
$kata  = mysql_query("select * from filter_kata");
while($jorok = mysql_fetch_array($kata)){
  $katajorok[] = $jorok;
}

$KMP = new KMP();

$art = mysql_query("select * from artikel");
while($teks = mysql_fetch_array($art)){
  $hasil = $teks['isi'];
  foreach($katajorok as $pattern){
    $hasil = $KMP->KMPReplace($pattern['kata_jorok'],'<b style="color:red" >'.$pattern['kata_jorok'].'</b>',$hasil);
  }
  echo "<div style='width:600px;'>";
  echo "<h3>".$teks['judul']."</h3><hr/>";
  echo nl2br($hasil);
  echo "</div>";
}

$art = mysql_query("select * from artikel");
while($teks = mysql_fetch_array($art)){
  $hasil = $teks['isi'];
  foreach($katajorok as $pattern){
    $hasil = $KMP->KMPReplace($pattern['kata_jorok'],'<b style="color:blue" >'.$pattern['kata_bagus'].'</b>',$hasil);
  }
  echo "<div style='width:600px;'>";
  echo "<h3>".$teks['judul']."</h3><hr/>";
  echo nl2br($hasil);
  echo "</div>";
}
?>

Yang terakhir, kita tengok hasilnya. Artikel yang atas sebelum difilter dan Artikel yang bawah setelah difilter:

Implementasi Algoritma KMP Multi Search via Database (2)

Implementasi Algoritma KMP Multi Search via Database (2) 2


Written by ElangSakti
Implementasi Algoritma KMP Multi Search via Database (2)
Bahasan: Bagaimana menfungsikan algoritma KMP agar bisa memfilter kata-kata jorok pada bagian komentar suatu artikel? Bagaimana jika Algoritma KMP...
Published at Senin, 18 Maret 2013, Updated at Senin, 18 Maret 2013
Reviewed by dr. on
Rating: 4.7

15 komentar :

  1. mz, saya tanya tabel cara menentukan tabel KMP next itu gmn y?
    saya tlong diberi penjelasan... terima kasih..

    BalasHapus
  2. Ketika proses pencarian, yang dicocokkan kan perkarakter. Nah, untuk mempercepat proses pencarian, maka dibuatlah tabel lompatan. Misalkan patternnya adalah "adalah", maka yang ada dalam tabel adalah jumlah lompatan untuk karakter 'a','d','l', dan 'h'. Lompatan dilakukan ketika karakter pada pattern tidak cocok dengan karakter pada text saat proses pencocokan.

    mungkin bisa di cek di sini. http://www.elangsakti.com/2013/03/php-modifikasi-class-algoritma-kmp-untuk-replace-string/

    BalasHapus
  3. bang ko error ya..
    "Notice: Undefined offset: 5 in C:\wamp\www\kmp\kmp.php on line 58"

    BalasHapus
    Balasan
    1. solusinya di sini http://www.elangsakti.com/2013/04/solusi-peringatan-undefined-offset-n.html

      Hapus
  4. saya mau tanyaa mas
    bisa ga algoritma kmp dijadiin buat pencarian
    misalnya pencarian buku perpus gitu mas

    saya coba koding yang ini kan mas
    saya tambah artikel yang ga ada kata joroknya tuh mas , tapi tetep nampil mas
    gimana ya biar kalau yang ga ada kata joroknya ga nampil gitu mas kan biar jadi kaya pencarian gitu maas

    makasih mas
    saya tunggu jawabannya mas :)

    BalasHapus
    Balasan
    1. bisa mas..

      mas Iyan bisa menggunakan fungsi KMPSearch(), misalnya begini:

      $kmp = new KMP();
      $hasil = $kmp->KMPSearch($keyword, $text);
      if(count($hasil) > 0){
      echo $text;
      }

      Hapus
  5. Mas, kalau pakai brute force gimana mas?

    BalasHapus
  6. Mas, cari menghitung jumlah kata yang jorok gimana ya mas? count($hasil)?

    BalasHapus
  7. Mas pengen nanya.. kan saya mau buat tugas akhir tentang forum diskusi. jadi inputan / kiriman dari user akan dicocokin dengan kata kunci di yang ada ditabel keyword. jika kecocokan lebih dari misalnya
    5 kata, maka kiriman tersebut akan disimpan ditabel post. Ini bisa untuk menyelesaikan kasus seperti itu atau tidak ya mas?

    BalasHapus
  8. Setelah saya cek ternyata kmp.php banyak versinyanya(modifikasi) ya mas? saya harus menggunakan versi yg mana mas?

    BalasHapus
  9. kalau digunakan sebagai pencarian kata untuk kamus berbasis web bisa tidak mas ?

    BalasHapus