Advertisement
cdsatrian

tfidf

Jul 30th, 2013
90
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
PHP 8.52 KB | None | 0 0
  1. <?php
  2. require("konektor.php");
  3. //GET STOPLIST DATA
  4. $sql="SELECT stoplist from tb_stoplist";
  5. $result3 = mysql_query ($sql) or die ("Kesalahan pada perintah SQL!");
  6. while($row=mysql_fetch_object($result3))
  7. {
  8.   $db_stoplist[]=$row->stoplist;
  9. }
  10. //AWAL TOKENIZING
  11. $keyword=$this->key;
  12. $tokenizing=explode(' ',$keyword);
  13. $ct=count($tokenizing);
  14. ?>
  15. <strong>Keyword: </strong><?php echo $keyword;?>
  16. <br>
  17. <strong>Panjang String: </strong><?php echo ($ps-2);?>
  18. <?php
  19. //AKHIR TOKENIZING
  20. //FILTERING
  21. $filtering=array_diff($tokenizing,$db_stoplist);
  22. //ANALYZING
  23. //Ambil Jumlah Dokumen
  24. $D=0;
  25. $sqldok = "SELECT terjemah FROM tb_hadits ORDER BY id_hadits ASC";
  26. $result2 = mysql_query ($sqldok) or die ("Kesalahan pada perintah SQL!");
  27. $dokumen=array();
  28. while($row2 = mysql_fetch_array($result2))
  29. {
  30.   ++$D;
  31.   //Ambil Kata Tiap Dokumen, Dilakukan Tokenizing,Filtering,Penghilangan Duplikasi Token
  32.   //TOKENIZING DOKUMEN
  33.   $replace=preg_replace('/[":;.,!?]/', ' ',$row2['terjemah']);
  34.   $replace=preg_replace('/\s+/', ' ', $replace);
  35.   $token_dok=explode(' ',trim($replace);
  36.   $ct=count($token_dok);
  37.   //FILTERING DOKUMEN
  38.   $temp_dok=array_diff($token_dok,$db_stoplist);
  39.   $dokumen=array_merge($dokumen,$temp_dok);
  40. }
  41. //Penghilangan Duplikasi Token
  42. $token=array_unique($dokumen);
  43. $jml_token=count($token);
  44. echo("<center><strong><-- HASIL PENCARIAN --></strong></center>");
  45. //Area TF-IDF
  46. $jumlahkosong=0;
  47. $counttf=0;
  48. $countw=0;
  49. $df=0;
  50. for($i=0;$i<$jml_token;$i++)
  51. {
  52.   //Area TF
  53.   for($j=0;$j<=$D+1;$j++)
  54.   {
  55.     if($j==0)
  56.     {
  57.       //cek kata kunci(kk)
  58.       $adakunci=0;
  59.       $kunci=$token[$i];
  60.       for($k=0;$k<count($filtering);$k++)
  61.       {
  62.       $katakey=$filtering[$k];
  63.         if($kunci==$katakey)
  64.         {
  65.           $adakunci=1;
  66.         }
  67.       }
  68.       $tf[$i][$j]=$adakunci;
  69.       if($adakunci==0)
  70.       {
  71.         $jumlahkosong++;
  72.       }
  73.     }
  74.     else if($j==($D+1))
  75.     {
  76.       $hasilidf=$D/$df;
  77.       $hasiltemp=log10($hasilidf);
  78.       $tf[$i][$j]=$hasiltemp;
  79.     }
  80.     else
  81.     {
  82.       //cek di dokumen
  83.       $kunci=$token[$i];
  84.       $urutandok=0;
  85.       $akdok=0;
  86.       $nodok=$j;
  87.       $sqldok = "SELECT * FROM tb_hadits ORDER BY id_hadits ASC";
  88.       $result4 = mysql_query ($sqldok) or die ("Kesalahan pada perintah SQL!");
  89.       while($row4 = mysql_fetch_array($result4))
  90.       {
  91.         if($urutandok==$nodok-1)
  92.         {
  93.           //Tokenizing Dokumen
  94.           $isidokumen=preg_replace('/[":;.,!?]/', '',$row4['terjemah'])
  95.           $isidokumen=strtolower($isidokumen);
  96.           $isidokumen=$isidokumen."#e";
  97.           $ps2=strlen($isidokumen);
  98.           $y=1;
  99.           $x=0;
  100.           $ct=0;
  101.           unset($tokendok2);
  102.           for ($ii=0;$ii<$ps2;$ii++)
  103.           {
  104.             if(substr($isidokumen,$ii,1)==" " || substr($isidokumen,$ii,2)==substr($isidokumen,$ps2-2,2))
  105.             {
  106.               $tempkata=substr($isidokumen,$x,$y-1);
  107.               $tokendok2[++$ct]=$tempkata;
  108.               $x=$ii+1;
  109.               $y=0;
  110.             }
  111.             $y=$y+1;
  112.           }
  113.           //Filtering Dokumen
  114.           $jmlada=0;
  115.           $cnfilter=0;
  116.           unset($filterdok2);
  117.           for($ii=0;$ii<count($tokendok2);$ii++)
  118.           {
  119.             $katatoken=$tokendok2[$ii];
  120.             $sqlfil = "SELECT stoplist from tb_stoplist";
  121.             $result5 = mysql_query ($sqlfil) or die ("Kesalahan pada perintah SQL!");
  122.             while($row5 = mysql_fetch_array($result5))
  123.             {
  124.               $katafilter=$row5['stoplist'];
  125.               if($katatoken==$katafilter){
  126.                 $jmlada=$jmlada+1;
  127.               }
  128.             }
  129.             if($jmlada==0)
  130.             {
  131.               $filterdok2[$cnfilter]=$katatoken;
  132.               $cnfilter=$cnfilter+1;
  133.             }
  134.             $jmlada=0;
  135.           }
  136.           for ($kk=0;$kk<count($filterdok2);$kk++)
  137.           {
  138.           $hsfilter=$filterdok2[$kk];
  139.             if($kunci==$hsfilter){
  140.               $akdok=$akdok+1;
  141.             }
  142.           }
  143.         }
  144.         $urutandok++;
  145.       }
  146.       $tf[$i][$j]=$akdok;
  147.     }
  148.     $tnilaidf=$tf[$i][$j];
  149.     if($tnilaidf>=1 && $j!=0)
  150.     {
  151.       $df=$df+1;
  152.     }
  153.   }
  154.   $df=0;
  155.   //Akhir Area TF
  156.   //Area W
  157.   for ($k=0;$k<=$D;$k++)
  158.   {
  159.     $w[$i][$k]=$tf[$i][$k]*$tf[$i][($D+1)];
  160.   }
  161.   //Akhir Area W
  162. }
  163. //Awal Area Pehitungan Algoritma TF-IDF
  164. for($i=0;$i<$jml_token;$i++)
  165. {
  166.   for($j=0;$j<=$D;$j++)
  167.   {
  168.     $temptf=$tf[$i][0];
  169.     if($temptf=="1")
  170.     {
  171.       $tfidf[$j]=$tfidf[$j]+$w[$i][$j];
  172.     }
  173.   }
  174. }
  175. //Akhir Area Perhitungan Algoritma TF-IDF
  176. //NB:
  177. //Area Sorting Nilai tfidf menggunakan Algoritma Bubble Sort
  178. //array tfidf ada kk ke 0, jadi dimulai dari index 1
  179. for($j=0;$j<=$D;$j++){
  180.   $tfidfno[$j]="Dokumen ".$j;
  181. }
  182. for($j=1;$j<=$D;$j++)
  183. {
  184.   for($jj=1;$jj<$D;$jj++)
  185.   {
  186.   $tempj=$tfidf[$j];
  187.   $tempjj=$tfidf[$jj];
  188.     if($tempj>=$tempjj)
  189.     {
  190.       $tj=$tfidf[$jj+1];
  191.       $tjn=$tfidfno[$jj+1];
  192.       $tfidf[($jj+1)]=$tfidf[$jj];
  193.       $tfidfno[($jj+1)]=$tfidfno[$jj];
  194.       $tfidf[$jj]=$tj;
  195.       $tfidfno[$jj]=$tjn;
  196.     }
  197.   }
  198. }
  199. //Akhir Area TF-IDF
  200. //Area VSM
  201. //hitung transformasi w menjadi kuadrat dan sqrt total dari tiap dokumen
  202. for($i=0;$i<=$jml_token;$i++)
  203. {
  204.   if($i==$jml_token)
  205.   {//menghitung sum akar/sqrt tiap dokumen+kk
  206.     for($j=0;$j<=$D;$j++)
  207.     {
  208.       $tvsmtot=0;
  209.       for($k=0;$k<$jml_token;$k++)
  210.       {
  211.         $tnvsm=$vsmw[$k][$j];
  212.         $tvsmtot=$tvsmtot+$tnvsm;
  213.       }
  214.       $tvsmtot=sqrt($tvsmtot);
  215.       $vsmw[$i][$j]=$tvsmtot;
  216.     }
  217.   }
  218.   else
  219.   {//menghitung kuadrat tiap token dalam dokumen(kuadrat w)
  220.     for($l=0;$l<=$D;$l++)
  221.     {
  222.       $tvsm=$w[$i][$l];
  223.       $tvsm=$tvsm*$tvsm;
  224.       $vsmw[$i][$l]=$tvsm;
  225.     }
  226.   }
  227. }
  228. //akhir area hitung transformasi w menjadi kuadrat dan sqrt total dari tiap dokumen
  229. //hitung kk*D memanfaatkan vsmw index ke 0(kk) * D tiap dokumen
  230. for($i=0;$i<=$jml_token;$i++)
  231. {
  232.   if($i==$jml_token)
  233.   {//untuk menghitung sum kk dot D tiap dokumen
  234.     for($j=0;$j<=$D;$j++)
  235.     {//index ke 0 (kk*kk) dimasukan tapi tidak akan dipakai
  236.       $tvsmkk=0;
  237.       for($k=0;$k<$jml_token;$k++)
  238.       {
  239.         $tvsmkkd=$vsmkk[$k][$j];
  240.         $tvsmkk=$tvsmkk+$tvsmkkd;
  241.       }
  242.       $vsmkk[$i][$j]=$tvsmkk;
  243.     }
  244.   }
  245.   else
  246.   {//untuk menghitung kk*D tiap dokumen
  247.     for($l=0;$l<=$D;$l++)
  248.     {
  249.       if($l>=1)
  250.       {
  251.         $temptf=$tf[$i][$l];
  252.         $tempvsmkk=$vsmw[$i][0];
  253.         $tempvsmkk2=$temptf*$tempvsmkk;
  254.         $vsmkk[$i][$l]=$tempvsmkk2;
  255.       }
  256.     }
  257.   }
  258. }
  259. //perhitungan penilaian cosine setiap dokumen dengan vsm
  260. for($j=0;$j<=$D;$j++){
  261.   $sumkkd=$vsmkk[$jml_token][$j];
  262.   $sqrtkk=$vsmw[$jml_token][0];
  263.   $sqrtd=$vsmw[$jml_token][$j];
  264.   @$tcosine=$sumkkd/($sqrtkk*$sqrtd);
  265.   $cosine[$j]=$tcosine;
  266. }
  267. for($j=0;$j<=$D;$j++)
  268. {
  269.   $cosineno[$j]=$j;
  270. }
  271. //NB:
  272. //Area Sorting Nilai cosine vsm menggunakan Algoritma Bubble Sort
  273. //array vsm ada ke 0(tidak dipakai), jadi dimulai dari index 1
  274. for($j=1;$j<=$D;$j++)
  275. {
  276.   for($jj=1;$jj<$D;$jj++)
  277.   {
  278.     $tempj=$cosine[$j];
  279.     $tempjj=$cosine[$jj];
  280.     if($tempj>=$tempjj)
  281.     {
  282.       $tj=$cosine[$jj+1];
  283.       $tjn=$cosineno[$jj+1];
  284.       $cosine[($jj+1)]=$cosine[$jj];
  285.       $cosineno[($jj+1)]=$cosineno[$jj];
  286.       $cosine[$jj]=$tj;
  287.       $cosineno[$jj]=$tjn;
  288.     }
  289.   }
  290. }
  291. //Akhir Area VSM
  292. //Tampil Hadist
  293. $sqldok = "SELECT
  294.             b.id_bab,
  295.             b.bab,
  296.             h.id_hadits,
  297.             h.judul,
  298.             h.hadits,
  299.             h.terjemah,
  300.             h.no_hadits
  301.           FROM
  302.             tb_bab b,
  303.             JOIN tb_hadits h USING(id_bab)
  304.           ORDER BY h.id_hadits ASC";
  305. $result7 = mysql_query($sqldok) or die ("Kesalahan pada perintah SQL!");
  306. $no=0;
  307. while($row7 = mysql_fetch_array($result7))
  308. {
  309.   $bab[$no]=$row7['bab'];
  310.   $judul[$no]=$row7['judul'];
  311.   $nomor[$no]=$row7['no_hadits'];
  312.   $hadits[$no]=$row7['hadits'];
  313.   $terjemah[$no]=$row7['terjemah'];
  314.   $no=$no+1;
  315. }
  316. echo("<br>");
  317. for($i=0;$i<count($cosine);$i++)
  318. {
  319.   $tmpcosine=$cosine[$i];
  320.   $tmpcosineno=$cosineno[$i];
  321.   $tmpcosineno=$tmpcosineno-1;
  322.   if($tmpcosine>0){
  323. echo <<<HASIL    
  324. <table>
  325. <tr>
  326. <td style="padding:5px;">
  327. Score : <strong>$tmpcosine</strong>
  328. </td>
  329. </tr>
  330. <tr>
  331. <td style="padding:5px;">
  332. Bab Hadits: <strong>{$bab[$tmpcosineno]}</strong> No. <strong>{$nomor[$tmpcosineno]}</strong>. Judul: <strong>{$judul[$tmpcosineno]}</strong>
  333. </td></tr>
  334. <tr>
  335. <td align="right" style="padding:5px; font-size:12pt;">
  336. {$hadits[$tmpcosineno]}
  337. </td>
  338. </tr>
  339. <tr><td style="padding:5px;">
  340. {nl2br($terjemah[$tmpcosineno])}
  341. </td></tr>
  342. </table>
  343. HASIL;
  344.   }
  345. }
  346. ?>
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement