• Tidak ada hasil yang ditemukan

Modul Pencarian

Dalam dokumen SKRIPSI SISTEM TEMU KEMBALI INFORMASI DE (Halaman 92-99)

BAB IV IMPLEMENTASI DAN PEMBAHASAN

4.3 Modul Pencarian

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

terlebih dahulu dengan proses parsing dan penghilangan stopwords, lalu akan dibentuk array yang berisi kata-kata yang terdapat dalam indeks. Dari kata kunci juga akan dibuat array yang berisi frasa yang mungkin dibuat oleh pengguna. Setelah itu akan dilanjutkan dengan pencarian dokumen yang memiliki frasa tepat sesuai dengan masukan oleh pengguna, penghitungan bobot, fungsi kesamaan dan yang terakhir pengurutan dokumen berdasarkan bobotnya. Setelah dokumen terurut maka hasilnya dapat ditampilkan kembali kepada pengguna.

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

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

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.

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

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

dalam tabel t_term. Id_data dari dokumen tersebut diambil dari tabel t_index pada basis data.

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

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

kata frasa yang dipisahkan oleh spasi. Apabila di dalam frasa tersebut terdapat kata stopwords maka akan dihilangkan juga. Setelah itu akan diambil dari basis data informasi mengenai posisi kata, nilai tf dari kata dan nilai idf dari kata pada dokumen yang dengan id_data sesuai pada masukan. Jika frasa yang dimasukan hanya terdiri dari satu kata maka submodul ini akan langsung memberikan hasilnya, kalau tidak, akan di cari urutan frasa yang benar pada dokumen berdasarkan posisi yang sudah diambil dari basis data.

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:

= = = × ⋅ = t j qj t j ij t j ij qj i w w w w D Q sim 1 2 1 2 1 ) ( ) ( ) , (

Dimana : sim(Q,Di) = nilai fungsi kesamaan dari dokumen Di pada

query Q

wqj = bobot dari kata j pada query

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

diurutkan. Lalu hasil dari pencarian dokumen akan tampilkan kepada pengguna. Tampilan antar muka pencarian dapat dilihat pada Gambar 4.21.

Gambar 4.21 Tampilan Antarmuka Modul Pencarian

Dalam dokumen SKRIPSI SISTEM TEMU KEMBALI INFORMASI DE (Halaman 92-99)

Dokumen terkait