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


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:



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.


Tinggalkan sebuah komentar

Alamat email Anda tidak akan dipublikasikan. Ruas yang wajib ditandai *

8 pemikiran di “Algoritma TF-IDF (Term Frequency – Inverse Document Frequency)