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.
1 2 |
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
1 |
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
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
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
1 |
Dim daftarInput() As String = input.Split(" ") |
* Lakukan inisialisasi variabel yang digunakan oleh metode ini
1 |
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
1 2 3 |
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
1 2 3 4 5 6 7 8 9 |
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)
1 |
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
1 2 3 |
If daftarKataKamus.Contains(kata) Then Return akarKata . . . |
* Lakukan proses penghapusan Infleksional Suffixes, Derivation Suffiks, dan Derivation Prefiks pada kata tersebut (poin 4b – 4d)
1 2 3 |
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
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
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
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 |
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
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 |
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