Term Frequency, Inverse Document Frequency (TFIDF), merupakan sub-area dari Natural Language Processing(NLP) yang digunakan dalam information retrievel dengan tujuan untuk ekstrasi data. Sederhananya, bagaimana menghitung kemunculan setiap kata dalam dokumen dan memberi bobot pada setiap kata, dan menghitung skor untuk dokumen tersebut.
Sebelum kita bahas code di PHP, saya akan share penjelasan perhitungan manual TF-IDF menggunakan Spreadsheet atau Excel untuk memudahkan memahami cara kerjanya. Harapannya, anda bisa melakukan improvisasi code di bahasa pemrograman yang lainnya.
Pastikan sebelum mulai proses pembobotan kata dengan metode ini, text yang anda gunakan sudah melalui tahap preprocessing. Untuk preprocessing text di bahasa indonesia anda bisa menggunakan library sastrawi yang sudah saya bahas di artikel berikut ini: https://blog.ariflaksito.net/2022/04/preprocessing-text-bahasa-indonesia-di.html.
Berikut ini perhitungan di Spreadsheet menggunakan 3 dokumen seperti yang saya gunakan pada artikel preprocessing pada link artikel diatas.
Kolom token/term merupakan kata unique dari semua dokumen yang ada. Selanjutnya pada kolom tf, dibagi menjadi 3 dokumen untuk menghitung jumlah setiap kata yang ada di masing-masing dokumen. Pada kolom df akan menghitung jumlah kata yang muncul pada semua dokumen. Pada bagian ini kita hitung jumlah kemunculan, bukan jumlah total kata (digunakan rumus countif bukan sum). Kolom D/df merupakan pembagian dari jumlah dokumen (n) dan df. Jumlah dokumen yang kita gunakan untuk contoh perhitungan ini adalah 3.
Kolom IDF merupakan nilai log dari D/df, dan terkahir score tf-idf merupakan perkalian dari tf masing-masing dokumen dan token dengan nilai IDF. Hasilnya akan berupa matrix bobot dari dokumen dan term seperti pada gambar diatas.
Bisa anda tuliskan email di komentar jika menghendaki file Spreadsheet/Excel untuk contoh perhitungan TF-IDF diatas.
Selanjutnya kita masuk pada inti pembahasan, yaitu membuat script PHP untuk perhitungan bobot kata seperti cara di Excel diatas. Pertama siapkan class dan beberapa fungsi di PHP, yaitu:
- fungsi untuk mebuat index dari setiap kata
- fungsi untuk menghitung idf
- fungsi untuk menghitung weight/tf-idf
Array ( [1] => Array ( [hotel] => 0.1761 [modern] => 0.1761 [jangkau] => 0.1761 [akomodasi] => 0 [nyaman] => 0 [tenang] => 0 [bintang] => 0 [3] => 0 [mewah] => 0 [harga] => 0 ) [2] => Array ( [hotel] => 0 [modern] => 0.1761 [jangkau] => 0 [akomodasi] => 0.4771 [nyaman] => 0.4771 [tenang] => 0.4771 [bintang] => 0 [3] => 0 [mewah] => 0 [harga] => 0 ) [3] => Array ( [hotel] => 0.1761 [modern] => 0 [jangkau] => 0.1761 [akomodasi] => 0 [nyaman] => 0 [tenang] => 0 [bintang] => 0.4771 [3] => 0.4771 [mewah] => 0.4771 [harga] => 0.4771 ) )
Referensi
- https://khozaimi.wordpress.com/2010/06/26/menghitung-tf-idf-engan-php/
- https://www.youtube.com/watch?v=B3UZ8DxHocQ&t=1s