Menghitung TF IDF dengan PHP

bagi temen temen yang tertarik dengan IR information retrieval, kali ini kami membahas tentang TF.IDF menggunakan PHP, berikut adalah kode yang kami gunakan untuk menghitung bobot suatu term dalam document !!

Langkah pertama adalah membuat sebuah fungsi yang akan digunakan untuk proses perhitungannya !!

<?php

/*
* Information Retrievel

*/

define(“DOC_ID”, 0);
define(“TERM_POSITION”, 1);

class IR {

public $num_docs = 0;

public $corpus_terms = array();

/*
* Membuat  Index
*/
function create_index($D) {
$this->num_docs = count($D);
for($doc_num=0; $doc_num < $this->num_docs; $doc_num++) {

$doc_terms = array();
// simplified word tokenization process
$doc_terms = explode(” “, $D[$doc_num]);

$num_terms = count($doc_terms);
for($term_position=0; $term_position < $num_terms; $term_position++) {
$term = strtolower($doc_terms[$term_position]);
$this->corpus_terms[$term][]=array($doc_num, $term_position);
}
}
}

/*
* Show Index
*
*/
function show_index() {

ksort($this->corpus_terms);

foreach($this->corpus_terms AS $term => $doc_locations) {
echo “<b>$term:</b> “;
foreach($doc_locations AS $doc_location)
echo “{“.$doc_location[DOC_ID].”, “.$doc_location[TERM_POSITION].”} “;
echo “<br />”;
}
}

/*
* Menghitung Term Frequency (TF)
*

*/
function tf($term) {
$term = strtolower($term);
return count($this->corpus_terms[$term]);
}

/*
* Menghitung Number Documents With
*
*/
function ndw($term) {
$term = strtolower($term);
$doc_locations = $this->corpus_terms[$term];
$num_locations = count($doc_locations);
$docs_with_term = array();
for($doc_location=0; $doc_location < $num_locations; $doc_location++)
$docs_with_term[$i]++;
return count($docs_with_term);
}

/*
* Menghitung Inverse Document Frequency (IDF)
*
*/
function idf($term) {
return log($this->num_docs)/$this->ndw($term);
}

}

?>

simpan script di atas dengan nama IR.php

selanjutnya kita buat sebuah script yang akan digunakan untuk memanngil script di atas

<?php

include “IR.php”;
// document yang sebagai percobaan
$D[0] = “Membuka blog khozaimi asyik”;
$D[1] = “Selain asyik blog khozaimi juga banyak yang bisa diperoleh”;
$D[2] = “ayuk kita kunjungi blogna khozaimi biar asyik”;

$ir = new IR();

echo “<p><b>Corpus:</b></p>”;
$ir->show_docs($D);

$ir->create_index($D);

echo “<p><b>Inverted Index:</b></p>”;
$ir->show_index();

$term = “asyik”;  //kata asyik yang akan menjadi pusat perhitungan kita
$tf  = $ir->tf($term);
$ndw = $ir->ndw($term);
$idf = $ir->idf($term);
echo “<p>”;
echo “Term Frequency of ‘$term’ is $tf<br />”;
echo “Number Of Documents with $term is $ndw<br />”;
echo “Inverse Document Frequency of $term is $idf”;
echo “</p>”;

?>

simpan document di atas dengan nama apa saja !!!

kemudia panggil script tersebut !!

semuga berhasilllll…

Iklan

8 pemikiran pada “Menghitung TF IDF dengan PHP

  1. aduh pas dijalanin kog muncul error gini yah?

    Fatal error: Call to undefined method IR::show_docs() in D:\xampp\htdocs\LATIHAN\OOP_IR\program.php on line 12

    ternyata function show_docs nya gak ada

    Koreksi dikit:

    class IR{

    public $num_docs = 0;

    public $corpus_terms = array();

    public $doc = array();

    function show_docs($doc) {
    $jumlah_doc = count($doc);
    for($i=0; $i < $jumlah_doc; $i++) {
    echo "Dokumen ke-$i : $doc[$i] “;
    }
    }
    /*
    * Membuat Index
    */
    function create_index($D) {
    $this->num_docs = count($D);
    ……
    ……
    ……blablabla..
    }
    }

    eng ing eng ternyata berhasil

    makasih ilmunya boz..
    semoga bermanfaat bagi ku
    sering2 posting ttg OOP yach
    bwt belajar nih

    Best Regards

Tinggalkan Balasan

Isikan data di bawah atau klik salah satu ikon untuk log in:

Logo WordPress.com

You are commenting using your WordPress.com account. Logout /  Ubah )

Foto Google+

You are commenting using your Google+ account. Logout /  Ubah )

Gambar Twitter

You are commenting using your Twitter account. Logout /  Ubah )

Foto Facebook

You are commenting using your Facebook account. Logout /  Ubah )

Connecting to %s