Information Retrieval (IR)
sering disebut juga temu kembali infromasi adalah: ilmu yang
mempelajari prosedur-prosedur dan metode-metode untuk menemukan kembali
infromasi yang tersimpan dari berbagai sumber (resources) yang relevan atau koleksi sumber informasi yang dicari atau dibutuhkan. Dengan tindakan index (indexing), panggilan (searching), pemanggilan data kembali (recalling).
Dalam pencarian data bisa mencakup texts, table, gambar, video, audio.
Adapun tujuan dari Infromation Retrieval ialah untuk memenuhi informasi
pengguna dengan cara meretrieve dokumen yang relevan atau menguragi
dokumen pencarian yang tidak relevean.
Cotoh Penerapan Information Retrieval dengan PHP dan Mysql sbb:
1). Buat Data Base dengan MySql dengan nama database fsakti
a) Buat tabel beriata
CREATE TABLE IF NOT EXISTS `tbberita` (
`Id` int(11) NOT NULL
AUTO_INCREMENT,
`Judul` varchar(100) NOT NULL,
`Berita` varchar(255) NOT NULL,
PRIMARY KEY (`Id`)
) ENGINE=MyISAM DEFAULT
CHARSET=latin1 AUTO_INCREMENT=17 ;
|
INSERT INTO `tbberita` (`Id`, `Judul`, `Berita`) VALUES
(1, 'CR9 Bikin Mourinho Tak Sabar ke Madrid', 'Yang spesial dari
rencana kepindahan Jose Mourinho ke Real Madrid adalah pertemuan dia dengan
Cristiano Ronaldo. Mengaku tak sabar bertemu rekan senegaranya itu, Mourinho
juga berharap banyak gol dari CR9. '),
(2, 'Jepang Mau Sampai Semifinal', 'Kalah atas Korea Selatan tak
membuat kepercayaan diri Jepang menyusut. Pelatih ''Samurai Biru'', Takeshi
Okada, malah memasang target tinggi dengan menembus babak semifinal. '),
(3, 'Simpati Milito untuk Cambiasso & Zanetti', 'Diego Milito
mengungkapkan rasa simpatinya kepada rekannya di Inter Milan. Meski sama-sama
meraih treble di Inter namun Esteban Cambiasso dan Javier Zanetti tak masuk
skuad Argentina. '),
(4, 'Neville Belum Berencana Pensiun', 'Gary Neville bersikukuh belum
mau pensiun dari timnas Inggris. Meskipun sudah jarang dipanggil memperkuat
The Three Lions, bek 35 tahun ini mengaku siap bermain saat negerinya
membutuhkan jasanya'),
(5, 'Lawan Meksiko, Capello Banyak Belajar', 'Inggris tampil meyakinkan
saat mengalahkan Meksiko 3-1. Namun manajer Inggris Fabio Capello mengaku
bahwa mendapatkan banyak pelajaran dalam laga ujicoba tersebut.'),
(6, 'Maradona Hapus Kekhawatiran', 'Tanpa diperkuat beberapa bintang
besarnya, Argentina sukses menghajar Kanada dengan skor telak 5-0. Atas hasil
tersebut Diego Maradona yakin kalau publik negaranya bakal berhenti
khawatir.'),
(7, ' Giuseppe Meazza Tak Tidur ', 'Sebuah malam bersejarah telah
diraih Inter Milan, ketika mereka kembali menjadi juara Eropa untuk kali
pertama dalam 45 tahun. Puluhan ribu tifosinya pun tidak mau melewatkan malam
besar itu. '),
(8, 'Cambiasso: Selamat Jalan, Mourinho', 'Rumor hijrahnya Jose
Mourinho dari Inter Milan ke Real Madrid sudah kian santer. Esteban Cambiasso
pun memberi pernyataan yang secara tak langsung seperti membenarkan spekulasi
yang ada.'),
(9, 'Seandainya Ribery Bisa Tampil', 'Franck Ribery terpaksa hanya
menonton laga final Liga Champions dari bangku cadangan. Akibatnya, strategi
yang dijalankan Bayern Muenchen tidak sesuai yang diharapkan sehingga mereka
menelan kekalahan. '),
(10, 'Sneijder: Semua karena Mourinho', 'Trofi pertama Liga Champions
sejak 45 tahun silam berhasil diraih oleh skuad terkini Inter Milan. Sukses
itu boleh disebabkan oleh banyak hal, tapi sosok Jose Mourinho-lah yang
dinilai sebagai aspek terpenting.'),
(11, 'Reina: Torres Bertahan di Anfield', 'Spekulasi masa depan
Fernando Torres di Liverpool masih terus menghangat. Namun kiper Pepe Reina
yakin rekan senegaranya tersebut akan tetap bertahan di Anfield musim depan.
'),
(12, 'Liverpool Buruk karena Dana Minim', 'Musim 2009/2010 boleh
disebut sebagai musim paling buruk yang pernah dialami Liverpool. Manajer
Rafael Benitez "mendakwa" faktor minimnya dana sebagai penyebabnya.
'),
(13, 'Fergie: Hargreaves Harus Berani', 'Owen Hargreaves mengalami
krisis kepercayaan diri pasca comeback dari cedera panjang. Sir Alex Ferguson
menyarankan anak buahnya itu harus memiliki mental baja agar bisa kembali ke
permainan terbaiknya. '),
(14, 'Blackpool Raih Tiket Terakhir Premier League', 'Setelah menanti
hampir selama empat dasawarsa, Blackpool kembali ke top-flight usai
mengalahkan Cardiff di laga playoff penentuan tiket promosi ke Premier
League. '),
(15, 'West Ham Bidik Henry', 'Nasib Thierry Henry di Barcelona menjadi
tak pasti sejak jawara Spanyol itu mendatangkan David Villa. West Ham United
melihat peluang itu dan mencoba menggaetnya. '),
(16, ' ''Liverpool Tetap Kompetitif!''', 'Rafael Benitez kembali
mengungkapkan pembelaan terhadap dirinya, yang dituding gagal memberikan
prestasi bagi Liverpool. Manajer Spanyol itu mengatakan Si Merah tetap
kompetitif. Buktinya?');
|
c). buat tabel cache
CREATE TABLE IF NOT EXISTS `tbcache` (
`Id` int(11) NOT NULL
AUTO_INCREMENT,
`Query` varchar(100) NOT NULL,
`DocId` int(11) NOT NULL,
`Value` float NOT NULL,
PRIMARY KEY (`Id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;
|
d). buat Tabel Index
CREATE TABLE IF NOT EXISTS `tbindex` (
`Id` int(11) NOT NULL
AUTO_INCREMENT,
`Term` varchar(30) NOT NULL,
`DocId` int(11) NOT NULL,
`Count` int(11) NOT NULL,
`Bobot` float NOT NULL,
PRIMARY KEY (`Id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;
|
e) buat Tabel Stem
CREATE TABLE IF NOT EXISTS `tbstem` (
`Id` int(11) NOT NULL
AUTO_INCREMENT,
`Term` varchar(30) NOT NULL,
`Stem` varchar(30) NOT NULL,
PRIMARY KEY (`Id`)
) ENGINE=MyISAM DEFAULT
CHARSET=latin1 AUTO_INCREMENT=8 ;
|
f). buat tabel vektor
CREATE TABLE IF NOT EXISTS `tbvektor` (
`DocId` int(11) NOT NULL,
`Panjang` float NOT NULL,
PRIMARY KEY (`DocId`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1;
|
2). Buat Coding untuk Koneksi
<?php
$con =
mysql_connect("localhost","root","");
if (!$con) {
die('Koneksi ke database gagal: ' . mysql_error());
}
mysql_select_db("fsakti", $con);
?>
|
3). Buat Coding untuk fungsi
<?php
//=============== koleksi fungsi ===================
//fungsi untuk melakukan preprocessing terhadap teks
//terutama stopword removal dan stemming
//--------------------------------------------------------------------------------------------
function preproses($teks) {
//bersihkan tanda baca, ganti dengan space
$teks =
str_replace("'", " ", $teks);
$teks =
str_replace("-", " ", $teks);
$teks =
str_replace(")", " ", $teks);
$teks =
str_replace("(", " ", $teks);
$teks =
str_replace("\"", " ", $teks);
$teks =
str_replace("/", " ", $teks);
$teks =
str_replace("=", " ", $teks);
$teks =
str_replace(".", " ", $teks);
$teks =
str_replace(",", " ", $teks);
$teks =
str_replace(":", " ", $teks);
$teks = str_replace(";",
" ", $teks);
$teks =
str_replace("!", " ", $teks);
$teks =
str_replace("?", " ", $teks);
//ubah ke huruf kecil
$teks =
strtolower(trim($teks));
//terapkan stop word
removal
$astoplist = array
("yang", "juga", "dari", "dia",
"kami", "kamu", "ini", "itu",
"atau", "dan",
"tersebut", "pada", "dengan",
"adalah",
"yaitu", "ke");
foreach ($astoplist as $i
=> $value) {
$teks = str_replace($astoplist[$i], "", $teks);
}
//terapkan stemming
//buka tabel tbstem dan
bandingkan dengan berita
$restem =
mysql_query("SELECT * FROM tbstem ORDER BY Id");
while($rowstem =
mysql_fetch_array($restem)) {
$teks = str_replace($rowstem['Term'], $rowstem['Stem'],
$teks);
}
//kembalikan teks yang
telah dipreproses
$teks =
strtolower(trim($teks));
return $teks;
} //end function preproses
//--------------------------------------------------------------------------------------------
//--------------------------------------------------------------------------------------------
//fungsi untuk membuat index
function buatindex() {
//hapus index
sebelumnya
mysql_query("TRUNCATE
TABLE tbindex");
//ambil semua berita
(teks)
$resBerita =
mysql_query("SELECT * FROM tbberita ORDER BY Id");
$num_rows =
mysql_num_rows($resBerita);
print("Mengindeks
sebanyak " . $num_rows . " berita. <br />");
while($row =
mysql_fetch_array($resBerita)) {
$docId =
$row['Id'];
$berita =
$row['Berita'];
//terapkan
preprocessing
$berita = preproses($berita);
//simpan ke inverted index (tbindex)
$aberita = explode(" ",
trim($berita));
foreach ($aberita as $j => $value) {
//hanya
jika Term tidak null atau nil, tidak kosong
if
($aberita[$j] != "") {
//berapa
baris hasil yang dikembalikan query tersebut?
$rescount
= mysql_query("SELECT Count FROM tbindex
WHERE Term = '$aberita[$j]' AND DocId = $docId");
$num_rows
= mysql_num_rows($rescount);
//jika
sudah ada DocId dan Term tersebut ,
naikkan
Count (+1)
if
($num_rows > 0) {
$rowcount
= mysql_fetch_array($rescount);
$count
= $rowcount['Count'];
$count++;
mysql_query("UPDATE
tbindex SET Count = $count
WHERE Term = '$aberita[$j]' AND DocId = $docId");
}
//jika
belum ada, langsung simpan ke tbindex
else
{
mysql_query("INSERT
INTO tbindex (Term, DocId,
Count) VALUES ('$aberita[$j]', $docId, 1)");
}
} //end
if
} //end
foreach
} //end while
} //end function buatindex()
//--------------------------------------------------------------------------------------------
//--------------------------------------------------------------------------------------------
//fungsi hitungbobot, menggunakan pendekatan tf.idf
function hitungbobot() {
//berapa jumlah DocId
total?, n
$resn =
mysql_query("SELECT DISTINCT DocId FROM tbindex");
$n = mysql_num_rows($resn);
//ambil setiap record dalam
tabel tbindex
//hitung bobot untuk setiap
Term dalam setiap DocId
$resBobot =
mysql_query("SELECT * FROM tbindex ORDER BY Id");
$num_rows =
mysql_num_rows($resBobot);
print("Terdapat "
. $num_rows . " Term yang diberikan bobot. <br />");
while($rowbobot = mysql_fetch_array($resBobot))
{
//$w = tf * log
(n/N)
$term =
$rowbobot['Term'];
$tf =
$rowbobot['Count'];
$id =
$rowbobot['Id'];
//berapa jumlah
dokumen yang mengandung term tersebut?, N
$resNTerm =
mysql_query("SELECT Count(*) as N FROM tbindex
WHERE Term = '$term'");
$rowNTerm =
mysql_fetch_array($resNTerm);
$NTerm =
$rowNTerm['N'];
$w = $tf *
log($n/$NTerm);
//update bobot dari
term tersebut
$resUpdateBobot =
mysql_query("UPDATE tbindex SET Bobot = $w
WHERE Id = $id");
} //end while $rowbobot
} //end function hitungbobot
//--------------------------------------------------------------------------------------------
//--------------------------------------------------------------------------------------------
//fungsi panjangvektor, jarak euclidean
//akar(penjumlahan kuadrat dari bobot setiap Term)
function panjangvektor() {
//hapus isi tabel tbvektor
mysql_query("TRUNCATE
TABLE tbvektor");
//ambil setiap DocId dalam
tbindex
//hitung panjang vektor
untuk setiap DocId tersebut
//simpan ke dalam tabel
tbvektor
$resDocId =
mysql_query("SELECT DISTINCT DocId FROM tbindex");
$num_rows =
mysql_num_rows($resDocId);
print("Terdapat "
. $num_rows . " dokumen yang dihitung panjang vektornya.
<br />");
while($rowDocId =
mysql_fetch_array($resDocId)) {
$docId =
$rowDocId['DocId'];
$resVektor =
mysql_query("SELECT Bobot FROM tbindex WHERE
DocId = $docId");
//jumlahkan semua
bobot kuadrat
$panjangVektor = 0;
while($rowVektor =
mysql_fetch_array($resVektor)) {
$panjangVektor
= $panjangVektor + $rowVektor['Bobot']
* $rowVektor['Bobot'];
}
//hitung akarnya
$panjangVektor =
sqrt($panjangVektor);
//masukkan ke dalam
tbvektor
$resInsertVektor =
mysql_query("INSERT INTO tbvektor (DocId,
Panjang) VALUES ($docId, $panjangVektor)");
} //end while $rowDocId
} //end function panjangvektor
//--------------------------------------------------------------------------------------------
//--------------------------------------------------------------------------------------------
//fungsi hitungsim - kemiripan antara query
//setiap dokumen dalam database (berdasarkan bobot di tbindex)
function hitungsim($query) {
//ambil jumlah total
dokumen yang telah diindex (tbindex atau tbvektor), n
$resn =
mysql_query("SELECT Count(*) as n FROM tbvektor");
$rown =
mysql_fetch_array($resn);
$n = $rown['n'];
//terapkan preprocessing
terhadap $query
$aquery = explode("
", $query);
//hitung panjang vektor
query
$panjangQuery = 0;
$aBobotQuery = array();
for ($i=0;
$i<count($aquery); $i++) {
//hitung bobot untuk
term ke-i pada query, log(n/N);
//hitung jumlah
dokumen yang mengandung term tersebut
$resNTerm =
mysql_query("SELECT Count(*) as N from tbindex
WHERE Term = '$aquery[$i]'");
$rowNTerm =
mysql_fetch_array($resNTerm);
$NTerm =
$rowNTerm['N'] ;
$idf =
log($n/$NTerm);
//simpan di array
$aBobotQuery[] =
$idf;
$panjangQuery =
$panjangQuery + $idf * $idf;
}
$panjangQuery =
sqrt($panjangQuery);
$jumlahmirip = 0;
//ambil setiap term dari
DocId, bandingkan dengan Query
$resDocId =
mysql_query("SELECT * FROM tbvektor ORDER BY DocId");
while ($rowDocId =
mysql_fetch_array($resDocId)) {
$dotproduct = 0;
$docId =
$rowDocId['DocId'];
$panjangDocId =
$rowDocId['Panjang'];
$resTerm =
mysql_query("SELECT * FROM tbindex WHERE DocId
= $docId");
while ($rowTerm =
mysql_fetch_array($resTerm)) {
for ($i=0;
$i<count($aquery); $i++) {
//jika
term sama
if
($rowTerm['Term'] == $aquery[$i]) {
$dotproduct
= $dotproduct + $rowTerm['Bobot'] * $aBobotQuery[$i];
} //end
if
} //end for
$i
} //end while
($rowTerm)
if ($dotproduct >
0) {
$sim =
$dotproduct / ($panjangQuery * $panjangDocId);
//simpan
kemiripan > 0 ke dalam tbcache
$resInsertCache
= mysql_query("INSERT INTO tbcache (Query,
DocId, Value) VALUES ('$query', $docId, $sim)");
$jumlahmirip++;
}
} //end while $rowDocId
if ($jumlahmirip == 0) {
$resInsertCache =
mysql_query("INSERT INTO tbcache (Query,
DocId, Value) VALUES ('$query', 0, 0)");
}
} //end hitungSim()
//--------------------------------------------------------------------------------------------
//--------------------------------------------------------------------------------------------
function ambilcache($keyword) {
$resCache =
mysql_query("SELECT * FROM
tbcache WHERE
Query = '$keyword' ORDER BY Value DESC");
$num_rows =
mysql_num_rows($resCache);
if ($num_rows >0) {
//tampilkan semua
berita yang telah terurut
while ($rowCache =
mysql_fetch_array($resCache)) {
$docId =
$rowCache['DocId'];
$sim =
$rowCache['Value'];
if ($docId !=
0) {
//ambil
berita dari tabel tbberita, tampilkan
$resBerita
= mysql_query("SELECT * FROM tbberita
WHERE Id = $docId");
$rowBerita
= mysql_fetch_array($resBerita);
$judul
= $rowBerita['Judul'];
$berita
= $rowBerita['Berita'];
print($docId
. ". (" . $sim . ") <font color=blue><b>" .
$judul . "</b></font><br />");
print($berita
. "<hr />");
} else {
print("<b>Tidak
ada... </b><hr />");
}
}//end while
(rowCache = mysql_fetch_array($resCache))
}//end if $num_rows>0
else {
hitungsim($keyword);
//pasti telah ada
dalam tbcache
$resCache =
mysql_query("SELECT * FROM
tbcache WHERE
Query = '$keyword' ORDER BY Value DESC");
$num_rows =
mysql_num_rows($resCache);
while ($rowCache =
mysql_fetch_array($resCache)) {
$docId =
$rowCache['DocId'];
$sim =
$rowCache['Value'];
if ($docId !=
0) {
//ambil
berita dari tabel tbberita, tampilkan
$resBerita
= mysql_query("SELECT * FROM tbberita
WHERE Id = $docId");
$rowBerita
= mysql_fetch_array($resBerita);
$judul
= $rowBerita['Judul'];
$berita
= $rowBerita['Berita'];
print($docId
. ". (" . $sim . ") <font color=blue><b>" .
$judul . "</b></font><br />");
print($berita
. "<hr />");
} else {
print("<b>Tidak
ada... </b><hr />");
}
} //end while
}
} //end function ambilcache
//--------------------------------------------------------------------------------------------
//============== akhir koleksi fungsi ==================
?>
|
4). Buat Coding untuk index
Out put
<head>
<title>Implentasi Indexing & Retrieval</title>
</head>
<body>
<h1 align=center>Implentasi Proses Indexing &
Retrieval</h1>
<hr>
<div align=center>
| <a href="index.php">Beranda</a> |
<a href="index.php?act=corpus">Tampilkan
Corpus</a> |
<a href="index.php?act=indexing">Buat Index</a> |
<a href="index.php?act=bobot">Hitung Bobot</a> |
<a href="index.php?act=panjangvektor">Hitung Panjang
Vektor</a> |
<a href="index.php?act=showindex">Tampilkan
Index</a> |
<a href="index.php?act=showvektor">Tampilkan Panjang
Vektor</a> |
<a href="index.php?act=retrieve">Retrieval</a> |
<a href="index.php?act=cache">Tampilkan Cache</a>
|
</div>
<hr />
<?php
include 'koneksi.php';
include 'fungsi.php';
//periksa apa yang diinginkan pengguna (variabel act)
$apa = $_GET["act"];
//jika "corpus"
if ($apa == "corpus") {
$result =
mysql_query("SELECT * FROM tbberita ORDER BY Id");
while($row =
mysql_fetch_array($result)) {
echo $row['Id'] .
". <font color =blue>" . $row['Judul'] .
"</font><br />" . $row['Berita'];
echo "<hr
/>";
}
}
//jika "indexing"
else if ($apa == "indexing") {
buatindex();
print("<hr
/>");
}
else if ($apa == "bobot") {
hitungbobot();
print("<hr
/>");
}
else if ($apa == "panjangvektor") {
panjangvektor();
print("<hr
/>");
}
else if ($apa == "showvektor") {
print("<table>");
print("<tr><td>Doc-ID</td><td>Panjang
Vektor</td></tr>");
$result =
mysql_query("SELECT * FROM tbvektor");
while($row =
mysql_fetch_array($result)) {
print("<tr>");
print("<td>"
. $row['DocId'] . "</td><td>" . $row['Panjang'] .
"</td>");
print("</tr>");
}
print("</table><hr
/>");
}
//jika "showindex"
else if ($apa == "showindex") {
print("<table>");
print("<tr><td>#</td><td>Term</td><td>Doc-ID</td><td>Count</td><td>Bobot</td></tr>");
$result = mysql_query("SELECT
* FROM tbindex ORDER BY Id");
while($row =
mysql_fetch_array($result)) {
print("<tr>");
print("<td>"
. $row['Id'] . "</td><td>" . $row['Term'] .
"</td><td>" . $row['DocId'] .
"</td><td>" .
$row['Count'] . "</td><td>" . $row['Bobot'] .
"</td>");
print("</tr>");
}
print("</table><hr
/>");
}
//jika "retrieve"
else if ($apa == "retrieve") {
print('<center><form
action="index.php?act=retrieve" method="post">
Kata kunci: <input
type="text" name="keyword" />
<input name =
"Cari!" type="submit" />
</form></center><hr
/>');
$keyword =
$_POST["keyword"];
if ($keyword) {
$keyword =
preproses($keyword);
print('Hasil retrieval
untuk <font color=blue><b>' . $_POST["keyword"] . '</b></font> (<font
color=blue><b>' . $keyword . '</b></font>) adalah <hr
/>');
ambilcache($keyword);
//hitungsim($keyword);
}
} //end retrieve
//jika "cache"
else if ($apa == "cache") {
print("<table>");
print("<tr><td>#</td><td>Query</td><td>Doc-ID</td><td>Value</td></tr>");
$result =
mysql_query("SELECT * FROM tbcache ORDER BY Query ASC");
while($row =
mysql_fetch_array($result)) {
print("<tr>");
print("<td>"
. $row['Id'] . "</td><td>" . $row['Query'] .
"</td><td>" . $row['DocId'] .
"</td><td>" .
$row['Value'] . "</td>");
print("</tr>");
}
print("</table><hr
/>");
}
//jika beranda atau tidak memilih apapun
else {
print("<p
align=center>Pilih salah satu link di atas!</p><hr />");
}
?>
</body>
|
Out put
Semoga bermanfat
oleh fsakti
FASANA IT | Tutorial Computer
Updated at :
02.38
Anda suka artikel di atas ???
Klik salah satu atau ketiga tombol di bawah ini :
Klik salah satu atau ketiga tombol di bawah ini :
2 komentar:
boleh minta projectnya..?? punyaku koc error ya..
kalo boleh ini email saya : baiq.najah@gmail.com
Siip...
Posting Komentar