Algoritma TF-IDF (Term Frequency – Inverse Document Frequency)

Algoritma TF-IDF (Term Frequency – Inverse Document Frequency) adalah salah satu algoritma yang dapat digunakan untuk menganalisa hubungan antara sebuah frase/kalimat dengan sekumpulan dokumen. Contoh yang dibahas kali ini adalah mengenai penentuan urutan peringkat data berdasarkan query yang digunakan.
Inti utama dari algoritma ini adalah melakukan perhitungan nilai TF dan nilai IDF dari sebuah setiap kata kunci terhadap masing-masing dokumen. Nilai TF dihitung dengan rumus TF = jumlah frekuensi kata terpilih / jumlah kata dan nilai IDF dihitung dengan rumus IDF = log(jumlah dokumen / jumlah frekuensi kata terpilih). Selanjutnya adalah melakukan perkalian antara nilai TF dan IDF untuk mendapatkan jawaban akhir.



Diasumsikan data kalimat yang tersedia adalah sebagai berikut:

Isi kalimat
Saya suka sama suami situ sebab suami situ suka senyum-senyum sama saya.
Santapan kita setiap jam setengah satu siang satu soto sapi sama seratus tusuk sate sapi pula.
Saya sebal sama situ sebab situ suka senyum-senyum sama suami saya sehingga suami saya suka senyum-senyum sendiri saja.
Sempat-sempatnya semut-semut itu saling senyum-senyum dan salam-salaman sama semut-semut yang mau senyum-senyum dan salam-salaman sama semut-semut itu.

Contoh data awal adalah sebagai berikut:

Dim daftarDokumen As New List(Of String)
daftarDokumen.Add("Saya suka sama suami situ sebab suami situ suka senyum-senyum sama saya.")
daftarDokumen.Add("Santapan kita setiap jam setengah satu siang satu soto sapi sama seratus tusuk sate sapi pula.")
daftarDokumen.Add("Saya sebal sama situ sebab situ suka senyum-senyum sama suami saya sehingga suami saya suka senyum-senyum sendiri saja.")
daftarDokumen.Add("Sempat-sempatnya semut-semut itu saling senyum-senyum dan salam-salaman sama semut-semut yang mau senyum-senyum dan salam-salaman sama semut-semut itu.")



Dan query data yang digunakan adalah

Isi kalimat
Sapi saling suka

Contoh data baru adalah sebagai berikut:

Dim query As String = "Sapi saling suka"

Langkah-langkah penggunaan algoritma ini adalah

1. Lakukan proses tokenizing dan lowercase pada masing-masing dokumen dan query
Setiap kata akan dijadikan huruf kecil semua,
dan kemudian dilakukan proses penghilangan tanda baca
Penjelasan lebih detail tentang fungsi ini dapat dilihat pada penjelasan skrip dibawah ini

For i As Integer = 0 To daftarDokumen.Count - 1
	daftarDokumen(i) = Tokenizing(daftarDokumen(i).ToLower)
Next

query = Tokenizing(query.ToLower)

* Gunakan fungsi ini untuk menghilangkan tanda baca
Tanda baca yang diperhitungkan adalah:
titik ,koma, titik koma, titik dua, hubung -, tanda tanya, tanda seru, kurung biasa (), kurung kotak [], kurung kurawal {}, tanda petik satu, tanda petik ganda, garis miring

Public Function Tokenizing(ByVal input As String) As String
	input = input.Replace(".", "")
	input = input.Replace(",", "")
	input = input.Replace(":", "")
	input = input.Replace("-", " ")
	input = input.Replace("?", "")
	input = input.Replace("!", "")
	input = input.Replace("(", "")
	input = input.Replace(")", "")
	input = input.Replace("[", "")
	input = input.Replace("]", "")
	input = input.Replace("{", "")
	input = input.Replace("}", "")
	input = input.Replace("'", "")
	input = input.Replace("""", "")
	input = input.Replace("/", "")
	Return input
End Function

2. Hitung jumlah dari masing-masing kata yang terdapat pada masing-masing dokumen
Sebagai contoh jika dokumen berisi kalimat “hati hati ya”
Maka jumlah kata “hati” adalah 2, dan jumlah kata “ya” adalah 1

jumlahKataPerDokumen(i) = New List(Of JumlahKata)
Dim daftarKata As String() = daftarDokumen(i).Split(" ")

Dim cekKata As New List(Of String)
For j As Integer = 0 To daftarKata.Count - 1
	If Not cekKata.Contains(daftarKata(j)) Then
		Dim jumlah As Integer = 0
		For k As Integer = 0 To daftarKata.Count - 1
			If daftarKata(j) = daftarKata(k) Then jumlah += 1
		Next

		jumlahKataPerDokumen(i).Add(New JumlahKata(daftarKata(j), jumlah))
		cekKata.Add(daftarKata(j))
	End If
Next

3. Hitung nilai TF dengan rumus
TF = jumlah frekuensi kata terpilih / jumlah kata

For j As Integer = 0 To daftarKataQuery.Count - 1
	Dim frekuensi As Integer = 0

	For k As Integer = 0 To jumlahKataPerDokumen(i).Count - 1
		If daftarKataQuery(j) = jumlahKataPerDokumen(i)(k).kata Then
			frekuensi = jumlahKataPerDokumen(i)(k).jumlah
			Exit For
		End If
	Next

	TF(i).Add(frekuensi / daftarKata.Length)
Next

4. Hitung IDF dengan rumus
IDF = log(jumlah dokumen / jumlah frekuensi kata terpilih)

Dim frekuensiDokumen(daftarKataQuery.Count - 1) As Integer
For i As Integer = 0 To daftarDokumen.Count - 1
	For j As Integer = 0 To daftarKataQuery.Count - 1
		If TF(i)(j) > 0 Then frekuensiDokumen(j) += 1
	Next
Next

For j As Integer = 0 To daftarKataQuery.Count - 1
	IDF(j) = Math.Log10(daftarDokumen.Count / frekuensiDokumen(j))
Next

5. Nilai jawaban dilakukan dengan cara melakukan perkalian antara nilai TF dan nilai IDF
Tampilkan hasil jawaban akhir pada layar

For i As Integer = 0 To daftarDokumen.Count - 1
	For j As Integer = 0 To daftarKataQuery.Count - 1
		Console.WriteLine("Nilai TF-IDF untuk kata " & daftarKataQuery(j).PadRight(8) & " terhadap dokumen " & (i + 1) & " adalah " & (TF(i)(j) * IDF(j)).ToString("F4"))
	Next
Next

Hasil akhir adalah: (klik untuk perbesar gambar)

Contoh modul / source code dalam bahasa VB (Visual Basic) dapat didownload disini:

[sdm_download id=”3983″ fancy=”0″]



Jika membutuhkan jasa kami dalam pembuatan program, keterangan selanjutnya dapat dilihat di Fasilitas dan Harga
Jika ada yang kurang paham dengan langkah-langkah algoritma diatas, silahkan berikan komentar Anda.
Selamat mencoba.

Comments

8 responses to “Algoritma TF-IDF (Term Frequency – Inverse Document Frequency)”

  1. sangatsetuju sekali Avatar
    sangatsetuju sekali

    bisa dibuat contohnya dengan aplikasi delphi nggak mas

    1. pip Avatar
      pip

      Saya tidak memahami bahasa tersebut, tetapi skrip yang saya rancang adalah murni skrip (tidak bergantung pada fungsi-fungsi tertentu yang disediakan oleh perangkat lunak), sehingga tentunya dapat dikonversi ke dalam bahasa apapun setelah memahami konsep dari algoritmanya.

  2. RudyHan Avatar
    RudyHan

    apakah tf idf ini tingkat kesulitan nya sulit ?

    1. pip Avatar
      pip

      Menurut pendapat saya algoritma ini termasuk dalam kategori mudah untuk diimplementasikan

  3. Doni Avatar
    Doni

    bagaimana jika ada penggunaan kata sinonim pada data awal dan query semisal pada data awal terdapat kata ‘samasama’ dan pada query terdapat kata ‘saling’

    1. pip Avatar
      pip

      Algoritma ini tidak mengenal sinonim sehingga kedua kata tersebut dikategorikan menjadi 2 kata yang berbeda dan dihitung terpisah.

      1. Doni Avatar
        Doni

        Apakah algoritma ini cocok digunakan untuk sistem koreksi essay otomatis ?

        1. pip Avatar
          pip

          Seperti yang terlihat pada screenshot hasil implementasi, hasil utama perhitungan adalah mengetahui nilai dari masing-masing kata dalam query terhadap dokumen, sehingga tidak digunakan untuk melakukan koreksi terhadap kata dalam dokumen.

Leave a Reply

Your email address will not be published. Required fields are marked *