Perancangan Basis Data
3.2.3 Perancangan Basis Data
3.2.3.1 Model Data Konseptual
Tahap perancangan konseptual meliputi dua kegiatan yang tidak dapat dipisahkan, yaitu perancangan skema konseptual tentang organisasi data yang harus disimpan dalam basis data, dan rancangan transaksi yang dilakukan untuk memperoleh informasi dari sistem basis data. Perancangan basis data secara konseptual dapat dilihat pada Gambar 3.10.
Gambar 3.10 Model Data Konseptual Sistem Penyimpanan
3.2.3.2 Model Data logik
Gambar 3.11 Model Data Logik Sistem Penyimpanan
Perancangan basis data secara logik bertujuan untuk menyusun rancangan konseptual dan skema eksternal yang sesuai dengan sistem manajemen basis data yang dipilih. Perancangan basis data secara logik dapat dilihat pada Gambar 3.11.
3.2.3.3 Model Data Fisik
Perancangan basis data secara fisik bertujuan untuk membuat spesifikasi struktur penyimpanan dan jalur akses data sehingga diperoleh kemampuan sistem yang baik untuk berbagai aplikasi. Perancangan basis data secara fisik dapat dilihat pada Gambar 3.12.
t_data
t_bagian
PK
id_data
PK id_bagian
FK1 id_bagian
tanggal
bagian
nama_data
folder
letak nama_file
t_user
type_file ukuran_file
PK id_user
penulis deskripsi
t_index uname
temp_file
PK,FK1 id_data
password
PK,FK2 id_term
guid kontrolisasi
tf position
t_term
PK id_term
term idf
Gambar 3.12 Model Data Fisik Sistem Penyimpanan
Pada basis data yang digunakan dalam Sistem Penyimpanan, terdapat lima tabel yaitu tabel t_user, t_data, t_bagian, t_index, dan t_term. Basis data untuk sistem menggunakan MySQL Versi 4.0.20a. Tabel 3.2 sampai dengan Tabel 3.6 menjelaskan deskripsi tabel yang digunakan dalam Sistem Penyimpanan.
Tabel 3.2 Struktur Data Tabel t_user
Nama Kolom Tipe
Keterangan
id_user Auto Number (Primary Key)
uname Varchar (25) Username untuk administrator password
Varchar (255) Password untuk login guid
Varchar (32) ID untuk session pada server Kontrolisasi Tinyint (1)
Tabel t_user (Tabel 3.2) digunakan untuk proses login pada bagian administrator, isi dari tabel ini merupakan nama user dan password serta hak akses yang dimiliki oleh administrator.
Tabel 3.3 Struktur Data Tabel t_data
Nama Kolom Tipe
Keterangan
id_data AutoNumber (Primary Key)
id_bagian Integer (10)
tanggal Date nama_data
Varchar (100) Nama dari dokumen letak
Varchar (150) Path file dokumen di dalam Harddisk nama_file
Varchar (80) Nama file dokumen sebenarnya yang dimasukan oleh administrator
type_file Varchar (30) Ekstension dari file dokumen ukuran_file Integer (16)
Ukuran dari file dokumen penulis
Varchar (80) Penulis dari dokumen deskripsi
Varchar (160) Deskripsi dari file dokumen temp_file
Varchar (150) Path file temporary di dalam harddisk
Sistem penyimpanan akan menyimpan informasi dari dokumen yang dimasukan oleh administrator pada tabel t_data (Tabel 3.3). Informasinya berupa nama dari data, letak path dari file dokumen pada harddisk, nama file asli dari dokumen tersebut, tipe ekstensi dari file (.doc, .pdf atau .xls), ukuran file, penulis, deskripsi dari file dan letak file temporary dari file dokumen.
Sistem akan menyimpan mengelompokan dokumen kedalam kelompok dokumen yang disebut bagian, informasi dari dokumen ini akan disimpan pada tabel t_bagian (Tabel 3.4). informasi dari bagian kelompok dokumen itu adalah nama bagian dan nama folder diharddisk tempat file dokumen disimpan.
Tabel 3.4 Struktur Data Tabel t_bagian
Nama Kolom Tipe
Keterangan
id_bagian AutoNumber (Primary Key)
bagian Varchar (255)
Nama bagian
folder Varchar (255) Nama Folder bagian di dalam sistem
Dokumen pada sistem penyimpanan akan direlasikan kepada kata-kata indeks pada tabel t_index (Tabel 3.5). Pada tabel ini juga akan disimpan informasi dari variabel tf setiap kata yang dimiliki oleh dokumen dan seluruh posisi dari kata pada dokumen.
Tabel 3.5 Struktur Data Tabel t_index
Nama Kolom Tipe
Keterangan
id_data Integer (10) (Primary Key)
id_term Integer (10) (Primary Key)
tf Double Nilai variabel tf dari suatu term pada sebuah dokumen
position Text Posisi term di dalam sebuah dokumen
Tabel 3.6 Struktur Data Tabel t_term
Nama Kolom Tipe
Keterangan
id_term Auto Number (Primary Key)
term Varchar (50) Term suatu indeks istilah idf Double Nilai variabel idf dari suatu term
Tabel t_term (Tabel 3.6) menyimpan informasi setiap kata hasil pemrosesan dokumen yang berupa kata term tersebut dan nilai variabel idf dari kata.
3.2.4 Perancangan Antarmuka
3.2.4.1 Antarmuka Pengindeksan
Banner
Seluruh Dokumen Menu
Index Seluruh Dokumen
Bagian
Pilih Bagian Index Bagian
Dokumen
Dokumen 1 Dokumen 2 Dokumen 3 Dokumen 4 Dokumen 5 Dokumen 6 Dokumen 7 Dokumen 8 Dokumen 9 Dokumen 10
Navigasi
Index Dokumen
Gambar 3.13 Perancangan Antarmuka Pengindeksan
Antarmuka pengindeksan (Gambar 3.13) dirancang untuk digunakan oleh administrator untuk memilih pilihan indeks. Pilihan terdiri dari tiga macam yaitu seluruh dokumen, bagian dan indeks. Sistem akan mengindeks dokumen sesuai dengan pilihan yang diberikan oleh administrator.
3.2.4.2 Antarmuka Pencarian
Antarmuka pencarian digunakan oleh pengguna sistem untuk mencari dokumen yang berisi informasi yang diinginkan. Form pencarian dapat ditemukan pada setiap halaman dari sistem pencarian data. Gambar dari antarmuka pencarian dapat dilihat pada Gambar 3.14.
Form Pencarian
Banner
Search :
Menu
Hasil Pencarian
Gambar 3.14 Perancangan Antarmuka Pencarian
4. BAB IV IMPLEMENTASI DAN PEMBAHASAN
Setelah selesai melakukan tahap pemodelan, pengembangan perangkat lunak mulai memasuki tahap pembangunan yaitu kegiatan implementasi dan pengujian perangkat lunak. Pada kegiatan implementasi ini menerjemahkan hasil analisis dan perancangan perangkat lunak ke dalam bahasa mesin yang dikenal oleh komputer. Sedangkan untuk tahap pengujian kinerja sistem diperhitungkan untuk menyesuaikan dengan hasil yang diinginkan.
Pada tahap implementasi dibuat dua buah modul dan lima buah submodul untuk mendukung penelitian mengenai temu-kembali informasi. Modul dan submodul tersebut adalah :
• Modul pengindeksan o Submodul untuk parsing dan penghilangan stopwords pada pengindeksan
o Submodul perhitungan nilai variable idf • Modul pencarian o Submodul untuk pencarian frasa dari query
o Submodul untuk parsing dan penghilangan stopwords pada query
o Submodul pencocokan dokumen yang memiliki frasa tepat
Lingkungan yang dipakai dalam tahapan implementasi secara terperinci adalah sebagai berikut : Lingkungan yang dipakai dalam tahapan implementasi secara terperinci adalah sebagai berikut :
: Microsoft Windows XP.
• Bahasa Pemrograman : PHP Versi 5.0.5
• Basis data
: MySQL Versi 4.0.20a
b. Perangkat keras yang digunakan : • Processor AMD Athlon (tm) XP 1800+ 1,533 Ghz
• Monitor 15”
• Harddisk 80 GB
• RAM 1 GB
• Keyboard + Mouse
4.1 Sistem Penyimpanan Data
Untuk mendukung penelitian tentang sistem pencarian dengan metode temu-kembali informasi, maka dibuat sistem penyimpanan yang dapat menyimpan data berupa dokumen teks. Dokumen teks ini nantinya yang akan dicari oleh sistem pencarian. Dokumen teks ini akan disimpan di dalam sistem dan dikelompokan berdasarkan bagiannya. Penambahan bagian dan dokumen di dalam sistem penyimpanan data ini hanya dapat dilakukan oleh administrator sebagai pengguna yang memiliki otoritas tertinggi dan tentunya administrator ini memiliki nama user dan password untuk mengakses halaman admin di dalam sistem.
Gambar 4.1 Antarmuka Login Sistem Penyimpanan
Namun sebelum menambahkan bagian dan dokumen, administrator harus melakukan login ke dalam sistem dengan memasukan nama user dan password. Sistem selanjutnya akan melakukan verifikasi nama user dan password yang dimasukan oleh administrator tadi dengan cara mencari nama user dan password tersebut pada tabel t_user di dalam basis data. Antarmuka dari halaman login sistem penyimpanan dapat dilihat pada Gambar 4.1.
Jika nama user dan password yang dimasukan oleh administrator terdapat di dalam basis data pengguna, maka administrator selanjutnya akan memasuki halaman administrasi. Pada halaman administrasi (Gambar 4.2), administrator dapat memilih halaman untuk memanipulasi bagian dan data serta halaman untuk melakukan pengindeksan dokumen yang terdapat di dalam sistem.
Gambar 4.2 Antarmuka Halaman Administrasi
4.1.2 Halaman Manipulasi Bagian
Halaman manipulasi bagian (Gambar 4.3) merupakan halaman yang berfungsi untuk menambah, mengubah dan menghapus bagian di dalam sistem. Seperti yang telah disebutkan sebelumnya, dokumen di dalam sistem penyimpanan akan disimpan menjadi kelompok-kelompok dokumen. Pada sistem ini minimal harus terdapat satu kelompok dokumen. Jika tidak, maka dokumen tidak dapat dimasukan ke dalam sistem.
Gambar 4.3 Antarmuka Halaman Manipulasi Bagian
Pada halaman manipulasi bagian yang dapat dilihat pada Gambar 4.3, administrator akan memasukan nama bagian ke dalam form tambah bagian.untuk menambah bagian. Nanti nama bagian ini akan dimasukan ke dalam basis data. Namun, sebelumnya akan dilakukan pemeriksaan ke dalam basis data. Jika nama bagian yang akan ditambahkan sudah ada di dalam basis data, maka sistem akan menolak nama tersebut, sebaliknya jika nama tersebut belum ada maka sistem akan memasuki proses penambahan bagian baru.
Setelah nama bagian berhasil ditambahkan maka sistem akan membuat folder dari bagian tersebut pada media penyimpanan harddisk dengan format [folder home]/data/[nama bagian]. Pada folder tersebut nantinya dokumen pada suatu bagian akan diletakan. Setelah itu informasi dari nama bagian dan nama folder tersebut akan di simpan ke dalam tabel t_bagian pada basis data.
Untuk pengubahan nama bagian, juga akan mengubah nama folder dari bagian tersebut. Dan untuk penghapusan bagian, akan menghapus seluruh dokumen yang ada di dalam bagian serta menghilangkan folder pada mendia penyimpanan harddisk. Potongan kode program dari penambahan, pengubahan dan penghapusan bagian dapat dilihat pada Gambar 4.4.
if ($action== "add"){ $bagian =$_POST['bagian']; if ($bagian==""){
$msg = "Error : Nama Bagian harus diisi !! <br>"; } else{ $sql = "select * from t_bagian where nama_bagian='$bagian'"; if (@mysql_num_rows(mysql_query($sql))){ $msg = "Error : Nama Bagian Sudah ada!! <br>"; }else { $bag = preg_replace("/\W+/i","",$bagian); if (!$bag|| strlen($bag) <=1){
$msg = "Nama Bagian salah!!<br>"; } else{ $folder = preg_replace("/\W+/i","",$bagian); $folder = strtolower($folder); $folder = ereg_replace(" ", "_",$folder); $dir= "data/"; $sql = "Insert into t_bagian
values('','$bagian','$folder')";
if (mysql_query($sql)){ mkdir($dir.$folder); header('Location: admin_bagian.php?msg='.urlencode("::
Bagian Berhasil di tambahkan!!"));
}else{ $msg = "Query Error!! <br>"; $id_bagian=""; } } } } } elseif($action =="edit"){ $bagian_baru = $_GET['bagian_baru']; if ($bagian_baru==""){ $msg = "Error : Nama Bagian Baru harus diisi !! <br>"; } else{
$sql = "select * from t_bagian where nama_bagian='$bagian_baru'"; if (@mysql_num_rows(mysql_query($sql))){ $msg = "Error : Nama Bagian Sudah ada!! <br>"; }else { $bag = preg_replace("/\W+/i","",$bagian_baru); if (!$bag|| strlen($bag) <=1){
$msg = "Nama Bagian Baru salah!!<br>"; } else{ $folder = preg_replace("/\W+/i","",$bagian_baru); $folder = strtolower($folder); $folder = ereg_replace(" ", "_",$folder); $dir= "data/";
$sql = "Update t_bagian set nama_bagian='$bagian_baru', folder='$folder' where id_bagian='$id_bagian'"; if (mysql_query($sql)){ rename($dir.$folder_lama,$dir.$folder); header('Location: admin_bagian.php?msg='.urlencode("::
Bagian Berhasil di Update!!"));
}else{ $msg = "Query Error!! <br>"; $id_bagian="";
} } } } } elseif($action == "empty"){
$sql = "select letak,temp_file from t_data where id_bagian='$id_bagian'"; $rs = mysql_query($sql); while ($row = mysql_fetch_array($rs)){
unlink($row[0]); @unlink($row[1]); }
$sql = "DELETE from t_data where id_bagian='$id_bagian'"; if (mysql_query($sql)){ header('Location: admin_bagian.php?msg='.urlencode(":: Bagian
Berhasil di Kosongkan!!"));
}else{ $msg = "Query Error!! <br>"; $id_bagian=""; } } elseif($action == "delete"){ $dir = "data/"; $sql = "select letak,temp_file from t_data where id_bagian='$id_bagian'"; $rs = mysql_query($sql); while ($row = mysql_fetch_array($rs)){
unlink($row[0]); @unlink($row[1]);
} $sql = "select folder from t_bagian where id_bagian='$id_bagian'"; $folder = mysql_fetch_row(mysql_query($sql)); $sql = "DELETE from t_data where id_bagian='$id_bagian'";
mysql_query($sql); $sql = "Delete from t_bagian where id_bagian='$id_bagian'"; if (mysql_query($sql)){ rmdir($dir.$folder[0]); header('Location: admin_bagian.php?msg='.urlencode(":: Bagian
Berhasil di Hapus!!"));
}else{ $msg = "Query Error!! <br>"; $id_bagian=""; } }
Gambar 4.4 Potongan Kode Program Manipulasi Bagian
4.1.3 Halaman Manipulasi Data
Setelah administrartor menambah sebuah bagian pada sistem, maka selanjutnya administrator dapat mulai menambahkan data yang berupa dokumen teks ke dalam sistem. Halaman manipulasi data (Gambar 4.5) pertama kali akan memberikan daftar dari dokumen yang disimpan di dalam sistem sesuai dengan nama bagian yang dipilih oleh administrator. Untuk menambah data baru pada bagian tersebut, maka administrator dapat menekan tombol “add” yang berada Setelah administrartor menambah sebuah bagian pada sistem, maka selanjutnya administrator dapat mulai menambahkan data yang berupa dokumen teks ke dalam sistem. Halaman manipulasi data (Gambar 4.5) pertama kali akan memberikan daftar dari dokumen yang disimpan di dalam sistem sesuai dengan nama bagian yang dipilih oleh administrator. Untuk menambah data baru pada bagian tersebut, maka administrator dapat menekan tombol “add” yang berada
4.6) akan ditampilkan kepada administrator. Pada halaman ini, sebelum administrator memasukan dokumen, maka administrator minimal harus memasukan informasi mengenai nama data, bagian serta file dari data yang akan dimasukan ke dalam sistem. Jika semua persyaratan untuk memasukan dokumen sudah terpenuhi maka sistem akan melakukan proses penambahan data ke dalam tabel t_data pada basis data..
Gambar 4.5 Antarmuka Halaman Manipulasi Data
Gambar 4.6 Antarmuka Halaman Input Data
Sebelum sistem melakukan penambahan data dokumen ke dalam basis data, file dari dokumen akan di-upload ke dalam sistem dan diletakan sesuai dengan folder bagian yang sudah dipilih, selanjutnya sistem akan mengubah nama file dokumen menjadi format tahun_bulan_tanggal_jam_menit_detik_[nama file yang sudah di hilangkan spasi dan diubah huruf kapitalnya]. Hal ini bertujuan agar file yang memiliki nama yang sama tetapi isinya berbeda dapat dimasukan oleh administrator ke dalam sistem. Namun nama asli dari file dokumen tersebut akan disimpan di dalam basis data untuk digunakan pada saat pengguna dari sistem ingin men-download file tersebut.
Tipe file dokumen yang dapat disimpan di dalam sistem dapat terdiri dari
3 jenis yaitu file Microsoft Word, Microsoft Excel dan PDF. Akan tetapi, dokumen yang dimasukan ke dalam sistem pada penelitian ini hanya 3 jenis yaitu file Microsoft Word, Microsoft Excel dan PDF. Akan tetapi, dokumen yang dimasukan ke dalam sistem pada penelitian ini hanya
1. Catdoc, aplikasi untuk mengubah file Microsoft Word (.doc) menjadi file ascii. Aplikasi ini dapat di-download di http://www.45.free.net/~vitus/ice/ catdoc/
2. Xls2csv, aplikasi untuk mengubah file Microsoft Excel (.xls) menjadi file ascii. Aplikasi ini dapat di-download di http://www.45.free.net/~vitus/ ice/catdoc/
3. Xpdf, aplikasi untuk mengubah file pdf menjadi file ascii. Aplikasi ini dapat di-download di http://www.foolabs.com/xpdf/
File temporary ini disimpan pada folder [folder home]/tmp. File temporary ini isinya hanya teks utuh yang dimiliki oleh file dokumen yang dimasukan oleh administrator. Selain berfungsi untuk digunakan pada saat pengindeksan dokumen, file temporary ini juga dapat digunakan untuk melihat isi dari dokumen kepada pengguna, sebelum pengguna men-download file asli dari dokumen ini.
Sistem juga akan membuat deskripsi dari file yang dimasukan oleh administrator secara otomatis dengan cara mengambil 150 huruf pada awal dokumen. Modul untuk pengubahan file menjadi file temporary dan modul untuk mendapatkan deskripsi dari file dapat dilihat pada Gambar 4.7.
function getDesc($file,$type_file){ if ($type_file == "application/pdf"){ $bin = "bin/pdftotext/pdftotext.exe"; $type = "pdf";
}elseif($type_file == "application/vnd.ms-excel"){ $bin = "bin/catdoc/xls2csv.exe"; $type = "xls";
}elseif($type_file == "application/msword"){ $bin = "bin/catdoc/catdoc.exe"; $type = "doc";
} else{ $bin = ""; $desc = "Tidak terdapat deskripsi untuk file ini"; } if ($bin){
$ren = date("YmdHis_"); for ($i=1; $i<=8; $i++) { $temp_filename .= rand(1,9); } $temp_file = "tmp/".$temp_filename.".tmp"; $temp_file_save = "tmp/".$ren.$temp_filename.".tmp"; $dir = dirname($_SERVER['SCRIPT_FILENAME'])."/"; if (copy($file,$temp_file)){
$execute = $dir.$bin." ".$dir.$temp_file; if ($type == "doc" || $type == "xls"){ exec($execute,$output); for($i=0;$i <= count($output)-1 ;$i++){
$arrdesc.=$output[$i]."\n"; } if ($type =="xls"){ $arrdesc = ereg_replace(";"," ",$arrdesc); $arrdesc = ereg_replace("\""," ",$arrdesc);
} $berkas=fopen($temp_file_save,"w"); fputs($berkas,$arrdesc); fclose($berkas);
} elseif ($type == "pdf"){ exec($execute); $temp_file2 = $temp_file.".txt"; if (file_exists($temp_file2)){
$arrdesc = getFile($temp_file2); copy($temp_file2,$temp_file_save); unlink($temp_file2);
} else{ $desc = "Deskripsi file tidak ada."; } } if ($arrdesc){ $desc = preg_replace("/\n/"," ",$arrdesc); $desc = preg_replace("/\s+/"," ",$desc); $desc = preg_replace("/\s+[\d+\W*]*\s+/"," ",$desc); $desc = substr($desc,0,150)."...";
} } unlink($temp_file); } return array($desc,$temp_file_save);
Gambar 4.7 Modul Pengubahan File dan Pengambilan Deskripsi File
Selanjutnya sistem akan menyimpan seluruh informasi yang telah dibuat oleh sistem dari sebuah file dokumen tersebut ke dalam basis data. Potongan kode program dari manipulasi data dapat dilihat pada Gambar 4.8.
if ($action== "add"){ if(!$nama_data || !$upload_file || !$id_bagian){ $msg = "Yang bertanda <strong>*</strong> tidak boleh kosong!!"; $state = "add"; } else{ $ren = date("YmdHis"); $date = date ("Y-m-d"); $dir = "data/"; $nama_file = $upload_file['name'];
$nama_file_baru =$ren.strtolower(ereg_replace(" ","_",$nama_file)); $folder = getData("folder","t_bagian","id_bagian='".$id_bagian."'").
"/"; $letak = $dir.$folder.$nama_file_baru; $type_file = $upload_file['type']; $ukuran_file = $upload_file['size']; if (@copy($upload_file['tmp_name'],$letak)){
$desc = getDesc($letak,$type_file);
$sql = "insert into t_data values('','$id_bagian', '$date',
'$nama_data', '$letak', '$nama_file', '$type_file', '$ukuran_file', '$penulis', '".addslashes($desc[0])."', '".$desc[1]."')";
if(mysql_query($sql)){ $msg = ":: File berhasil di add!!"; header('Location: admin_data.php?id_bagian='.$id_bagian.
'&msg='.urlencode($msg));
}else{ $msg = "Query Error!!";
$state= "add";
} }else{ $msg = "File gagal di Upload!!"; $state= "add"; } } } elseif($action =="edit"){ if(!$nama_data || !$id_bagian){ $msg = "Yang bertanda <strong>*</strong> tidak boleh kosong!!"; $state = "edit"; } else{ $date = date ("Y-m-d"); if ($upload_file){ $filelama = getData("letak","t_data","id_data='$id_data'");
$temp_filelama = getData("temp_file", "t_data", "id_data= '$id_data'");
unlink($filelama); @unlink($temp_filelama); $ren = date("YmdHis"); $dir = "data/"; $nama_file = $upload_file['name'];
$nama_file_baru = $ren.strtolower(ereg_replace(" ", "_", $nama_file));
$folder = getData("folder", "t_bagian", "id_bagian= '".$id_bagian. "'")."/"; $letak = $dir.$folder.$nama_file_baru; $type_file = $upload_file['type']; $ukuran_file = $upload_file['size']; if (copy($upload_file['tmp_name'],$letak)){
$desc = getDesc($letak,$type_file); $sqlplus = "letak='$letak', nama_file='$nama_file',
type_file='$type_file', ukuran_file='$ukuran_file', deskripsi='".$desc[0]."', temp_file='".$desc[1]."',";
$sql = "Update t_data set id_bagian='$id_bagian’, nama_data= '$nama_data', tanggal='$date',$sqlplus penulis='$penulis' where id_data='$id_data'"; if(mysql_query($sql)){ $msg = ":: File berhasil di edit!"; header('Location: admin_data.php?id_bagian=' .$id_bagian. '&msg=' .urlencode($msg));
}else{ $msg = "Query Error!!"; $state= "edit";
} } } elseif($action == "delete"){ $filelama = getData("letak","t_data","id_data='$id_data'"); $temp_filelama = getData("temp_file","t_data","id_data='$id_data'");
unlink($filelama); @unlink($temp_filelama);
$sql = "delete from t_data where id_data='$id_data'"; if(mysql_query($sql)){ $msg ='Data berhasil di Hapus !!'; $sql = "delete from t_index where id_data='$id_data'"; header('Location: admin_data.php?id_bagian=' .$id_bagian. '&msg='
.urlencode($msg));
Gambar 4.8 Potongan Kode Program Manipulasi Data
4.1.4 Halaman Pengguna
Gambar 4.9 Antarmuka Halaman Pengguna
Halaman pengguna pada sistem pencarian dapat dilihat pada Gambar 4.9. Pada palaman ini, pengguna pertama kali diharuskan untuk memilih bagian dari dokumen. Setelah pengguna memilih bagian, maka pengguna dapat melihat dokumen yang terdapat di dalam bagian tersebut beserta seluruh informasi yang dimiliki oleh dokumen. Pengguna dapat melihat tanggal dari pengubahan dokumen ini, nama file serta ukuran dari file. Di setiap dokumen yang ditampilkan terdapat dua link, yang pertama berfungsi untuk men-download file dari dokumen dan yang kedua berfungsi untuk melihat isi dari dokumen tersebut. Gambar dari halaman dokumen dapat dilihat pada Gambar 4.10.
Gambar 4.10 Antarmuka Halaman Dokumen
Di setiap halaman yang dapat diakses oleh pengguna, terdapat sebuah form yang berfungsi untuk mencari dokumen yang memiliki suatu informasi tertentu dengan memasukan kata kunci ke dalam form. Form ini terletak pada bagian Di setiap halaman yang dapat diakses oleh pengguna, terdapat sebuah form yang berfungsi untuk mencari dokumen yang memiliki suatu informasi tertentu dengan memasukan kata kunci ke dalam form. Form ini terletak pada bagian
Gambar 4.11 Antarmuka Halaman Pencarian Canggih
4.2 Modul Pengindeksan
File dari modul pengindeksan diberi nama dengan nama tokenize.php dan digunakan hanya pada saat sistem temu-kembali melakukan pengindeksan dokumen. Di dalam modul ini akan dilakukan parsing dan penghilangan stopwords dari dokumen-dokumen yang akan diindeks dilanjutkan dengan penghitungan nilai variabel tf dan idf. Hasil dari pengindeksan akan disimpan ke dalam basis data yang akan digunakan pada saat pencarian dokumen.
Modul yang digunakan pada saat pengindeksan ada dua buah, yaitu modul untuk parsing dan penghilangan stopwords serta modul perhitungan variabel idf. Dokumen yang diindeks diambil dari media penyimpanan sesuai dengan pilihan yang diberikan oleh administrator. Namun sebelum itu, untuk mengetahui letak dokumen di media penyimpanan maka terlebih dahulu akan dilakukan pengambilan informasi dokumen dari tabel t_data pada basis data.
Awal dari modul pengindeksan adalah pendefinisian lamanya waktu indeks yang akan digunakan. Hal ini dimaksud agar waktu batas maksimum eksekusi file php yang sudah di set pada server web disesuaikan dengan lamanya waktu eksekusi pengindeksan dokumen. Perlu diingat pembuatan indeks sekumpulan dokumen dapat memakan waktu berjam-jam bahkan mungkin berhari-hari tergantung dari jumlah kata yang terdapat pada seluruh dokumen. Pada penelitian ini, untuk menghindari agar server web tidak menghetikan proses pengindeksan sebelum semua dokumen selesai diindeks maka batas maksimum waktu pengindeksan akan diatur menjadi 86400 detik yaitu selama satu hari penuh.
Setelah mengatur batas waktu maksimum maka dilakukan pengambilan daftar kata stopwords yang disimpan didalam sebuah file bernama stopwords.txt di dalam media penyimpanan. Isi dari daftar kata-kata stopwords yang disimpan di dalam file txt tersebut dapat dilihat pada Tabel 4.1
Tabel 4.1 Daftar kata stopwords pada file stopwords.txt
Stopwords
ada biasanya kalau menunjukkan sedang seusai adalah bila kalian
menurut sedangkan sewaktu adanya bilamana kami
mereka sedikit si adapun buat
merupakan segera siapa aduh bukan karena meski sehabis siapakah agar dalam kata
kamu
meskipun sehingga siapapun
ah dan katanya misalnya sehubungan suatu akan dapat kau
mungkin sejak sudah aku dari ke
namun sejumlah supaya alih-alih daripada kebanyakan nanti sekarang tak anda dekat kecuali nyaris sekeliling tanpa andai demi kemanakah oleh seketika tapi antar demikian kemudian pada sekitar tatkala
sekonyong-
antara dengan kenapa padahal konyong telah
apa depan kenapakah para selagi tengah apakah di
pasti selain tentang apalagi dia
kepada
pelbagai selalu tentu asalkan dikatakan ketimbang per
ketika
selama tentunya atas dilakukan kini
peri selanjutnya tergolong atau dkk kita
perihal selesai terhadap ataupun dll
pinggir seluruh terjadi Bagai dsb lain
lagi
pula seluruhnya terkadang bagaikan engkau lain-lain
semakin terlalu bagaimana hal
pun
semenjak terlebih bagaimanakah hampir
lainnya
saat
termasuk bagaimanapun hanya
ternyata bagi harus lepas
sampai semuanya tersebut bahkan hingga lewat
samping seorang tertentu bahwa ia
sang sepanjang tetap balik ialah makin
maka
sangat seperti tetapi banyak ini
manakala sangatlah sepertinya tiap barangkali itu
tiba-tiba bawah iya
masing-masing seakan seraya tidak beberapa jadi
ujar begini jangan maupun seantero seringkali ujarnya begitu jarang melainkan sebab serta umumnya belakang jauh
masing-masingnya seakan-akan sering
untuk belum jika melalui
melakukan sebabnya sesuai
sebagai sesuatu walau
berapa jikalau memang sebagaimana sesudah walaupun berbagai juga
mengatakan sebagainya sesudahnya ya bersama jumlah mengenai
sebelum sesungguhnya yaitu beserta justru menjadi
sebelumnya setelah yakni betapa kadang menjelang sebuah seterusnya yang biar kadang-kadang menuju secara setiap
Kata-kata yang terdapat pada Tabel 4.1 tersebut tidak akan digunakan sebagai kata di dalam indeks serta pada query pencarian. Penggunaan sebuah file stopwords.txt dikarenakan kata-kata tersebut tidak diperbarui secara rutin, walaupun ada penambahan kata stopwords dapat dilakukan secara mudah oleh administrator. Selanjutnya, kata-kata yang terdapat di dalam file stopwords.txt akan dimasukan kedalam sebuah variabel bertipe array untuk dapat digunakan oleh sistem secara mudah.
include "inc/ir.function.php"; set_time_limit(86400); // 1 full day $stopwords = file("./bin/stopwords.txt"); for ($i =0 ; $i <= count($stopwords) -1; $i++){
$stopwords[$i]= trim($stopwords[$i]); } $mode = $_POST['mode']; $id_data = $_POST['id_data']; $pilih_bagian = $_POST['pilih_bagian']; if ($mode == "all"){
$sql = "select id_data,temp_file from t_data"; }elseif($mode == "bagian"){ $sql = "select id_data,temp_file from t_data where id_bagian='$pilih_bagian'"; }else if ($mode == "dokumen"){ $OrSql = true; if (count($id_data)){
for ($i =0 ; $i <= count($id_data)- 1 ; $i++){ if (trim($id_data[$i])){ if ($OrSql){ $plussql = "id_data=".$id_data[$i]." "; $OrSql = false;
} else{ $plussql .= "OR id_data=".$id_data[$i]." "; } $QStr.= "id_data[]=".$id_data[$i]."&"; } } $sql = "select id_data, temp_file from t_data where $plussql";
} } $rs = mysql_query($sql,$konek);
Gambar 4.12 Kode Program modul Pengindeksan bagian pertama
Setelah pendefinisian lama waktu eksekusi dan pengambilan daftar kata stopwords, maka proses pengindeksan akan dilanjutkan ke proses pemilihan dokumen yang akan diindeks. Selanjutnya akan dilakukan pengambilan informasi dokumen yang akan diindeks dari basis data. Informasi yang diambil hanya letak Setelah pendefinisian lama waktu eksekusi dan pengambilan daftar kata stopwords, maka proses pengindeksan akan dilanjutkan ke proses pemilihan dokumen yang akan diindeks. Selanjutnya akan dilakukan pengambilan informasi dokumen yang akan diindeks dari basis data. Informasi yang diambil hanya letak
4.2.1 Submodul Parsing dan Penghilangan Stopwords
Setelah informasi mengenai dokumen sudah diambil dari basis data maka akan dilakukan pemecahan teks (parsing) dan penghilangan stopwords dari teks yang terdapat di dalam dokumen. Disini informasi dokumen yaitu id_data dan temp_file dari basis data akan digunakan satu per satu hingga informasi dokumen terakhir sesuai dengan pilihan yang diberikan oleh administrator. Dari informasi dokumen tersebut akan didapat isi dari dokumen berupa teks untuk digunakan oleh submodul parsing dan penghilangan stopwords.
Submodul parsing dan penghilangan stopwords akan memecah teks yang terdapat didalam dokumen menjadi token yang siap untuk digunakan pada indeks. Modul ini diberi nama indexText dan parameter masukan yang digunakan oleh modul ini ada dua yaitu teks yang didapatkan dari dokumen dan array stopwords hasil pendefinisian pada awal file pengindeksan.
function indexText($string,$stopwords){ global $buangkarakter; $str2 = strtolower($string); $str2 = strip_tags($str2); $str2 = preg_replace($buangkarakter," ",$str2); $arraystr = explode (" ",$str2);
$j=0; for ($i = 0 ; $i <= count($arraystr)-1 ; $i++){ $tokens =trim($arraystr[$i]); if ($tokens){
if (strlen($tokens) >2 && !in_array($tokens,$stopwords)){ $maxtoken[$tokens]++; $token[$tokens][0]++; $token[$tokens][1].= $j.","; $j++;
} } } return array($token,$maxtoken);
Gambar 4.13 Kode Program Submodul Parsing dan Penghilangan Stopwords
Setelah itu teks dari seluruh dokumen akan diseragamkan menjadi huruf kecil semua. Dilanjutkan dengan proses penghilangan kode-kode html, penghilangan tanda baca dan diakhiri dengan proses penghilangan stopwords dari teks dokumen. Hasil dari submodul ini adalah array dua dimensi yang dimensi pertama berisi array frekuensi kata dan posisi dari kata pada dokumen dan posisi dimensi kedua berisi array frekuensi kata. Kode program dari submodul parsing dan penghilangan stopwords dapat dilihat pada Gambar 4.13.
$string = file_get_contents($row[1]); $temp_tokens = indexText($string,$stopwords); $maxText = max($temp_tokens[1]); $totaltxt = count($temp_tokens[0]); $j = 0;
$i=0; $OrSql = true; foreach($temp_tokens[0] as $token => $property){
usleep(50000); $tf=number_format($property[0]/$maxText,4);
$position = substr($property[1],0,-1); $i++; if (!getCount("t_term","term='$token'")){
$sqltoken= "insert into t_term values('','$token','')"; mysql_query($sqltoken); $id_term= mysql_insert_id();
}else { $id_term= getData("id_term","t_term","term='".$token."'"); } $array_sql[$j][0] = $row[0]; $array_sql[$j][1] = $id_term; $array_sql[$j][2] = $tf; $array_sql[$j][3] = $position; $j++;
if ($j==200 || $i == $totaltxt){ usleep(50000); for ($k=0; $k <=count($array_sql);$k++){
if ($k % 15 == 0){ usleep(50000); } $sqlindex = "insert into t_index values('".$array_sql[$k][0]."', '".$array_sql[$k][1]."', '".$array_sql[$k][2]."', '".$array_sql[$k][3]."')";
mysql_query($sqlindex,$konek); } $j=0; unset($array_sql);
Gambar 4.14 Kode Program Modul Pengindeksan Bagian Kedua
Hasil dari submodul tersebut akan dimasukan ke dalam dua variabel yang akan digunakan untuk proses penambahan atau perubahan data di dalam basis data. Sebelumnya terlebih dahulu kata akan dicek terlebih dahulu ke tabel t_term di dalam basis data. Kata yang sudah terdapat di dalam basis data tidak akan dimasukan kembali dan token yang belum terdapat di dalam basis data akan ditambahkan ke tabel t_term. Setelah itu akan dilakukan penambahan data ke tabel t_index di dalam basis data. Kode program dari penggunaan submodul parsing dan penghilangan stopwords pada file pengindeksan dapat dilihat pada Gambar 4.14.
Jika dilihat pada Gambar 4.14 proses penambahan token ke dalam tabel t_index dilakukan berulang-ulang. Hal ini akan menyebabkan kinerja prosessor yang meningkat dalam waktu yang cukup lama. Untuk menghindari hal itu maka digunakan fungsi usleep untuk menghentikan sesaat kerja dari prosessor komputer. Pada Gambar 4.14 perintah tersebut diberi nilai 50000 yang berarti 50000 mikrodetik atau sebesar 0,05 detik adalah lamanya waktu berhenti sesaat kerja dari prosessor.
4.2.2 Submodul Perhitungan Variabel idf
Setelah seluruh informasi indeks selesai dimasukan ke dalam tabel t_term dan informasi token pada setiap dokumen sudah dimasukan ke dalam tabel t_index, maka dapat dilakukan perhitungan variabel idf yang akan disimpan pada tabel t_term. Variabel idf ini dapat dihitung dengan rumus :
idf i = log
n i ⎟⎟⎠
Dimana : idf i = nilai idf dari suatu elemen kata i N = jumlah dari seluruh dokumen di dalam sistem
n i = jumlah frekuensi dokumen yang memiliki kata i
Dari rumus tersebut dapat diambil kesimpulan, apabila terdapat penambahan sebuah dokumen maka nilai dari variabel idf-nya harus diperbarui pada setiap kata yang terdapat dalam sistem. Hal ini tidak dapat dihindari karena terdapat variabel N dan n i dari rumus tersebut yang merupakan jumlah dari dokumen di dalam sistem. Perhitungan variabel idf ini akan membuat pengindeksan memakan waktu yang cukup lama.
function CreateIDF(){ global $konek; $OrSQL = true;
$sql = "select id_term from t_term"; $rs = mysql_query($sql,$konek); $totalDocument = getCount("t_data","id_data");
$j=0; while ($row = mysql_fetch_row($rs)){ usleep(50000); $totalUsedTerm = getCount("t_index","id_term='".$row[0]."'"); $idf = number_format(log($totalDocument/$totalUsedTerm),4); $term[$j][0] = $row[0]; $term[$j][1] = $idf; $j++;
} usleep(100000); for ($k=0 ; $k<=count($term)-1;$k++){ if ($k % 15 == 0){ usleep(50000); } $sqlidf = "update t_term set idf='".$term[$k][1]."' where
id_term='".$term[$k][0]."'"; mysql_query($sqlidf); } }
Gambar 4.15 Kode Program Submodul perhitungan idf
Submodul perhitungan idf ini tidak memiliki masukan karena semua datanya dapat diambil pada basis data. Submodul ini diberi nama CreateIDF. Penggunaan submodul ini juga akan menyebabkan sistem menggunakan kerja prosessor yang cukup lama. Maka dari itu, pada submodul ini juga digunakan Submodul perhitungan idf ini tidak memiliki masukan karena semua datanya dapat diambil pada basis data. Submodul ini diberi nama CreateIDF. Penggunaan submodul ini juga akan menyebabkan sistem menggunakan kerja prosessor yang cukup lama. Maka dari itu, pada submodul ini juga digunakan
Gambar 4.16 Antarmuka Halaman Pengindeksan
Submodul ini di dalam modul pengindeksan dipanggil pada bagian akhir. Penggunaan submodul ini juga mengakhiri dari kegiatan pengindeksan. Antarmuka dari halaman pengindeksan dapat dilihat pada Gambar 4.16.
4.3 Modul Pencarian
if (trim($q)){ $mtime=microtime(); $mtime=explode(" ",$mtime);
$mtime=$mtime[1] + $mtime[0]; $tstart=$mtime; $phrase = getPhraseArray($q,$stopwords); $plussql = getTermArray($q,$stopwords); $sql = "select distinct t_data.id_data
from t_index,t_term,t_data where t_index.id_term=t_term.id_term and
t_data.id_data=t_index.id_data and ($plussql) $addSqlBagian $addSqlType"; $rs = mysql_query($sql,$konek); if (@mysql_num_rows($rs)){ while ($row = mysql_fetch_row($rs)){ unset($Dvektor); unset($tf); unset($idf);
for ($i = 0 ; $i <= count($phrase)-1;$i++){ if($wij = getTruePhrase($phrase[$i],$row[0],$stopwords)){
$numQterm++; $atas += ($wij[0]); $qvektor += ($wij[1]); $found = true; $search = true;
} } if ($numQterm){ $sqldi = "SELECT sum((t_index.tf* t_term.idf)*( t_index.tf*t_term.idf)) FROM t_term, t_index WHERE t_index.id_data ='".$row[0]."' AND t_term.id_term = t_index.id_term";
$bawah = mysql_result(mysql_query($sqldi),0); $penyebut = $bawah*$qvektor; $sim[$row[0]] = @($atas / sqrt($penyebut));
} unset($numQterm); unset($bawah); unset($atas); unset($qvektor);
} $mtime=microtime(); $mtime=explode(" ",$mtime); $mtime=$mtime[1] + $mtime[0]; $tend=$mtime; $totaltime=($tend-$tstart);
$totaltime=number_format($totaltime,4); } else{ $messages= ":: Data tidak ditemukan!!"; $found = false; } }else { $messages = ":: Kata apa yang mau anda cari?"; $found = false;
Gambar 4.17 Kode Program Modul Pencarian
Setelah pengindeksan selesai, maka proses pencarian dapat dilakukan. Pada penelitian ini modul pencarian akan menggunakan sebuah file yaitu search.php. Pada file ini kata kunci yang diberikan oleh pengguna akan diproses Setelah pengindeksan selesai, maka proses pencarian dapat dilakukan. Pada penelitian ini modul pencarian akan menggunakan sebuah file yaitu search.php. Pada file ini kata kunci yang diberikan oleh pengguna akan diproses
Pada awal pengambilan kata kunci, akan diambil nilai dari waktu awal pengeksekusian file pencarian. Lalu pada akhir dari fungsi kesamaan akan diambil juga nilai waktu akhir. Selisih waktu awal dan waktu akhir ini digunakan untuk informasi kepada pengguna mengenai lamanya pencarian yang dilakukan oleh sistem. Potongan kode program pada file pencarian dapat dilihat pada Gambar
Modul pencarian menggunakan tiga buah submodul yaitu modul untuk pencarian frasa pada query, submodul parsing dan penghilangan stopwords pada query dan modul untuk pengecekan frasa tepat pada dokumen sesuai dengan frasa pada query yang diberikan.
4.3.1 Submodul Pencarian Frasa pada Query
function getPhraseArray($q,$stopwords){ $quoted = explode('"', $q); for($i = 0; $i <= count($quoted)-1 ; $i++) {
if($i == 0 && !$quoted[$i]) { //kutip pada awal kata kunci $begin = True; $i++;
} if($begin) { $phrase[] = $quoted[$i]; }
elseif($quoted[$i]) { $temp_phrase = explode(" ", $quoted[$i]); for($n = 0; $n < count($temp_phrase); $n++) {
$str = trim($temp_phrase[$n]); if(trim($str) && !in_array($str,$stopwords)) {
$phrase[] = $str; } } } $begin = !$begin; } return $phrase;
Gambar 4.18 Kode Program Submodul Pencarian Frasa pada Query
Submodul ini diberi nama getPhraseArray. Kode program dari submodul pencarian frasa pada query dapat dilihat pada Gambar 4.18. Pengguna sistem didalam melakukan pencarian dapat mencari frasa yang terdapat di dalam dokumen dengan cara memberikan tanda kutip (“) sebagai batas frasa pada kata kunci yang dimasukan. Adakalanya pengguna memasukan lebih dari dua frasa pada kata kunci. Misal pengguna memasukan kata kunci: ‘ “bom bali” “kenaikan bbm” ’, maka sistem akan memecah kata kunci tersebut menjadi dua buah bagian frasa “bom bali” dan “kenaikan bbm”. Kedua frasa ini akan disimpan ke dalam array untuk digunakan pada proses selanjutnya.
Masukan dari submodul ini terdiri dari dua macam yaitu kata kunci yang diberikan oleh pengguna serta array dari daftar stopwords yang diambil dari file stopwords.txt.
4.3.2 Submodul untuk Parsing dan Penghilangan Stopwords
Setelah kata kunci di proses untuk memisahkan frasa, maka pemrosesan selanjutnya yaitu pemisahan kata-kata di dalam kata kunci untuk di sesuaikan dengan indeks yang terdapat di dalam basis data. Submodul untuk parsing dan penghilangan stopwords akan memecah kata kunci tersebut menjadi beberapa kata lalu akan dicocokan dengan kata yang terdapat di dalam tabel t_term pada basis data. Namun sebelum itu kata-kata yang termasuk ke dalam stopwords akan dibuang.
Masukan dari submodul ini sama dengan submodul pencarian frasa. Perbedaannya terletak pada proses pemecahan teks pada kata kunci dari query. Pada submodul frasa kata kunci akan dipecah menjadi frasa-frasa yang sesuai berdasarkan tanda kutip (“) sebagai pemisah frasa, sedangkan pada submodul ini kata kunci akan dipecah berdasarkan tiap-tiap katanya. Misal: kata kunci ‘“bom bali” “kenaikan bbm”’ akan dipecah menjadi kata “bom”, “bali”, “kenaikan” dan “bbm”. Lalu setelah itu kata-kata tersebut akan di cari di dalam basis data untuk disesuaikan.
Pada Gambar 4.19 dijabarkan kode program dari submodul parsing dan penghilangan stopwords. Pada gambar tersebut dapat dilihat keluaran dari submodul ini adalah array yang berisi penyataan SQL untuk meng-query seluruh dokumen yang memiliki kata-kata yang terdapat pada kata kunci yang diberikan oleh pengguna ke dalam basis data. Pernyataan SQL yang dihasilkan pada submodul ini akan digunakan untuk mencari id_data dari dokumen yang memiliki kata yang sesuai dengan kata kunci dan juga kata kunci tersebut harus terdapat di Pada Gambar 4.19 dijabarkan kode program dari submodul parsing dan penghilangan stopwords. Pada gambar tersebut dapat dilihat keluaran dari submodul ini adalah array yang berisi penyataan SQL untuk meng-query seluruh dokumen yang memiliki kata-kata yang terdapat pada kata kunci yang diberikan oleh pengguna ke dalam basis data. Pernyataan SQL yang dihasilkan pada submodul ini akan digunakan untuk mencari id_data dari dokumen yang memiliki kata yang sesuai dengan kata kunci dan juga kata kunci tersebut harus terdapat di
function getTermArray($q,$stopwords){ global $konek; $user_query = trim(strtolower($q)); $user_query = ereg_replace('"',"",$user_query); $array_user_query = explode(" ",$user_query); $orSql = true; for ($i=0 ; $i <= count($array_user_query) -1 ; $i++){
if (!in_array($array_user_query[$i],$stopwords)){ if ($orSql){ $plussql = "t_term.term = '".$array_user_query[$i]."'"; $orSql = false;
}else{ $plussql .= " or t_term.term = '".$array_user_query[$i]."'"; } } } $orSql = true; $sql = "select distinct id_term
from t_term where $plussql";
$rs = mysql_query($sql,$konek); if (@mysql_num_rows($rs)){ while ($row= mysql_fetch_row($rs)){ if ($orSql){ $plussql = "t_term.id_term='".$row[0]."'";
$orSql = false; }else { $plussql .= " or t_term.id_term='".$row[0]."'";
} } } return $plussql;
Gambar 4.19 Kode Program Submodul Parsing dan Penghilangan Stopwords
4.3.3 Submodul pencocokan dokumen yang memiliki frasa tepat
Setelah id_data diambil maka dapat dicari frasa yang sesuai dengan frasa yang sudah didapatkan dari submodul pencarian frasa. Setiap id_data yang didapatkan akan dicocokan kata per kata sesuai dengan posisinya di dalam dokumen. Urutan dari tiap-tiap kata di dalam frasa harus sama dengan urutan frasa yang sudah di dapatkan.
Kode Program dari submodul ini dapat dilihat pada Gambar 4.20.
function getTruePhrase($phrase,$id_data,$stopwords){ global $konek; global $buangkarakter;
$temp = explode(" ",$phrase); for ($i=0 ; $i <= count($temp) -1 ; $i++){
if (!in_array($temp[$i],$stopwords)){ $array_kunci[] = preg_replace($buangkarakter,"",$temp[$i]); } } for ($i = 0 ; $i <= count($array_kunci) -1 ; $i++){ $sql = "SELECT t_index.position,t_index.tf,t_term.idf FROM t_index, t_term WHERE t_index.id_data = '".$id_data."' AND t_term.term = '".$array_kunci[$i]."' AND t_index.id_term = t_term.id_term";
$result = mysql_query($sql,$konek); if ($row = @mysql_fetch_row($result)){ $array_phrase[$i]= explode(",",$row[0]); $diwq += ($row[1]*$row[2])*$row[2]; $wq += ($row[2]*$row[2]);
}else{ return false; } } if (count($array_kunci) > 1){ $match = false; $banyak_letak_kata1 = count($array_phrase[0]);
for ($i = 0 ; $i <= $banyak_letak_kata1-1 ;$i++){ $j = 1; $letak = $array_phrase[0][$i]; while ($j <= count($array_phrase)-1){
if (in_array($letak+1,$array_phrase[$j])){ if($j == count($array_phrase)-1){ $match = true; $j++;
}else{ $letak++; $j++;
} }else{ break; } } if ($match){ break; } } if ($match){ return array($diwq,$wq); }else{ return false; } }else{ return array($diwq,$wq); } }
Gambar 4.20 Kode Program submodul Pencocokan Dokumen yang memiliki frasa tepat.
Submodul ini memiliki tiga masukan yaitu array dari frasa, id_data dan array kata stopwords. Pada awal pemrosesan, submodul ini akan memecah setiap Submodul ini memiliki tiga masukan yaitu array dari frasa, id_data dan array kata stopwords. Pada awal pemrosesan, submodul ini akan memecah setiap
Keluaran dari submodul ini adalah array yang berisi jumlah perkalian dari bobot kata (tf·idf) dengan bobot dari query, jumlah kuadrat dari bobot kata dan jumlah kuadrat dari bobot query. Array ini akan digunakan untuk penghitungan fungsi kesamaan dengan rumus:
w qj ⋅ w ∑ ij
j = sim 1 ( Q , D
ij ) × ( w ∑ )
qj
Dimana : sim(Q,Di) = nilai fungsi kesamaan dari dokumen D i pada
query Q w qj = bobot dari kata j pada query
w ij = bobot dari kata j pada dokumen ke i
t = jumlah indeks kata pada sistem Submodul ini akan bernilai false jika dokumen tidak memiliki frasa yang
sesuai dengan frasa yang didapatkan dari kata kunci. Setelah dokumen dihitung nilai kesamaannya, maka nilai-nilai tersebut akan dimasukan ke dalam array untuk sesuai dengan frasa yang didapatkan dari kata kunci. Setelah dokumen dihitung nilai kesamaannya, maka nilai-nilai tersebut akan dimasukan ke dalam array untuk
Gambar 4.21 Tampilan Antarmuka Modul Pencarian
4.4 Evaluasi Sistem Temu-Kembali Informasi
Pada Bagian ini akan dijelaskan mengenai pengujian sistem temu-kembali informasi. Dokumen sebagai bahan dari pengujian ini didapatkan dari artikel berita utama kompas edisi cetak (http://kompas.com/kompas-cetak/) dan republika edisi cetak (http://www.republika.co.id) selama bulan Oktober tahun 2005, kecuali untuk tanggal 29 Oktober 2005 tidak terdapat dokumen pada website republika.
Dokumen akan dipisah menjadi dua bagian sesuai dengan nama sumber dari dokumen tersebut yaitu bagian kompas dan republika. Bagian kompas terdiri dari 212 dokumen dan republika terdiri dari 180 dokumen, jadi total seluruh Dokumen akan dipisah menjadi dua bagian sesuai dengan nama sumber dari dokumen tersebut yaitu bagian kompas dan republika. Bagian kompas terdiri dari 212 dokumen dan republika terdiri dari 180 dokumen, jadi total seluruh
Proses pengindeksan memperoleh jumlah kata unik untuk dijadikan indeks sebanyak 16.828 kata, dan terdapat sebanyak 79.345 hubungan antara kata yang diindeks dengan dokumen. Proses pengindeksan memakan waktu selama 2 Jam
35 menit 29 detik. Ukuran dari basis data untuk pengindeksan sebesar 4.115,2 KB.
4.4.1 Evaluasi Recall dan Precision
Tabel 4.2 Deskripsi Dokumen Sampel Pengujian
Pengujian Kata Kunci Dokumen Relevan Total Kompas Republika
K01 Bantuan Langsung Tunai (BLT) 20 11 31 K02
“Kenaikan Harga BBM” 24 16 40 K03
Kasus Suap “Makamah Agung 18 6 24 K04
Bom Bunuh Diri Bali 22 12 34 K05 Gempa Pakistan
3 6 9 K06
Arus Mudik Lebaran 6 10 16 Lain-lain
Jumlah seluruh Dokumen
Evaluasi sistem akan dilakukan dengan metode recall dan precision. Pengujian dilakukan dengan memasukan kata kunci sesuai dengan deskripsi. Sampel pengujian diambil sebanyak 6 buah sesuai tertera pada Tabel 4.2 yaitu K01 sampai dengan K06.
Tabel 4.3 Kinerja Sistem temu-kembali dengan menggunakan 6 Sampel
Precision
Recall K01 K02 K03 K04 K05 K06
Average Precision
Pengujian dengan sampel K01 didapatkan sebanyak 161 dokumen dengan rata-rata lama proses pencarian selama 3,8 detik. Pada Tabel 4.3 dapat dilihat bahwa sampel K01 pada titik recall 10% memiliki nilai precision sebesar 100%, selanjutnya pada titik recall 20% memiliki nilai precision sebesar 100% dan begitu seterusnya sehingga dari data tersebut dapat dibentuk kurva recall- precision untuk sampel K01 yang dapat dilihat pada Gambar 4.22.
Kurva Recall-Precision Sampel K01
P reci
Recall
Gambar 4.22 Kurva Recall-Precision Sampel K01
Pengujian dengan sampel kata kunci K02 didapatkan 70 dokumen dengan rata-rata lama proses pencarian 2,2 detik. Kurva recall-precision untuk sampel K02 dapat dilihat pada Gambar 4.23.
Kurva Recall Precision Sampel K02
reci P
Recall
Gambar 4.23 Kurva Recall-Precision Sampel K02
Pada sampel K02 dapat dilihat pada nilai recall 70%, 80%, 90% dan 100% tidak didapatkan nilai persentase dari precision. ini berarti bahwa tidak seluruh dokumen yang memiliki informasi mengenai “’kenaikan harga bbm’” dapat ditemu-kembalikan oleh sistem pencarian.
Kurva Recall-Precision Sampel K03
n 60 s io 50
40 K03 P reci 30 20
Gambar 4.24 Kurva Recall-Precision Sampel K03
Pengujian dengan sampel kata kunci K03 didapatkan 119 dokumen dengan rata-rata lama proses pencarian 2,8 detik. Pada sampel K03 ini juga didapatkan nilai precision 0% pada recall 90% dan 100%. Ini juga berarti tidak seluruh dokumen yang memiliki informasi mengenai “kasus suap ‘makamah agung’” berhasil ditemu-kembalikan oleh sistem. Kurva recall-precision untuk sampel K03 dapat dilihat pada Gambar 4.24.
Kurva Recall Precision Sampel K04
reci P
Recall
Gambar 4.25 Kurva Recall-Precision Sampel K04
Pengujian dengan sampel kata kunci K04 didapatkan 141 dokumen dengan rata-rata lama proses pencarian 3,5 detik dengan rata-rata nilai precision sebesar 96,5279% pada setiap titik recall. Hal ini terjadi karena kata kunci yang dimasukan memiliki keunikan dibandingkan kata kunci lainnya sehingga sistem dapat melakukan proses temu-kembali hampir mendekati maksimal Grafik recall- precision untuk sampel K04 dapat dilihat pada Gambar 4.25.
Pengujian dengan sampel kata kunci K05 didapatkan 13 dokumen dengan rata-rata lama proses pencarian 0,2 detik dengan rata-rata nilai precision sebesar
79,043% pada setiap titik recall.. Kurva recall-precision untuk sampel K05 dapat dilihat pada Gambar 4.26.
Kurva Recal-Precision Sampel K05
Gambar 4.26 Kurva Recall-Precision Sampel K05
Pengujian dengan sampel kata kunci K06 didapatkan 52 dokumen dengan rata-rata lama proses pencarian 1,04 detik dengan rata-rata nilai precision sebesar 82,0147% pada setiap titik recall. Kurva recall-precision untuk sampel K06 dapat dilihat pada Gambar 4.27.
Kurva Recall-Precision Sampel K06
reci P
Recall
Gambar 4.27 Kurva Recall-Precision Sampel K06
Dari hasil pengujian sampel dokumen sesuai dengan kata kunci K01 sampai K06 dapat dilihat perbedaan waktu pencarian yang ditempuh. Perbedaan waktu pencarian ini didapatkan dari dua faktor, banyaknya dokumen yang berhasil ditemu-kembalikan dan banyaknya kata kunci yang dimasukan. Sedangkan untuk keakuratan hasil pencarian untuk mendapatkan dokumen yang relevan tergantung pada keunikan kata kunci yang diberikan oleh pengguna.
Sedangkan untuk pencarian dengan menggunakan frasa tepat lebih mengurangi jumlah recall dari hasil pencarian. Akan tetapi, penggunaan frasa tepat ini tidak menaikan nilai precision sehingga tidak seluruh dokumen yang relevan dapat ditemu-kembalikan ke pengguna.
Kinerja dari sistem temu-kembali pada sampel dokumen K01 sampai K06 dapat dilihat pada Tabel 4.3. Secara kinerja sistem temu-kembali yang dikembangkan sudah cukup baik karena dengan rata-rata average precision sekitar 71,31973% yang berarti rata-rata tiap recall point, 71,31973% dokumen yang berhasil ditemu-kembalikan relevan dengan query yang diberikan.
5. BAB V KESIMPULAN DAN SARAN