Proses Stemming adalah proses pencarian kata dasar dari kata yang memiliki imbuhan. Salah satu metode stemming yang dapat digunakan adalah metode yang dikembangkan oleh Nazief & Andriani.
Sebelum masuk kedalam langkah-langkah pembahasan algoritma, sistem membutuhkan daftar kata dasar, mirip seperti kamus, dan juga daftar kata stopword. Kedua data ini didapatkan dengan cara membaca teks file dari data yang bersangkutan.
* Untuk dapat menggunakan skrip ini, maka file teks kamus dan stopwords harus dimasukkan ke dalam proyek sebagai resources.
Dim kamus() As String = My.Resources.kamus.Split("|") Dim stopwords() As String = My.Resources.stopwords.Split("|")
Langkah-langkah penggunaan algoritma ini adalah
1. Lakukan proses pembuangan tanda baca dan karakter spesial dari kalimat input
input = Tokenizing(input.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. Lakukan pemisahan kata berdasarkan karakter spasi
Dim daftarInput() As String = input.Split(" ")
* Lakukan inisialisasi variabel yang digunakan oleh metode ini
Dim s As New StemmingNaziefAndriani(kamus)
3. Lakukan perhitungan pada semua kata dalam input
Jika kata tersebut merupakan stop word, maka tidak perlu melakukan proses stemming
hal ini hanya dilakukan untuk memudahkan pembacaan saja
If isStopWord(daftarInput(i), stopwords) Then Console.Write("-".PadRight(15) & "(terdeteksi sebagai stopword)") . . .
* Gunakan fungsi ini untuk mengetahui apakah input teks merupakan stop word atau tidak
Public Function isStopWord(ByVal input As String, ByVal stopwords() As String) As Boolean For j As Integer = 0 To stopwords.Length - 1 If input = stopwords(j) Then Return True End If Next Return False End Function
4. lakukan proses stemming dari kata tersebut
Penjelasan lebih detail tentang fungsi ini dapat dilihat pada penjelasan skrip dibawah ini (poin 4a – 4e)
Dim tmpTeks As String = s.stemming(daftarInput(i))
Memasuki perhitungan utama dari proses stemming
Berdasarkan teori stemming ini, maka ada 3 tahapan proses untuk mendapatkan kata dasar, yaitu
* Proses penghapusan infleksional suffiks
* Proses penghapusan derivation suffiks
* Proses penghapusan derivation prefiks
4a. Lakukan pengecekan apakah input kata sudah tersedia dalam kamus
If daftarKataKamus.Contains(kata) Then Return akarKata . . .
* Lakukan proses penghapusan Infleksional Suffixes, Derivation Suffiks, dan Derivation Prefiks pada kata tersebut (poin 4b – 4d)
hapusInfleksionalSuffiks() hapusDerivationSuffiks() hapusDerivationPrefiks()
4b. proses penghapusan Infleksional Suffixes
merupakan proses menghapus partikel suffiks -lah,-kah,-nya,-tah,-pun,-ku,-mu
jika kata dasar ditemukan pada kamus maka perhitungan akan dihentikan
Public Overridable Sub hapusInfleksionalSuffiks() ' akhiran -lah, -kah, -nya, -tah, -pun If kata.EndsWith("lah") OrElse kata.EndsWith("kah") OrElse kata.EndsWith("nya") OrElse kata.EndsWith("tah") OrElse kata.EndsWith("pun") Then kata = kata.Substring(0, kata.Length - 3) If daftarKataKamus.Contains(kata) Then akarKata = kata Return End If ' akhiran -ku, -mu ElseIf kata.EndsWith("ku") OrElse kata.EndsWith("mu") Then kata = kata.Substring(0, kata.Length - 2) If daftarKataKamus.Contains(kata) Then akarKata = kata Return End If End If End Sub
4c. proses penghapusan Derivation Suffixes
merupakan proses menghapus partikel suffiks -i,-an,-kan
jika kata dasar ditemukan pada kamus maka perhitungan akan dihentikan
Public Overridable Sub hapusDerivationSuffiks() Dim kataAsal As String = kata ' akhiran -i If kata.EndsWith("i") Then kata = kata.Substring(0, kata.Length - 1) If daftarKataKamus.Contains(kata) Then akarKata = kata Return End If kata = kataAsal ' akhiran -an ElseIf kata.EndsWith("an") Then kata = kata.Substring(0, kata.Length - 2) If daftarKataKamus.Contains(kata) Then akarKata = kata Return End If kata = kataAsal ' akhiran -kan If kata.EndsWith("kan") Then kata = kata.Substring(0, kata.Length - 3) If daftarKataKamus.Contains(kata) Then akarKata = kata Return End If End If kata = kataAsal End If End Sub
4d. proses penghapusan Derivation Prefixes
merupakan proses menghapus beberapa partikel prefiks
jika kata dasar ditemukan pada kamus maka perhitungan akan dihentikan
Urutan proses pengecekan yang dilakukan adalah
* Tipe awalan ke 1 : di-, ke-, se-
* Tipe awalan ke 1 : di-, ke-, se-, kemudian lakukan penghapusan Derivation Suffixes
* Tipe awalan ke 1a: diper-, keber-, keter-
* Tipe awalan ke 1a: diper-, keber-, keter-, kemudian lakukan penghapusan Derivation Suffixes
* Tipe awalan ke 2 : be-, te-,
* Tipe awalan ke 2 : be-, te-, kemudian lakukan penghapusan Derivation Suffixes
* Tipe awalan ke 2a: bel-, ber-, tel-, ter-
* Tipe awalan ke 2a: bel-, ber-, tel-, ter-, kemudian lakukan penghapusan Derivation Suffixes
* Tipe awalan ke 3 : me-, pe-
* Tipe awalan ke 3 : me-, pe-, kemudian lakukan penghapusan Derivation Suffixes
* Tipe awalan ke 3a : mempel-
* Tipe awalan ke 3a : mempel-, kemudian lakukan penghapusan Derivation Suffixes
* Tipe awalan ke 3b : memper-
* Tipe awalan ke 3b : memper-, kemudian lakukan penghapusan Derivation Suffixes
* Tipe awalan ke 3c : meng-, peng-
* Tipe awalan ke 3c : meng-, peng-, kemudian lakukan penghapusan Derivation Suffixes
* Tipe awalan ke 3c : meng-, peng-, kemudian tambahkan huruf k sebelum kata dasar
* Tipe awalan ke 3c : meng-, peng-, kemudian tambahkan huruf k sebelum kata dasar, dan lakukan penghapusan Derivation Suffixes
* Tipe awalan ke 3d : meny-, peny-
* Tipe awalan ke 3d : meny-, peny-, kemudian lakukan penghapusan Derivation Suffixes
* Tipe awalan ke 3d : meny-, peny-, kemudian tambahkan huruf s sebelum kata dasar
* Tipe awalan ke 3d : meny-, peny-, kemudian tambahkan huruf s sebelum kata dasar, dan lakukan penghapusan Derivation Suffixes
* Tipe awalan ke 3e : mel-, mer-, pel-, per-
* Tipe awalan ke 3e : mel-, mer-, pel-, per-, kemudian lakukan penghapusan Derivation Suffixes
* Tipe awalan ke 3f : men-, pen-
* Tipe awalan ke 3f : men-, pen-, kemudian lakukan penghapusan Derivation Suffixes
* Tipe awalan ke 3f : men-, pen-, kemudian tambahkan huruf t sebelum kata dasar
* Tipe awalan ke 3f : men-, pen-, kemudian tambahkan huruf t sebelum kata dasar, dan lakukan penghapusan Derivation Suffixes
* Tipe awalan ke 3g : mem-, pem-
* Tipe awalan ke 3g : mem-, pem-, kemudian lakukan penghapusan Derivation Suffixes
* Tipe awalan ke 3g : mem-, pem-, kemudian tambahkan huruf p sebelum kata dasar
* Tipe awalan ke 3g : mem-, pem-, kemudian tambahkan huruf p sebelum kata dasar, dan lakukan penghapusan Derivation Suffixes
Public Overridable Sub hapusDerivationPrefiks() Dim kataAsal As String = kata '4d1. tipe awalan ke 1 : di-, ke-, se- If (kata.StartsWith("di") OrElse kata.StartsWith("ke") OrElse kata.StartsWith("se")) AndAlso kata.Length > 2 Then kata = kata.Substring(2) If daftarKataKamus.Contains(kata) Then akarKata = kata Return End If hapusDerivationSuffiks() If daftarKataKamus.Contains(kata) Then akarKata = kata Return End If ' Jika kata dasar tidak ditemukan, maka kembalikan menjadi kata asal untuk percobaan berikutnya kata = kataAsal ' awalan diper-, keber-, keter- If (kata.StartsWith("diper") OrElse kata.StartsWith("keber") OrElse kata.StartsWith("keter")) AndAlso kata.Length > 5 Then kata = kata.Substring(5) If daftarKataKamus.Contains(kata) Then akarKata = kata Return End If hapusDerivationSuffiks() If daftarKataKamus.Contains(kata) Then akarKata = kata Return End If ' Jika kata dasar tidak ditemukan, maka kembalikan menjadi kata asal untuk percobaan berikutnya kata = kataAsal End If '4d2. tipe awalan ke 2 : be-, te-, ElseIf (kata.StartsWith("be") OrElse kata.StartsWith("te")) AndAlso kata.Length > 2 Then kata = kata.Substring(2) If daftarKataKamus.Contains(kata) Then akarKata = kata Return End If hapusDerivationSuffiks() If daftarKataKamus.Contains(kata) Then akarKata = kata Return End If ' Jika kata dasar tidak ditemukan, maka kembalikan menjadi kata asal untuk percobaan berikutnya kata = kataAsal ' awalan bel-, ber-, tel-, ter- If (kata.StartsWith("bel") OrElse kata.StartsWith("ber") OrElse kata.StartsWith("tel") OrElse kata.StartsWith("ter")) AndAlso kata.Length > 3 Then kata = kata.Substring(3) If daftarKataKamus.Contains(kata) Then akarKata = kata Return End If hapusDerivationSuffiks() If daftarKataKamus.Contains(kata) Then akarKata = kata Return End If ' Jika kata dasar tidak ditemukan, maka kembalikan menjadi kata asal untuk percobaan berikutnya kata = kataAsal End If '4d3. tipe awalan ke 3 : me-, pe- ElseIf (kata.StartsWith("me") OrElse kata.StartsWith("pe")) AndAlso kata.Length > 2 Then kata = kata.Substring(2) If daftarKataKamus.Contains(kata) Then akarKata = kata Return End If hapusDerivationSuffiks() If daftarKataKamus.Contains(kata) Then akarKata = kata Return End If ' Jika kata dasar tidak ditemukan, maka kembalikan menjadi kata asal untuk percobaan berikutnya kata = kataAsal '4d3a. awalan mempel- If (kata.StartsWith("mempel")) AndAlso kata.Length > 6 Then kata = kata.Substring(6) If daftarKataKamus.Contains(kata) Then akarKata = kata Return End If hapusDerivationSuffiks() If daftarKataKamus.Contains(kata) Then akarKata = kata Return End If ' Jika kata dasar tidak ditemukan, maka kembalikan menjadi kata asal untuk percobaan berikutnya kata = kataAsal End If '4d3b. awalan memper- If (kata.StartsWith("memper")) AndAlso kata.Length > 6 Then kata = kata.Substring(6) If daftarKataKamus.Contains(kata) Then akarKata = kata Return End If hapusDerivationSuffiks() If daftarKataKamus.Contains(kata) Then akarKata = kata Return End If ' Jika kata dasar tidak ditemukan, maka kembalikan menjadi kata asal untuk percobaan berikutnya kata = kataAsal End If '4d3c. awalan meng-, peng- If (kata.StartsWith("meng") OrElse kata.StartsWith("peng")) AndAlso kata.Length > 4 Then kata = kata.Substring(4) If daftarKataKamus.Contains(kata) Then akarKata = kata Return End If hapusDerivationSuffiks() If daftarKataKamus.Contains(kata) Then akarKata = kata Return End If ' Jika kata dasar tidak ditemukan, maka kembalikan menjadi kata asal untuk percobaan berikutnya kata = kataAsal ' tambahkan "k" pada awal kata kata = "k" & kata.Substring(4) If daftarKataKamus.Contains(kata) Then akarKata = kata Return End If hapusDerivationSuffiks() If daftarKataKamus.Contains(kata) Then akarKata = kata Return End If ' Jika kata dasar tidak ditemukan, maka kembalikan menjadi kata asal untuk percobaan berikutnya kata = kataAsal End If '4d3d. awalan meny-, peny- If (kata.StartsWith("meny") OrElse kata.StartsWith("peny")) AndAlso kata.Length > 4 Then kata = kata.Substring(4) If daftarKataKamus.Contains(kata) Then akarKata = kata Return End If hapusDerivationSuffiks() If daftarKataKamus.Contains(kata) Then akarKata = kata Return End If ' Jika kata dasar tidak ditemukan, maka kembalikan menjadi kata asal untuk percobaan berikutnya kata = kataAsal ' tambahkan "s" pada awal kata kata = "s" & kata.Substring(4) If daftarKataKamus.Contains(kata) Then akarKata = kata Return End If hapusDerivationSuffiks() If daftarKataKamus.Contains(kata) Then akarKata = kata Return End If ' Jika kata dasar tidak ditemukan, maka kembalikan menjadi kata asal untuk percobaan berikutnya kata = kataAsal End If '4d3e. awalan mel-, mer-, pel-, per- If (kata.StartsWith("mel") OrElse kata.StartsWith("mer") OrElse kata.StartsWith("pel") OrElse kata.StartsWith("per")) AndAlso kata.Length > 3 Then kata = kata.Substring(3) If daftarKataKamus.Contains(kata) Then akarKata = kata Return End If hapusDerivationSuffiks() If daftarKataKamus.Contains(kata) Then akarKata = kata Return End If ' Jika kata dasar tidak ditemukan, maka kembalikan menjadi kata asal untuk percobaan berikutnya kata = kataAsal End If '4d3f. awalan men-, pen- If (kata.StartsWith("men") OrElse kata.StartsWith("pen")) AndAlso kata.Length > 3 Then kata = kata.Substring(3) If daftarKataKamus.Contains(kata) Then akarKata = kata Return End If hapusDerivationSuffiks() If daftarKataKamus.Contains(kata) Then akarKata = kata Return End If ' Jika kata dasar tidak ditemukan, maka kembalikan menjadi kata asal untuk percobaan berikutnya kata = kataAsal ' tambahkan "t" pada awal kata kata = "t" & kata.Substring(3) If daftarKataKamus.Contains(kata) Then akarKata = kata Return End If hapusDerivationSuffiks() If daftarKataKamus.Contains(kata) Then akarKata = kata Return End If ' Jika kata dasar tidak ditemukan, maka kembalikan menjadi kata asal untuk percobaan berikutnya kata = kataAsal End If '4d3g. awalan mem-, pem- If (kata.StartsWith("mem") OrElse kata.StartsWith("pem")) AndAlso kata.Length > 3 Then kata = kata.Substring(3) If daftarKataKamus.Contains(kata) Then akarKata = kata Return End If hapusDerivationSuffiks() If daftarKataKamus.Contains(kata) Then akarKata = kata Return End If ' Jika kata dasar tidak ditemukan, maka kembalikan menjadi kata asal untuk percobaan berikutnya kata = kataAsal ' tambahkan "p" pada awal kata kata = "p" & kata.Substring(3) If daftarKataKamus.Contains(kata) Then akarKata = kata Return End If hapusDerivationSuffiks() If daftarKataKamus.Contains(kata) Then akarKata = kata Return End If ' Jika kata dasar tidak ditemukan, maka kembalikan menjadi kata asal untuk percobaan berikutnya kata = kataAsal End If End If End Sub
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.
Adakah contoh steming menggunakan php. Berbasis web.
Saya tidak memiliki contoh implementasi dalam bentuk php tetapi seharusnya sistem ini dapat dikonversi ke dalam bahasa lain termasuk php karena tidak bergantung pada fungsi2 tertentu yang hanya disediakan oleh perangkat lunak tertentu