MODEL STEMMING BERBASIS KAMUS UNTUK DOKUMEN BERBAHASA SUNDA
ANDHY PURWOKO
SEKOLAH PASCASARJANA INSTITUT PERTANIAN BOGOR BOGOR 2011
PERNYATAAN MENGENAI TESIS DAN SUMBER INFORMASI
Dengan ini saya menyatakan bahwa tesis Model Stemming Berbasis Kamus untuk Dokumen Berbahasa Sunda adalah karya saya dengan arahan dari komisi pembimbing dan belum diajukan dalam bentuk apa pun kepada perguruan tinggi mana pun. Sumber informasi yang berasal atau dikutip dari karya yang diterbitkan maupun tidak diterbitkan dari penulis lain telah disebutkan dalam teks dan dicantumkan dalam Daftar Pustaka di bagian akhir tesis ini.
Bogor, Agustus 2011
Andhy Purwoko NRP G651060014
ABSTRACT ANDHY PURWOKO. Dictionary-Based Stemming Model for Documents in Sundanese Language. Under the direction of AGUS BUONO and AHMAD RIDHA. The use of local languanges tends to vanish, and one of the reasons is the reluctance of local people to practice their own language. Research on the local language, particulary Sundanesse, is also not considered to be interesting topic. More documents in Sundanesse have been digitized, but research on the documents is still limited. Information Retrieval (IR) has been used to explore information from tested documents. In IR, the documents will be parsed to obtain their tokens. The tokens will be saved in index files. In order to make the IR optimal, the index files should be created as small as possible. Therefore, discarding unimportant words should be done. Prefixes, infixes, sufixes, confixes, ambifixes, and repeated patterns in the tokens will be eliminated. This elimination proccess is called stemming. The stemming algorithm is based on dictionary, i.e., the stemmed words will be compared with dictionary. This algorithm has produced the expected words with 91.38% accuracy. In the future researches, this algorithm can be deployed on seacrh engine, Natural Language Processing (NLP) or machine translation for Sundanese. Keywords: stemming, prefix, infix, sufix, confix, ambifix, repeated words.
RINGKASAN ANDHY PURWOKO. Model Stemming Berbasis Kamus untuk Dokumen Berbahasa Sunda. Di bawah bimbingan AGUS BUONO dan AHMAD RIDHA. Penggunaan bahasa daerah cenderung menuju ke arah kepunahan. Hal ini disebabkan karena makin enggannya orang daerah menggunakan Bahasa daerahnya sendiri. Penelitian terhadap bahasa daerah khususnya Bahasa Sunda juga bukan merupakan bahasan yang menarik. Telah ada dokumen berbahasa Sunda yang sudah berbentuk file digital, namun belum banyak penelitian terhadap dokumen berbahasa Sunda tersebut. Salah satu metode untuk mengeksplorasi informasi dari dokumen-dokumen Bahasa Sunda adalah sistem temu kembali informasi. Dalam Sistem Temu Kembali Informasi dokumen-dokumen tersebut akan di-parse untuk mendapatkan token. Token-token tersebut akan disimpan dalam sebuah file indeks. Agar sistem temu kembali optimal maka file indeks dibuat sekecil mungkin. Agar file indeks kecil, proses parsing selanjutnya adalah penghilangan kata yang tidak penting. Selanjutnya token-token tersebut akan dihilangkan awalan, sisipan, akhiran, imbuhan terbelah dan imbuhan gabungannya. Proses tersebut diberi nama stemming. Algoritme stemming yang dirancang adalah algoritme berdasarkan kamus. Algoritme akan menghilangkan awalan, sisipan, akhiran imbuhan terbelah dan imbuhan gabungan serta kata ulang, dan pada setiap hasil proses akan dibandingkan dengan kamus. Dalam penelitian ini disiapkan data kamus dan dokumen uji sebanyak 130 dokumen dalam bahasa Sunda. Pada proses tokenizer, dari 130 dokumen uji didapat 100 824 kata. Katakata tersebut belum unik, sehingga perlu diproses lebih lanjut untuk mendapatkan satu kata unik dari sejumlah kata yang memiliki bentuk yang sama. Setelah kata yang sama dihilangkan didapat kata unik sebesar 16 949 kata. Dari jumlah kata tersebut setelah di-stem hasilnya adalah 11 515 kata. Dari 16 949 kata tersebut setelah dipelajari ternyata banyak kata yang bukan berasal dari bahasa Sunda. Terdapat kata-kata dalam bahasa Arab, bahasa Jawa, bahasa Indonesia dan bahasa Inggris. Ada juga bahasa Indonesia yang di’sunda’kan, misalnya dimanfaatkeun (seharusnya dimangpaatkeun); panolong, ngarakit, usulanana, mertahankeun (bahasa Indonesia yang diberi imbuhan bahasa Sunda); juga nama-nama, baik nama orang, nama tempat, nama sungai dan lain-lain. Selain itu, banyak juga singkatan-singkatan serta penulisan-penulisan yang salah ketik. Tentu saja katakata di atas jika di-stem dengan algoritme stemming bahasa Sunda hasilnya tidak akan pernah sesuai dengan yang diharapkan. Untuk melihat apakah stemming bekerja sesuai dengan yang diharapkan, kata-kata tersebut di atas dihilangkan dan hasilnya didapat 10 416 kata. Dalam pengujian terhadap semua kata bahasa Sunda (10 416 kata), algoritme stemming yang dirancang menghasilkan pengurangan kata sebesar 49.31%. Dari jumlah kata hasil stemming (5 136 kata), kata-kata yang didapat dan sesuai dengan harapan berjumlah 4 693 kata dan sisanya 443 adalah kata-kata hasil yang tidak sesuai dengan harapan. Dari data ini dapat dihitung bahwa akurasi
stemming hasil kata yang diharapkan adalah sebesar: (4 693/5 136) x 100% = 91.38% Dalam proses stemming ternyata didapat kata-kata yang overstemming dan tidak ada kata hasil yang yang dikatagorikan dalam understemming. Algoritme yang dirancang dapat dikatagorikan ke dalam algoritme heavy stemming karena tidak ditemukan hasil kata yang understemming. Algoritme yang dirancang sebagian besar memberikan hasil yang cukup baik, meskipun masih dapat terjadi beberapa kata tidak menghasilkan kata seperti yang diharapkan. Potensi kegagalan masih dapat terjadi jika kata yang akan di-stem memiliki pola yang sama dengan kata yang gagal distemming. Dari hasil stemming didapat 8,62% kata yang tidak sesuai dengan harapan. Hal tersebut disebabkan karena masih ada kekurangsempurnaan dari algoritme yang dirancang. Untuk penelitian selanjutnya ini, algoritme ini diterapkan untuk mesin pencari dokumen berbahasa Sunda, NLP (Natural Language Processing) atau mesin translator dokumen bahasa Sunda. Kata Kunci: stemming, awalan, sisipan, akhiran, imbuhan terbelah, imbuhan gabungan, kata ulang
© Hak Cipta milik IPB, tahun 2011 Hak Cipta dilindungi Undang-undang 1. Dilarang mengutip sebagian atau seluruh karya tulis ini tanpa mencantumkan atau menyebutkan sumber a. Pengutipan hanya untuk kepentingan pendidikan, penelitian, penulisan karya ilmiah, penyusunan laporan, penulisan kritik atau tinjauan suatu masalah b. Pengutipan tidak merugikan kepentingan yang wajar IPB 2. Dilarang mengumumkan dan memperbanyak sebagian atau seluruh karya tulis dalam bentuk laporan apapun tanpa izin IPB
MODEL STEMMING BERBASIS KAMUS UNTUK DOKUMEN BERBAHASA SUNDA
ANDHY PURWOKO
Tesis Sebagai salah satu syarat untuk memperoleh gelar Magister Sains pada Departemen Ilmu Komputer
SEKOLAH PASCASARJANA INSTITUT PERTANIAN BOGOR BOGOR 2011
Penguji Luar Komisi pada Ujian Tesis : Sony Hartono Wijaya, S.Kom
LEMBAR PENGESAHAN Judul Tesis
: Model Stemming Berbasis Kamus untuk Dokumen Berbahasa Sunda Nama : Andhy Purwoko NRP : G 651060014 Program Studi : Ilmu Komputer
Disetujui Komisi Pembimbing
Dr. Ir. Agus Buono, M. Si, M. Kom Ketua
Ahmad Ridha, S.Kom, M.S Anggota
Diketahui
Ketua Program Studi Ilmu Komputer
Dekan Sekolah Pascasarjana
Dr. Ir. Agus Buono, M. Si, M. Kom
Dr. Ir. Dahrul Syah, MSc.Agr
Tanggal Ujian : 27 Juni 2011
Tanggal Lulus :
PRAKATA Dengan memanjatkan puji dan syukur ke hadirat Allah Subhanahu Wa Ta’ala atas segala petunjuk dan karunia-Nya sehingga karya ilmiah ini berhasil diselesaikan. Pada penelitian ini judul yang dipilih adalah Model Stemming Berbasis Kamus untuk Dokumen Berbahasa Sunda. Karya ilmiah ini disusun sebagai salah satu persyaratan untuk memperoleh gelar Magister Sains pada Departemen Ilmu Komputer Intitut Pertanian Bogor. Pada penulisan karya ilmiah ini penulis banyak menerima bantuan dari berbagai pihak. Untuk itu ucapan terima kasih penulis tujukan kepada Bapak Dr. Ir. Agus Buono, M.Si, M.Kom dan Bapak Ahmad Ridha, S. Kom, M.S sebagai komisi pembimbing yang telah banyak memberi bimbingan dan arahan selama proses penelitian hingga terselesaikannya tesis ini. Ucapan terima kasih juga penulis sampaikan kepada Bapak Sony Hartono Wijaya, S.Kom selaku penguji pada sidang tesis. Selain itu ucapan terima kasih juga kami ucapkan kepada seluruh staf Departemen Ilmu Komputer yang telah banyak membantu selama ini. Dorongan moril juga banyak diberikan kepada penulis oleh istri tercinta, putraputri penulis dan juga semua anggota keluarga, yang dengan gigih terus mendorong agar segera menyelesaikan tesis ini. Pemahaman tentang tata bahasa Sunda banyak diberikan oleh Bapak Yayat Sudaryat, untuk itu penulis mengucapkan terimakasih atas ilmu yang diberikan oleh beliau. Penulis menyadari bahwa penelitian ini masih banyak yang perlu disempurnakan. Mudah-mudahan penelitian lebih lanjut terhadap stemming bahasa Sunda dapat dikembangkan lebih lanjut. Semoga penelitian ini dapat bermanfaat bagi kita semua demi kemajuan ilmu pengetahuan dan teknologi.
Bogor, Agustus 2011
Andhy Purwoko
RIWAYAT HIDUP Penulis dilahirkan di Blora, pada tanggal 05 September 1969 dari pasangan M. Sutijono, BE dan Sumarsih. Penulis merupakan putera pertama dari empat bersaudara. Menikah dengan Puspita Sari Dewi dan dikarunai 2 putra dan 1 putri. Tahun 1988 penulis lulus dari SMA Negeri 4 Bandung. Tahun 1990 melanjutkan pendidikan di jurusan Teknik Informatika ST INTEN Bandung, dan lulus pada tahun 1995. Penulis pernah bekerja pada PT Kwarsa Hexagon (1995) dan PT Wiraguna Tani (1996-1997). Pada kedua perusahaan tersebut penulis bekerja sebagai programmer. Tahun 1998 penulis bekerja pada Kantor Pengolahan Data Elektronik (KPDE) Provinsi Jawa Barat, dan diangkat sebagai PNS pada tahun 1999. Selanjutnya KPDE berubah bentuk menjadi Badan Pengembangan Sistem Informasi dan Telematika (Bapesitelda) Provinsi Jawa Barat dan penulis bekerja di sana sebagai Pranata Komputer. Pada tahun 2005 Bapesitelda berubah bentuk lagi menjadi Dinas Komunikasi dan Informasi (Diskominfo), dan pada tahun 2009 penulis diangkat sebagai Kepala Seksi Penerapan Telematika pada Bidang Telematika. Tahun 2010 penulis dipindahkan ke Balai Layanan Pengadaan Barang/Jasa Secara Elektronik (LPSE) Provinsi Jawa Barat dan menduduki jabatan sebagai Kepala Seksi Pendayagunaan dan Dukungan Teknologi Informasi dan Komunikasi.
DAFTAR ISI
Halaman DAFTAR GAMBAR ..................................................................................
xvi
DAFTAR LAMPIRAN ...............................................................................
xviii
1. PENDAHULUAN ..................................................................................
1
1.1 Latar Belakang ..................................................................................
1
1.2 Perumusan Masalah ..........................................................................
2
1.3 Ruang Lingkup .................................................................................
3
1.4 Tujuan Penelitian ..............................................................................
3
1.5 Manfaat Penelitian ............................................................................
3
2. TINJAUAN PUSTAKA ..........................................................................
5
2.1 Morfologi Bahasa Sunda ..................................................................
5
2.1.1 Imbuhan (Afiks) .......................................................................
6
2.1.1.1 Rarangken Hareup (Awalan) ......................................
6
2.1.1.2 Rarangken Tengah (Sisipan) .......................................
8
2.1.1.3 Rarangken Tukang (Akhiran) ......................................
9
2.1.1.4 Rarangken Barung (Imbuhan Terbelah) ......................
11
2.1.1.5 Rarangken Bareng (Imbuhan Gabungan) ....................
12
2.1.2 Kata Ulang ...............................................................................
14
2.1.2.1 Gembleng (Seluruhnya) ...............................................
14
2.1.2.2 Sabagian (Sebagian) ....................................................
15
2.1.2.3 Rarangkenan (Kata Ulang Gabungan) ........................
15
2.2 Stemming ..........................................................................................
17
2.3 Kesalahan Stemming .........................................................................
19
3. METODOLOGI PENELITIAN ............................................................
21
3.1 Kerangka Penelitian ........................................................................
21
3.2 Prosedur Penelitian .........................................................................
21
3.2.1 Tahap Pemahaman Masalah ..................................................
22
3.2.2 Tahap Pengumpulan Dokumen dan Pemasukan Data Kamus
22
Halaman 3.2.3 Tahap Proses Perancangan Tokenizer ....................................
22
3.2.4 Tahap Pembuatan Kata Uji dari Dokumen ............................
23
3.2.5 Tahap Pembuatan Stoplist .....................................................
23
3.2.6 Tahap Perancangan Stemming ...............................................
24
3.2.6.1 Modul/Fungsi Hilangkan_Awalan() ..........................
25
3.2.6.2 Modul/Fungsi Hilangkan_Akhiran() .........................
27
3.2.6.3 Modul/Fungsi Hilangkan_Sisipan() ..........................
28
3.2.6.4 Modul/Fungsi Hilangkan_Barung() ..........................
33
3.2.6.5 Modul/Fungsi Hilangkan_Bareng() ...........................
34
3.2.6.6 Modul/Fungsi Cek_Kata_Ulang() .............................
35
3.2.7 Tahap Evaluasi Stemming .......................................................
35
3.2.8 Tahap Penulisan Tesis ............................................................
36
3.2.9 Tahap Pembuatan Kesimpulan ...............................................
36
4. HASIL PENELITIAN DAN PEMBAHASAN .....................................
37
4.1 Hasil Penelitian ................................................................................
37
4.1.1 Hasil Kata yang Overstemming ..............................................
38
4.1.2 Hasil Kata yang Tidak Sesuai Harapan ..................................
39
4.2 Analisis Terhadap Pengujian Stemming ..........................................
39
4.2.1 Analisis Terhadap Kata yang Overstemming .........................
40
4.2.2 Analisis Terhadap Kata yang Tidak Sesuai Harapan .............
43
5. KESIMPULAN DAN SARAN
47
5.1 Kesimpulan ......................................................................................
47
5.2 Saran ................................................................................................
47
DAFTAR PUSTAKA .................................................................................
49
LAMPIRAN ...............................................................................................
51
DAFTAR GAMBAR
Halaman 1
Diagram pembetukan kata yang berimbuhan ...................................
5
2
Diagram pembetukan kata ulang ......................................................
14
3
Ilustrasi proses stemming ..................................................................
17
4
Langkah-langkah penelitian ..............................................................
21
5
Diagram proses stemming .................................................................
24
6
Fungsi Cek_Prefiks() ........................................................................
25
7
Fungsi Hilangkan_Awalan() .............................................................
26
8
Fungsi Cek_Sufiks() .........................................................................
27
9
Bagian algoritme Hilangkan_Sisipan() untuk aturan kata yang diawali dengan huruf “l” ..................................................................
10
28
Bagian algoritme Hilangkan_Sisipan() untuk aturan kata yang diawali dengan huruf “r” .................................................................
29
11 Bagian algoritme Hilangkan_Sisipan() untuk aturan kata yang mengandung suku kata "tr”, “br”, “ cr”, “kr”, “ pr”, “ jr”, “dr” ......
29
12 Fungsi in_str_ar() .............................................................................
30
13 Bagian algoritme Hilangkan_Sisipan() untuk aturan kata yang mengandung suku kata “ar” .............................................................
30
14 Bagian algoritme Hilangkan_Sisipan() untuk aturan kata yang mengandung suku kata “ra” .............................................................
31
15 Fungsi infiks_in() .............................................................................
31
16 Bagian algoritme Hilangkan_Sisipan() untuk aturan kata yang mengandung suku kata “in” ..............................................................
31
17 Fungsi in_str_um() ............................................................................
32
18 Bagian algoritme Hilangkan_Sisipan() untuk aturan kata yang mengandung suku kata “um” ............................................................
32
19 Bagian algoritme Hilangkan_Barung() .............................................
33
20 Bagian algoritme Hilangkan_Bareng() .............................................
34
21 Proses percobaan stemming terhadap dokumen uji ..........................
38
Halaman 22
23
Bagian algoritme Hilangkan_Sisipan() yang menghasilkan kata yang tidak diharapkan .......................................................................
44
Bagian algoritme Hilangkan_Sisipan() yang menguji sisipan “ar”
44
DAFTAR LAMPIRAN
Halaman 1
Modul tokenizer ................................................................................
53
2
Modul stemming ...............................................................................
55
1. PENDAHULUAN
1.1
Latar Belakang Indonesia adalah negara yang memiliki banyak pulau yang terbentuk
dengan karakteristik unik dan spesifik. Berbeda dengan bangsa lain yang menjadi suatu negara atau bangsa karena kesamaan bahasa, Indonesia adalah negara yang terbentuk karena latar belakang historis, kondisi sosiologis, antropologis dan geografis yang unik dan spesifik. Akibat keragaman dan keunikan ini terdapat ratusan bahasa daerah dalam Negara Kesatuan Republik Indonesia ini. Menurut hasil survey Litbang Media Group, bahasa daerah cenderung menuju ke arah kepunahan (Media Indonesia 2009). Kepunahan tersebut disebabkan oleh makin berkurangnya pengguna bahasa daerah. Hal ini disebabkan oleh ketertarikan orang daerah itu sendiri untuk menggunakan bahasa daerahnya. Selain itu penelitian-penelitian terhadap bahasa daerah bukan merupakan sesuatu bahasan yang dianggap menarik untuk diteliti. Penelitian di bidang teknologi informasi terhadap bahasa daerah pun sangat kurang. Dokumen-dokumen dalam bahasa daerah sudah banyak yang berbentuk digital, namun belum banyak penelitian terhadap dokumen-dokumen bahasa daerah tersebut. Salah satu metode untuk mengeksplorasi informasi dari dokumendokumen bahasa daerah adalah sistem temu kembali informasi. Dalam sistem temu kembali informasi dokumen-dokumen tersebut di-parse untuk mendapatkan token. Hasil dari proses parsing ini nantinya adalah sebuah tabel indeks yang merupakan kumpulan token-token. Token adalah unsur terkecil dari suatu dokumen yang mempunyai arti. Untuk meningkatkan kinerja dari sistem temu kembali informasi, token-token tersebut dipilah-pilah kembali dan kata-kata yang tidak perlu dibuang. Selain itu untuk memperkecil ukuran indeks token yang disimpan dalam indeks harus berupa kata dasar saja. Proses untuk mencari kata dasar dengan cara membuang awalan, sisipan dan akhiran dari suatu kata disebut stemming. Dengan proses stemming ini ukuran file indeks akan semakin kecil, dan dengan ukuran file indeks
2 yang kecil diharapkan kinerja dari sistem temu kembali informasi meningkat. Dengan stemming kata dahar (makan), dahareun (makanan), didahar (dimakan) akan disimpan dalam indeks sebagai kata dahar saja. Hal ini tentu saja sangat menghemat ukuran indeks. Pada penelitian ini akan dicoba untuk mengeksplorasi stemming untuk bahasa Sunda. Dengan penelitian ini diharapkan lahir aplikasi-aplikasi sistem temu kembali informasi yang berkaitan dengan bahasa daerah khususnya bahasa Sunda. 1.2
Perumusan Masalah Tata bahasa Sunda hampir mirip dengan tata bahasa Indonesia. Beberapa
algoritme yang pernah diteliti oleh beberapa peneliti terhadap stemming bahasa Indonesia dapat diterapkan dalam proses mencari kata dasar terhadap bahasa Sunda dengan beberapa modifikasi. Dari sekian banyak algoritme stemming bahasa Indonesia yang dihasilkan oleh para peneliti, beberapa peneliti sudah membandingkan bagaimana kinerja dari masing-masing algoritme stemming bahasa Indonesia yang ada. Asian et al (2005) membandingkan algoritme stemming Nazief dan Adriani
dengan algoritme Arifin dan Setiono. Dari
penelitan tersebut diperoleh kesimpulan bahwa algoritme stemming Nazief dan Adriani menghasilkan kata-kata yang diharapkan sekitar 93% dari dokumendokumen ujinya. Jadi sampai sejauh ini penelitian yang memberikan hasil terbaik terhadap stemming bahasa Indonesia adalah penelitian yang dilakukan oleh Nasief dan Adriani. Dalam algoritme stemming bahasa Indonesia, sebagian besar algoritmealgoritme tersebut belum banyak mengeksplorasi tentang stemming terhadap sisipan dan kata ulang. Sisipan dan kata ulang dalam bahasa Indonesia tidak banyak mengubah bentuk kata. Selain itu tidak banyak kata dalam bahasa Indonesia yang dapat diberi sisipan. Hal ini berbeda dengan sisipan dan kata ulang dalam bahasa daerah khususnya bahasa Sunda. Sisipan dan kata ulang dalam bahasa Sunda sangat produktif dan banyak kata dalam bahasa Sunda yang dapat diberi sisipan. Meskipun tata bahasa Sunda mirip dengan tata bahasa Indonesia, namun
3 tata bahasa Sunda memiliki kerumitan tersendiri. Ada beberapa aturan dalam tata bahasa Sunda yang tidak ada dalam tata bahasa Indonesia, sehingga algoritme stemmingnya pun akan mempuyai kerumitan tersendiri. Jenis huruf dalam pembacaan dokumen juga berpengaruh terhadap proses parsing dan pastinya berpengaruh juga pada proses stemmingnya. Pada penelitian ini, dokumen bahasa Sunda yang diteliti adalah dokumen yang ditulis dalam huruf latin. 1.3
Ruang Lingkup Dalam penelitian ini pembahasan difokuskan pada: 1.
Algoritme stemming bahasa Sunda yang dibangun adalah algoritme yang didasarkan atas perbandingan dengan kamus.
2.
Stemming bahasa Sunda yang diteliti adalah terhadap imbuhan (awalan, akhiran, sisipan), imbuhan terbelah, imbuhan gabungan dan kata ulang.
1.4
Tujuan Penelitian Penelitian ini bertujuan mengembangkan algoritme stemming berbasis
kamus untuk dokumen-dokumen berbahasa Sunda. 1.5
Manfaat Penelitian Penelitian terhadap algoritme stemming bahasa Sunda ini diharapkan dapat
diaplikasikan untuk mencari kata dasar dalam dokumen-dokumen berbahasa Sunda dengan hasil yang paling optimal. Hasil dari pencarian kata dasar tersebut nantinya dapat digunakan untuk pengindeksan dokumen yang siap untuk digunakan oleh aplikasi-aplikasi dalam sistem temu kembali informasi khususnya untuk dokumen-dokumen berbahasa Sunda. Selain untuk sistem temu kembali informasi, hasil dari pencarian kata dasar ini juga dapat digunakan untuk aplikasi-aplikasi bahasa alami khususnya untuk aplikasi bahasa alami berbahasa Sunda. Aplikasi lain yang dapat dihasilkan adalah pembuatan aplikasi penerjemah dari dokumen berbahasa Sunda ke dokumen berbahasa Indonesia atau sebaliknya. Diharapkan pula dari penelitian ini
4 dapat dirumuskan kembali algoritme perbaikan dari algoritme terbaik hasil penelitian ini.
2. TINJAUAN PUSTAKA
2.1
Morfologi bahasa Sunda Morfem adalah satuan bahasa terkecil yang mengandung makna (Zaenal &
Junaiyah 2007). Terdapat dua macam morfem, yaitu morfem bebas dan morfem terikat. Morfem bebas adalah morfem yang berdiri sendiri misalnya: jual dan beuli. Sedangkan morfem terikat adalah morfem yang digabungkan dengan morfem lain. Contoh morfem terikat adalah: dijualbeulikeun. Kata tersebut dapat dipecah menjadi: jual beuli dan di- + … -keun}. Kata jual dan beuli adalah dua morfem bebas yang merupakan satuan terkecil yang tidak dapat dipecah lagi dan yang mempunyai arti. Bentuk di-, dan -keun juga tergolong morfem karena merupakan satuan terkecil yang mengandung makna. Imbuhan atau afiks mempunyai arti penting dalam suatu tata bahasa terutama dalam sebagian besar tata bahasa daerah di Indonesia. Keberadaan afiks atau imbuhan pada kata dasar dapat mengubah bentuk, fungsi, katagori dan makna dasar dari suatu kata. Ilustrasi imbuhan digambarkan seperti pada Gambar 1.
Gambar 1 Diagram pembentukan kata yang berimbuhan.
6 2.1.1 Imbuhan (Afiks) Bahasa Sunda memiliki imbuhan sama halnya seperti bahasa Indonesia. Ada lima macam imbuhan, yaitu rarangken hareup (awalan/prefiks), rarangken tengah/seselan
(sisipan//infiks),
rarangken
tukang/ahiran
(akhiran/sufiks),
Rarangken barung (imbuhan terbelah/konfiks), dan rarangken bareng (imbuhan gabungan/ambifiks) (Sudaryat et al. 2007).
2.1.1.1 Rarangken Hareup (Awalan) Rarangken hareup adalah imbuhan yang terletak di awal kata. Rarangken hareup pada bahasa Sunda yaitu: ba-, barang-, di-, ka-, N-, pa,- pada-, pang-, para-, per-, pi-, sa-, sang-, si-, silih/sili, ti-, ting-/pating-. 1. Rarangken hareup ba- (contoh: balayar = berlayar, badarat = berjalan, barempug=berdiskusi). 2. Rarangken hareup barang- (contoh: barangbeuli = sesuatu untuk dibeli, baranginjeum = sesuatu yang dipinjam, barangdahar = sesuatu untuk dimakan). 3. Rarangken hareup di- (contoh: digawe = bekerja, dibaju = memakai baju, disada = berbunyi). 4. Rarangken hareup ka- (contoh: karasa = terasa, kabawa = terbawa, kageleng = tergilas). 5. Rarangken hareup NPada rarangken hareup N- (nasal) terdapat alomorf m-, n-, ng-, nga-, nge-, dan ny-. Aturan rarangken hareup N- adalah sebagai berikut: -
Rarangken N- berubah menjadi m- apabila digunakan pada kata dasar yang diawali konsonan b atau p (contoh: baca menjadi maca = membaca, pacul menjadi macul = memacul).
7 - Rarangken N- berubah menjadi n- apabila digunakan pada kata dasar yang diawali konsonan t (contoh: tulis menjadi nulis = menulis, tanya menjadi nanya = bertanya). - Rarangken N- berubah menjadi ng- apabila digunakan pada kata dasar yang diawali konsonan k atau huruf vokal (contoh: karang menjadi ngarang = mengarang, aku menjadi ngaku = mengaku). - Rarangken N- berubah menjadi nga- apabila digunakan pada kata dasar yang diawali konsonan b, d, g, h, j, l, m, n, w, dan y (contoh: badug menjadi ngabadug = terbentur, dulag menjadi ngadulag = menabuh bedug, goler menjadi ngagoler = berbaring, hampas menjadi
ngahampas =
meremehkan/membuat ampas), juru menjadi ngajuru = melahirkan, liang menjadi ngaliang = membuat lubang, ma’lum menjadi ngama’lum = memaklumi, riung menjadi ngariung = berkumpul, wadul menjadi ngawadul = berbohong). - Rarangken N- berubah menjadi nge- apabila digunakan pada kata dasar yang diawali konsonan dan hanya terdiri dari satu suku kata (contoh: cet menjadi ngecet = mengecat, bor menjadi ngebor = mengebor). - Rarangken N- berubah menjadi ny- apabila digunakan pada kata dasar yang diawali konsonan c dan s (contoh: colok menjadi nyolok = menusuk, sapih menjadi nyapih = menyapih). 6.
Rarangken hareup pa- (contoh: tani menjadi patani (petani), tugas menjadi patugas = petugas, takol menjadi panakol = pemukul).
7.
Rarangken hareup pada- (contoh: kepung menjadi padangepung (sedang mengepung), dagang menjadi padadagang (sedang dagang), kuat menjadi padakuat (sama-sama kuat)).
8.
Rarangken hareup para- (contoh: guru menjadi paraguru (guru-guru), siswa menjadi parasiswa (siswa-siswa), bapa menjadi parabapa (bapak-bapak)).
8 9.
Rarangken hareup per- (contoh: lambang menjadi perlambang (tanda-tanda), watak menjadi perwatak)
10. Rarangken hareup pi- (contoh: tuduh menjadi pituduh (petunjuk), ruhak menjadi piruhak (arang yang masih membara), tapak menjadi pitapak (jejak), damel menjadi pidamel (mengerjakan)) 11. Rarangken hareup sa- (contoh: rupa menjadi sarupa (serupa), kilo menjadi sakilo=sekilo) 12. Rarangken hareup sang- (contoh: hulu menjadi sanghulu (kepala mengarah ke suatu arah), hareup menjadi sanghareup (mengarah ke depan). 13. Rarangken hareup si- (contoh: dakep menjadi sidakep (posisi tangan dilipat didepan perut (seperti posisi shalat)), deang menjadi sideang (memanaskan badan di perapian)). 14. Rarangken hareup silih- (contoh: teunggeul menjadi silihteunggeul (saling pukul), tajong menjadi silihtajong (saling tendang). 15. Rarangken hareup ti- (contoh: tajong menjadi titajong (tertendang), teuleum menjadi titeuleum (tenggelam)). 16. Rarangken hareup ting-/pating- (contoh: gerendeng menjadi tinggerendeng (beberapa orang saling berbicara tapi tidak terlalu keras), burinyay menjadi tingburinyay (berkilatan)). 2.1.1.2 Rarangken Tengah (Sisipan) Rarangken tengah adalah imbuhan yang disisipkan di tengah kata dasar, Rarangken tengah pada bahasa Sunda yaitu: -ar-, -in-, -um-. Berikut adalah penjelasan rincinya. 1. Rarangken tengah -arPada rarangken tengah -ar- terdapat alomorf -al-, -ar-, dan ra- Rarangken tengah -ar- berubah menjadi -al- apabila:
9 1) Digunakan pada kata dasar yang diawali konsonan l (contoh: lieur menjadi lalieur (pusing-pusing), leuleus menjadi laleuleus (lemaslemas)). 2) Digunakan pada kata dasar yang diakhiri konsonan r (contoh: bageur menjadi balageur (banyak yang baik hati), pinter menjadi palinter (banyak yang pintar). 3) Digunakan pada kata dasar yang mengandung konsonan gabung br, tr, cr, kr, pr, jr, dan dr (contoh: kempreng menjadi kalempreng (tangantangan yang kaku), gombrang menjadi galombrang (pakaian yang kedodoran)). - Rarangken tengah -ar- berubah menjadi ar- apabila digunakan pada kata dasar yang diawali huruf vokal (contoh: asup menjadi arasup (banyak yang masuk), ulin menjadi arulin (banyak yang main)). - Rarangken tengah -ar- berubah menjadi ra- apabila digunakan pada kata dasar yang hanya terdiri dari satu suku kata dan diawali huruf konsonan (contoh: cleng menjadi racleng (berloncatan), beng menjadi rabeng (berterbangan)). 2.
Rarangken tengah -in- (contoh: tulis menjadi tinulis (tertulis/ditulis), panggih menjadi pinanggih (bertemu), sareng menjadi sinareng (bersama)).
3. Rarangken tengah -um- (contoh: sujud menjadi sumujud (bersujud), gantung menjadi gumantung (tergantung), lengis menjadi lumengis (memelas-melas)). Pada rarangken tengah -um- terdapat alomorf um-, yang terjadi apabila digunakan pada kata dasar yang diawali huruf vokal (contoh: amis menjadi umamis (macam-macam manis), aing menjadi umaing (egois)). 2.1.1.3 Rarangken Tukang (Akhiran) Rarangken tukang adalah imbuhan yang diletakkan pada akhir kata dasar. Rarangken tukang pada bahasa Sunda yaitu: -an, -eun, -keun, -na, -ing/-ning. Berikut adalah penjelasan rincinya.
10 1. Rarangken tukang -an (contoh: sakola menjadi sakolaan (sekolahan), tulis menjadi tulisan (tulisan), omong menjadi omongan (omongan), meter menjadi meteran (meteran). 2. Rarangken tukang -eun (contoh: dahar menjadi dahareun (untuk dimakan), rujak menjadi rujakeun (untuk dirujak)). 3. Rarangken tukang -keun (contoh: kawih menjadi kawihkeun (nyanyikan), gambar menjadi gambarkeun (gambarkan),
tiung menjadi tiungkeun
(kerudungkan)). 4. Rarangken tukang -na Pada Rarangken tukang -na terdapat alomorf -ana dan -nana - Rarangken -na berubah menjadi -ana apabila: 1) Digunakan pada kata dasar yang sudah ditambahkan akhiran -eun (contoh: bawa menjadi bawaeunana (hal yang harus dibawanya), dahar menjadi dahareunana (makan yang harus dimakanannya)). 2) Digunakan pada kata dasar yang sudah ditambahkan akhiran -an (contoh: tilu menjadi tiluanana = ketiga-tiganya, kabeh menjadi kabehanana (semuanya)). 3) Digunakan pada kata dasar yang sudah ditambahkan akhiran -keun (contoh: catet menjadi nyatetkeunana (mencatatkannya), bawa menjadi mawakeunana (membawakan untuk orang lain)). -
Rarangken -na berubah menjadi -nana apabila digunakan pada kata dua dan eta (contoh: dua menjadi duanana (kedua-duanya), eta menjadi etanana (menunjukkan itu)).
5. Rarangken tukang -ing/-ning (contoh: bakat menjadi bakating (karena terlalu),kersaning menjadi kersaning (keinginan, kehendak), awah menjadi awahing (karena terlalu)).
11 Rarangken -ing digunakan pada kata yang diakhiri konsonan (contoh: mungguh menjadi munguhing (sesungguhnya), bakat menjadi bakating (karena terlalu) sedangkan rarangken tengah -ning digunakan pada kata yang diakhiri vokal (contoh: estu menjadi estuning (sebenarnya), kersa menjadi kersaning (ketentuan = kehendak)). 2.1.1.4 Rarangken Barung (Imbuhan Terbelah) Rarangken barung adalah imbuhan yang dipakai di awal dan atau di akhir kata dasar secara bersamaan. Ciri utama rarangken barung adalah apabila salah satu imbuhan (awalan atau akhiran) dihilangkan, kata tersebut tidak dapat berdiri sendiri. Rarangken barung pada bahasa Sunda yaitu: ka- -an, kapi-, pa- -an, pang-na pang- -keun, pi- -eun, pika-, pika- -eun, sa- -na, dan sa- -eun. 1. Rarangken barung ka- -an (contoh: kaamanan = keamanan, kaolahan = masakan, kaperluan = keperluan) 2. Rarangken barung kapi- (contoh: kapimilik = milik, kapiraray = selalu terkenang-kenang) 3. Rarangken barung pa- -an (contoh: paguyuban = perkumpulan, pamandian = kolam renang, pausahaan = perusahaan) 4. Rarangken barung pang- -na (contoh: panggeulisna = tercantik, pangagulna = paling sombong, pangpinterna = paling pintar) 5. Rarangken barung pang- -keun (contoh: pangmawakeun = tolong bawakan, pangdongengkeun = tolong ceritakan) 6. Rarangken barung pi- -eun (contoh: pibajueun = bahan baju, pigeuliseun = akan cantik, pigedeeun = akan besar) 7. Rarangken barung pika-
(contoh: pikareueus = membuat bangga,
pikameumeut = selalu rindu) 8. Rarangken barung pika- -eun (contoh: pikabungaheun = membuat gembira, pikasebeleun = menyebalkan, pikanyaaheun = membuat jadi sayang)
12 9. Rarangken barung sa- -na (contoh: salilana = selamanya, sakabehna = semuanya, sawaregna = sekenyangnya) 10. Rarangken barung sa- -eun (contoh: satujueun = setuju, sahadapeun = lebih bawah, samobileun = untuk satu mobil) 2.1.1.5 Rarangken Bareng (Imbuhan Gabungan) Rarangken bareng adalah imbuhan gabungan dari dua atau lebih imbuhan sebelumnya. Rarangken bareng pada bahasa Sunda yaitu: di- + -ar-, di- + -an, di+ -ar- + -an, di- + -keun, di- +-ar- + -keun, di- + -pi, di- + -pika, di- + pang- + keun, di- + pang- + N- + -keun, di- + pang- + N- + -ar- + -keun, di- + pang- + N- + -ar- +-an +-keun, N- + -ar-, N- + -an, N- + -ar- + -keun, N- + -pi-, N- + pika-, N- + pang- + -keun-, pa- + N-, pang- + dipika- + -na, pang- + N- + pika+ -na, ting- + -ar-. 1. Rarangken bareng di- + -ar, contoh: diparacul = dicangkul oleh banyak orang, ditarajong = ditendang oleh banyak orang. 2. Rarangken bareng di- + -an, contoh: dimandian = dimandikan, dibajuan = dipakaikan baju. 3. Rarangken bareng di- + -ar- + -an, contoh: diparaculan = dicangkul (jamak), ditarajongan = ditendang-tendang. 4. Rarangken bareng di- + -keun, contoh: dihurungkeun = dinyalakan, dimakamkeun = dikuburkan. 5. Rarangken bareng di- +-ar- + -keun, contoh: dilalieurkeun = dibuat pusing. 6. Rarangken bareng di- + -pi, contoh dipiwarang =disuruh, dipidamel = dikerjakan, dipirojong = didorong, dipireueus = dikasihani. 7. Rarangken bareng di- + -pika, contoh: dipikaresep = disenangi, dipikasieun = ditakuti, dipikanyaah = disayangi, dipikatineung = teringat selalu. 8. Rarangken bareng di- + pang- + -keun, dipangdamelkeun = dikerjakan oleh orang lain, dipangbenerkeun = dibetulkan oleh orang lain.
13 9. Rarangken bareng di- + pang- + N- + -keun, contoh: dipangmeulikeun = dibelikan oleh orang lain, dipangnuliskeun = dituliskan oleh orang lain. 10. Rarangken bareng di- + pang- + N- + -ar- + -keun, contoh: dipangmaraculkeun = dicangkulkan oleh orang lain. 11. Rarangken bareng di- + pang- + N- + -ar- +-an +-keun, contoh: dipangnaruliskeun = dituliskan oleh orang lain. 12. Rarangken bareng N- + -ar-, contoh: nyarapu = menyapu, narulis = menulis. 13. Rarangken bareng N- + -an, contoh: nyapuan = menyapui, nulisan = menulisi. 14. Rarangken bareng N- + -ar- + -keun, contoh: maraculkeun = dicangkulkan, naruliskeun = dituliskan. 15. Rarangken bareng N- + -pi-, contoh: mieling = diingatkan, miindung = dijadikan ibu. 16. Rarangken bareng N- + -pika-, contoh: mikaeling = saling diingatkan, mikahayang = saling ingin, mikatineung = saling rindu. 17. Rarangken bareng N- + pang- + -keun-, contoh: manghanjakalkeun = menyayangkan. 18. Rarangken bareng pa- + N-, contoh: panumbak = sesuatu buat menombak, panakol = sesuatu untuk memukul. 19. Rarangken bareng pang- + dipika- + -na, contoh: pangdipikanyaahna = yang paling disayang. 20. Rarangken bareng pang- + N- + pika- + -na, contoh: pangmikameumeutna = paling dirindukan. 21. Rarangken bareng ting- + -ar-, contoh: tingkarerut = saling berkerut.
14 2.1.2 Kata Ulang Berbeda dengan bahasa Indonesia, kata ulang dalam bahasa Sunda sangat produktif dan dapat berbeda bentuk dengan kata dasarnya. Bahasa Sunda mempunyai kata ulang yang sangat beragam bentuk. Kata ulang dalam bahasa Sunda adalah kata yang dibangun mengucapkan kata dua kali atau lebih dari kata dasarnya, sebagian atau seluruhnya (Sudaryat et al. 2007). Ilustrasi dari kata ulang dapat dilihat pada Gambar 2.
Gambar 2 Diagram pembentukan kata ulang. Kata ulang dalam bahasa Sunda dapat dibagi menjadi dua yaitu gembleng dan sabagian. Kata ulang juga dapat diberi imbuhan yang dalam bahasa Sunda diberi nama rarangkenan. 2.1.2.1 Gembleng (seluruhnya) Kata ulang gembleng (seluruhnya) dibagi lagi menjadi dua yaitu: 1. Dwilingga: Kata ulang dwilingga dibangun dengan cara mengucapkan dua kali dari kata dasarnya. Terdapat dua dwilingga yaitu: a. Dwimurni: kata dasar yang diulang tidak berubah, contohnya: bapa (bapak) menjadi bapa-bapa (bapak-bapak).
15 b. Dwireka: kata dasar yang diulang berubah bunyi, contohnya: tajong (tendang) menjadi tujang-tajong (tendang-tendang). 2. Trilingga: kata dasar diulang tiga kali, dan selalu berubah bunyi, contohnya: plak-plik-pluk. 2.1.2.2 Sabagian (sebagian) Kata ulang sabagian (sebagian) dibangun dengan cara mengulang kembali salah satu suku kata dasarnya. Ada dua bentuk kata ulang sabagian, yaitu: 1. dwipurwa, yaitu jika suku kata yang diulang adalah suku kata pertama, contohnya: tajong (tendang) menjadi tatajong, 2. dwimadya, yaitu jika suku kata yang diulang ada di tengah kata, contohnya: sabaraha (berapa) menjadi sababaraha. 2.1.2.3 Rarangkenan (kata ulang gabungan) Kata ulang gembleng atau sabagian dapat digabung dengan imbuhan. Gabungan kata ulang dengan imbuhan dapat mempunyai bentuk sebagai berikut: 1. Rarangkenan di-R, suatu kata ulang dalam bentuk dwimurni atau dwireka dan dwipurwa dapat diberi awalan di-. Contoh untuk bentuk ini adalah: rasa menjadi dirasa-rasa, pikir manjadi dipikir-pikir, riung menjadi diriung-riung (dikelilingi oleh banyak orang), dirarasa, dipipikir, diririung. 2. Rarangkenan di-R-keun. Kata ulang dalam bentuk dwimurni, dwireka dan dwipurwa dapat diberi awalan di- dan akhiran -keun, contohnya adalah: asup menjadi diasup-asupkeun (dimasuk-masukkan), tawar menjadi ditatawarkeun (ditawar-tawarkan). 3. Rarangkenan mang-R. Kata ulang dwilingga dapat diberi awalan mang-, dengan contohnya adalah sebagai berikut: kata taun menjadi mangtauntaun (bertahun-tahun), abad menjadi mangabad-abad (berabad-abad).
16 4. Rarangkenan ka-R. Kata ulang dalam bentuk dwilingga (dwireka dan dwimurni) dan dwipurwa dapat diberi awalan ka- dengan contoh sebagai berikut: kata ombak menjadi kaombak-ombak (kena ombak), kata seuit menjadi kaseuit-seuit, kata candak menjadi kacacandak. 5. Rarangkenan N-R. Kata ulang dalam bentuk dwilingga (dwireka dan dwimurni) dapat diberi nasal (N-). Contohnya adalah sebagai berikut: kata tunggu menjadi nunggu-nunggu (menunggu-nunggu), kata beda menjadi ngabeda-beda (membeda-bedakan). 6. Rarangkenan N-R-keun. Kata ulang dwimurni dapat diberi nasal (N-) dan akhiran -keun, contohnya adalah sebagai berikut: kata asup menjadi ngasup-ngasupkeun (memasuk-masukan), kata sorot menjadi nyorotnyorotkeun (menyorot-nyorotkan). 7. Rarangkenan R-eun. Kata ulang dwipurwa dapat mendapat akhiran -eun. Contohnya adalah sebagai berikut: kata lini (gempa) menjadi lilinieun (terasa sepeti gempa), kata jauh menjadi jajauheun (terasa jauh) 8. Rarangkenan R-um. Kata ulang dwilingga juga bisa diberi sisipan -um-, contohnya adalah sebagai berikut: kata tuluy (terus) menjadi tuluy-tumuluy (keterus-terusan) 9. Rarangkenan pa-R. Kata ulang dwilingga dapat diberi awalan pa-, contohnya adalah sebagai berikut: kata tarik menjadi patarik-tarik (saling menarik), palaun-laun (saling lambat-lambat). 10. Rarangkenan ti-R. Kata ulang dengan bentuk dwipurwa dapat diberi awalan ti-, contohnya adalah sebagai berikut: tipoporose, tipaparetot. 11. Rarangkenan R-an. Kata ulang dengan bentuk dwilinga dan dwipurwa dapat diberi akhiran -an, contohnya adalah: kata layar menjadi lalayaran (berlayar-layar), kata indit (pergi) menjadi indit-inditan (pergi-pergian), kata kawih menjadi kakawihan (menyanyikan lagu).
17 12. Rarangkenan R-na. Kata ulang dwilingga dan dwipurwa dapat diberi akhiran -na, contohnya adalah sebagai berikut: kata gede (besar) menjadi gegedena (yang besarnya), dalit (sahabat) menjadi dalit-dalitna (sahabatsahabatnya). 13. Rarangkenan pang-R-na. Kata ulang dwilingga dapat diberi awalan pangdan akhiran -na. Contohnya adalah sebagai berikut: alus (bagus) menjadi pangalus-alusna (yang terbagus), bageur (baik hati ) menjadi pangbageurbageurna (yang terbaik hati). 14. Rarangkenan sa-R-na. Kata ulang dwilingga dapat diberi awalan sa- dan akhiran -na. Contohnya adalah sebagai berikut: hade (bagus) menjadi sahade-hadena (sebagus-bagusnya), bisa menjadi sabisa-bisana (sebisabisanya). 2.2 Stemming Stemming adalah proses penghilangan prefiks, infiks dan sufiks dari suatu kata. Stemming dilakukan atas dasar asumsi bahwa kata-kata yang memiliki stem yang sama memiliki makna yang serupa sehingga pengguna tidak keberatan untuk memperoleh dokumen-dokumen yang di dalamnya terdapat kata-kata dengan stem yang sama dengan query-nya. Proses stemming tersebut dapat diilustrasikan dengan Gambar 3.
Gambar 3 Ilustrasi proses stemming. Teknik-teknik stemming dapat dikategorikan menjadi: - berdasarkan aturan sesuai bahasa tertentu,
18 -
berdasarkan kamus,
-
berdasarkan kemunculan bersama. Stemming dalam sistem temu kembali informasi tergantung pada bahasa
yang digunakan dalam dokumen yang akan dicari. Algoritme stemming untuk bahasa Inggris kurang optimal untuk menangani dokumen dalam bahasa Indonesia. Selain itu bahasa Indonesia pastinya juga memiliki daftar kata buang (stoplist) serta sistem pembentukan kata yang sangat berbeda dengan bahasa Inggris, sehingga diperlukan algoritme stemming yang khusus untuk bahasa Indonesia. Demikian juga untuk bahasa Sunda, juga diperlukan algoritme stemming khusus untuk mencari kata dasar dari suatu kata dalam bahasa Sunda. Terdapat bermacam-macam jenis stemmer, di antaranya adalah: stemmer infleksional yaitu stemmer yang membuang imbuhan (inflection) dari kata dengan menggunakan aturan tata bahasanya. Contoh dari stemmer ini adalah stemmer yang menggunakan algoritme Potter. Algoritme stemmer infleksional dalam bahasa Indonesia salah satunya diteliti oleh Adriani et al. (2007). Jenis stemmer yang lain adalah stemmer corpus-based, yaitu stemmer yang menggunakan koleksi dokumen untuk mendapatkan kata dasar dari sebuah kata. Siregar (1995) dalam penelitiannya menyatakan, untuk mendapatkan kata dasar dari suatu kata berimbuhan, dilakukan proses stemming dan untuk menguji apakah kata hasil stemming tersebut valid maka kata tersebut dibandingkan dengan Kamus Besar bahasa Indonesia. Adriani et al. (2007), meneliti stemmer morfologi untuk bahasa Indonesia dengan mengemukakan algoritme stemming yang juga membandingkan kata yang akan di-stem dengan Kamus Besar bahasa Indonesia. Pada penelitian lainnya, Ichsan (1996) mengemukakan teknik stemmer corpus-based dengan menggunakan statistic co-occurace dari variasi kata untuk mencari keakuratan hasil stemming. Tala (2003) melakukan modifikasi terhadap algoritme Potter untuk stemming bahasa Indonesia. Semua stemmer-stemmer yang diteliti oleh para peneliti di atas menghasilkan kata dasar dengan menghilangkan imbuhan, sisipan dan akhiran dari kata-kata berimbuhan bahasa Indonesia.
19 2.3 Kesalahan Stemming Menurut Paice (1996), terdapat dua jenis kesalahan dalam stemming, yaitu: 1. Understemming, adalah proses stemming yang menghasilkan kata yang tidak terkelompok dalam satu kelompok atau kelas. Hal ini menyebabkan konsep tunggal yang tersebar di beberapa hasil stem yang berbeda. Misalnya terdapat kata-kata sebagai berikut: disanghareupeunana, sanghareupeun, hareup, hareupeun, nyanghareup. Kata yang diharapkan setelah proses stemming adalah hareup, akan tetapi ternyata setelah proses stemming hasilnya adalah sanghareup, hareup dan nyanghareup. 2. Overstemming, adalah proses stemming yang menghasilkan kata namun kata tersebut seharusnya tidak diletakan dalam kelompok atau kelas tertentu. Pada proses stemming ternyata kata tersebut dimasukan dalam kelompok lainnya. Contoh overstemming adalah: kata cina menghasilkan ci, kata tini menghasilkan ti, dan lain-lain. Algoritme stemming yang lebih banyak menghasilkan understemming dibandingkan overstemming dikatagorikan dalam algoritme light stemming, Sedangkan algoritme stemming yang lebih banyak menghasilkan overstemming dibandingkan understemming dikategorikan dalam algoritme heavy stemming.
3. METODOLOGI PENELITIAN 3.1
Kerangka Penelitian Keberhasilan suatu penelitian ditentukan dari perencanaan penelitian.
Dalam perencanaan penelitian tersebut harus jelas apa saja yang akan dilakukan agar penelitian dapat berjalan dengan semestinya. Langkah-langkah penelitian ini secara umum dapat digambarkan seperti yang terlihat pada Gambar 4.
Gambar 4 Langkah-langkah penelitian. 3.2 Prosedur Penelitian Berdasarkan langkah-langkah penelitian pada Gambar 4, tahapan penelitian yang dilakukan pada tiap langkah diuraikan pada pembahasan selanjutnya. 3.2.1 Tahap Pemahaman Masalah Untuk dapat menyelesaikan penelitian ini, masalah yang ada harus dipahami dengan baik. Permasalahan yang ada digali dengan cara studi literatur dari sumber-sumber yang berkaitan dengan permasalahan penelitian ini. Selain itu, permasalahan dalam tentang tata bahasa Sunda dilakukan dengan cara melakukan
22 wawancara dengan nara sumber yang kompeten yaitu Bapak Dr. Yayat Sudaryat, M.Hum. (dosen Sastra Sunda Universitas Pendidikan Indonesia) 3.2.2 Tahap Pengumpulan Dokumen dan Pemasukan Data Kamus Dokumen-dokumen dalam bahasa Sunda digunakan untuk pengujian pada tahap evaluasi stemming. Dokumen uji yang terkumpul adalah sebanyak 130 dokumen berbahasa Sunda dengan topik yang beragam. Topik dokumen berisi tentang sejarah, budaya, agama, berita dan lain-lain. Seluruh dokumen yang terkumpul, format penulisan dokumen kemudian diubah menjadi bentuk teks. Hal ini untuk memudahkan pembacaan dokumen oleh tokenizer. Data kamus diperlukan untuk pembandingan kata pada proses stemming. Untuk memasukan data kamus, sumber data didapat dari Kamus Lengkep SundaIndonesia Indonesia Sunda Sunda-Sunda (Tamsyah 1996) dan dilengkapi dengan kamus Sunda – Indonesia (Satjadibrata 2011). Dari hasil pemasukan data kamus tersebut didapat 8 234 kata. 3.2.3 Tahap Perancangan Tokenizer Tokenizer akan membaca kata per kata dari dokumen. Modul tokenizer akan menerima masukan berupa dokumen dan keluarannya adalah kumpulan kata atau token. Tokenizer akan mengabaikan tanda baca, dan tanda-tanda lainnya yang tidak diperlukan. Tokenizer akan membaca dokumen dalam bentuk teks atau HTML. Program selengkapnya tokenizer dapat dilihat pada Lampiran 1. 3.2.4 Tahap Pembuatan Kata Uji dari Dokumen Pada tahap ini, dokumen yang terkumpul akan dicari token atau kata yang ada dalam dokumen tersebut. Pembuatan kata uji ini akan menggunakan tokenizer yang dirancang pada Bab 3.2.3. Kata atau token yang terkumpul akan disimpan dalam sebuah tabel dalam database yang berisi daftar kemunculan kata dalam dokumen. Kata yang disimpan dalam database adalah kata yang unik, artinya tidak akan ada kata yang sama.
23 Kata uji ini akan digunakan untuk pengujian algoritme stemming yang dirancang. Selanjutnya kata hasil stemming akan dievaluasi apakah hasil stemming sesuai dengan kata yang diharapkan. 3.2.5 Tahap Pembuatan Stoplist Pada tahapan ini akan dibuang semua kata-kata dalam bahasa Sunda yang kurang memiliki arti. Pembuatan daftar stoplist dibuat secara manual. Kata-kata yang kurang berarti yang ditemukan, akan dimasukan dalam database stoplist. Daftar stoplist ini dikelompokan dalam kelompok sepeti terlihat pada Tabel 1. Tabel 1 Daftar stoplist Jenis Kata Kata Tanya Kata Penunjuk Kata Sambung
Kata Lainnya Kata Pangwates Kata Sabab/Slesan Kata Wengkuan Kata Matotoskeun
Contoh saha, naon, mana, naha, iraha, kumaha, sabaraha ieu, eta, dieu, kieu jeung, sareng, nepi, jaba, lian, nu, lamun, tapi, atawa, atanapi, tuluy, terus, teras, yen, majar, nu, anu, matak, majar teh, mah, seug, heug, mun, boa, ketah, ketang, pisan, sok, nu, anu bae, be, wae, we, weh, mung, ngan, ukur, keur, nuju, masih, keneh, pikeun, kanggo da, kapan, kapanan, apan, pan, apanan deui, deuih, ge, oge,ongkoh nya, nyah, enya, lain, sanes
3.2.6 Tahap Perancangan Stemming Proses stemming akan menghilangkan awalan (rarangken hareup), sisipan (rarangken tengah), akhiran (rarangken tukang), kata imbuhan terbelah (rarangken barung), dan kata gabungan (rarangken bareng). Selain itu algoritme stemming juga akan menguji apakah kata adalah kata ulang. Algoritme stemming yang dirancang berbentuk flowchart, seperti yang ada pada Gambar 5. Pada flowchart tersebut terlihat inti dari algoritme tersebut adalah pada proses penghilangan
imbuhan,
yaitu
modul/fungsi:
Hilangkan_Awalan(),
Hilangkan_Akhiran(), Hilangkan_Sisipan(), Hilangkan_Barung(), Hilangkan_ Bareng() dan Cek_Kata_Ulang().
24 Masing-masing modul inti dari stemming tersebut akan dibahas secara rinci pada pembahasan selanjutnya. mulai
Tmpkata=kata
Bandingkan ke kamus ya
Apakah kata ada dalam kamus? Database kamus
tidak Kata=hilangkan_awalan(kata) Bandingkan ke kamus
Apakah kata ada dalam kamus? tidak
Kata=Tmpkata
Kata=Hilangkan_akhiran(kata)
ya
Bandingkan ke kamus ya
Apakah kata ada dalam kamus?
Bandingkan ke kamus
tidak
Kata=hilangkan_sisipan (kata)
Kata=Tmpkata Bandingkan ke kamus ya
Apakah kata ada dalam kamus? Kata=Tmpkata Kata=hilangkan_barung (kata)
tidak Kata=Tmpkata Kata=cek_kata_ulang(kata)
Bandingkan ke kamus
HasilKata=kata
ya
Kata ada dalam kamus?
tidak ya
Apakah kata ada dalam kamus? Kata=hilangkan_bareng (kata) tidak Kata=Tmpkata
ya Selesai
HasilKata=Tmpkata
Apkah kata ada dalam kamus? tidak
Gambar 5 Diagram proses stemming. 3.2.6.1 Modul/fungsi Hilangkan_Awalan() Modul/fungsi Hilangkan_Awalan() membutuhkan sebuah modul/fungsi lain yang berfungsi untuk menguji apakah suatu kata yang akan di-stem memiliki kata awalan: ba-, barang-, di-, ka-, N-, pa,- pada-, pang-, para-, per-, pi- sa-, sang-,
25 si-, silih/sili, ti-, ting-/pating-. Modul/fungsi pengujian ini diberi nama Cek_Prefiks(). Fungsi Cek_Prefiks() ini akan mendapat masukan berupa kata awalan dan kata yang akan diuji. Keluarannya adalah berupa tipe data boolean true/benar atau false/salah. Jika kata yang akan di-stem mengandung awalan yang disebut di atas, maka fungsi Cek_Prefiks() akan bernilai true/benar dan keluaran lainnya adalah, variabel kata akan berisi kata yang sudah dihilangkan awalannya. Sebagai contoh diberikan kata barangbeuli (sesuatu untuk dibeli). Fungsi Cek_Prefiks()
akan
berbentuk Cek_Prefiks(“barang”,kata). Parameter pada fungsi Cek_prefiks() yaitu prefiksword akan berisi “barang” dan kata akan berisi “barangbeuli”. Selanjutnya fungsi Cek_Prefiks(“barang”, kata) akan menguji apakah awalan dari kata tersebut adalah “barang”, jika ya maka akan dihilangkan awalan tersebut sehingga sekarang
variabel
kata
berisi
“beuli”.
Bentuk
modul/fungsi
Cek_Prefiks() ini seperti terlihat pada Gambar 6. Fungsi Cek_Prefiks(prefiksword As String, kata As String) : Boolean n = Length(kata) i = Length(prefiksword) kt = Left(kata, i) //kt = Awalan dari kata If (kt = prfiksword) Then //Dibandingkan antara kt dengan awalan kata= Right(kata, n - i) //Jika benar kata=kata yang sdh // dihilangkan akhirannya Cek_Prefiks = True Else Cek_Prefiks = False End If End Fungsi
Gambar 6 Fungsi Cek_Prefiks(). Algoritme dari modul/fungsi Hilangkan_ Awalan() ini dapat dilihat pada Gambar 7. Pada algoritme tersebut terlihat ada modul/fungsi yang berguna untuk menguji apakah kata mengandung nasal (N-), yaitu ModulNasal_N(). Algoritme untuk ModulNasal_N adalah sebagai berikut: -
Apakah kata mengandung prefiks “nga”, jika ya maka bandingkan dengan kamus jika tidak ketemu maka uji lagi apakah prefiks=”ng”. Bandingkan lagi dengan kamus, jika tidak ketemu maka beri tambahan di awal huruf “k” dan bandingkan lagi dengan kamus.
26
Gambar 7 Fungsi Hilangkan_Awalan(). -
Jika tidak mengandung prefiks “nga”, uji lagi apakah mengandung prefiks “nge”, bandingkan lagi dengan kamus.
-
Jika tidak mengandung “nge” uji apakah huruf awalnya adalah “m”, jika ya maka ganti huruf awal dengan huruf “b” atau “p” masing-masing penggantian huruf hasilnya dibandingkan dengan kamus.
-
Jika tidak mengandung huruf awal “m”, maka uji lagi apakah dua huruf awal = “ny”, jika ya maka ganti huruf awal dengan huruf “c” atau “s” masingmasing penggantian huruf hasilnya dibandingkan dengan kamus.
-
Jika tidak mengandung dua huruf “ny” maka uji apakah huruf awal = “n” jika ya ganti huruf awal dengan “t” dan bandingkan dengan kamus.
Bentuk dari fungsi ModulNasal_N() dapat dilihat pada Lampiran 2.
27 3.2.6.2 Modul/fungsi Hilangkan_Akhiran() Sama
seperti
modul/fungsi
Hilangkan_Awalan(),
modul/fungsi
Hilangkan_Akhiran() juga memerlukan fungsi pembantu lain untuk menguji apakah suatu kata mengandung akhiran. Akhiran yang akan diuji adalah: -an, eun, -keun, -na, -ing/-ning. Modul/fungsi pengujian akhiran ini diberi nama Cek_Sufiks(). Modul ini menerima masukan berupa kata akhiran seperti yang disebut di atas dan kata yang akan dihilangkan akhirannya. Sebagai contoh akan diuji kata acukna (bajunya), yang mempunyai kata dasar acuk (baju) dan diberi akhiran -na. Fungsi Cek_Sufiks()
akan
berbentuk:
Cek_Sufiks(“na”,”acukna”).
Tugasnya
membandingkan apakah ada akhiran -na pada kata “acukna”. Fungsi Cek_Sudiks akan menghasilkan true (benar) jika ada akhiran -na, serta menghilangkan akhiran -na pada kata acukna sehingga didapat kata dasar acuk. Bentuk algoritme Cek_Sufiks() ini adalah seperti terlihat pada Gambar 8. Fungsi Cek_Sufiks(sufiksword As String, kata As String) : Boolean n = Length(kata) i = Length(sufiksword) kt = Right(kata, i) //kt = akhiran dari kata If (kt = sufiksword)Then //Dibandingkan antara kt dengan akhiran kata= Left(kata, n - i) //Jika benar kata=kata yang sdh // dihilangkanakhirannya Cek_Sufiks = True Else Cek_Sufiks = False End If End Fungsi
Gambar 8 Fungsi Cek_Sufiks(). Algoritme Hilangkan_Akhiran() akan menguji satu per satu apakah kata yang mempunyai akhiran seperti dalam daftar akhiran. Jika kata mempunyai akhiran maka akhiran pada kata tersebut akan dihilangkan. Algoritme Hilangkan_Akhiran() selengkapnya dapat dilihat pada Lampiran 2.
28 3.2.6.3 Modul/fungsi Hilangkan_Sisipan() Pada modul/fungsi Hilangkan_Sisipan() ini terdapat aturan-aturan seperti yang dibahas pada Bab 2. Aturan-aturan tersebut diterapkan dalam algoritme seperti pembahasan di bawah ini: 1) Digunakan pada kata dasar yang diawali konsonan “l”, contoh: kata lieur menjadi lalieur (pusing-pusing), leuleus menjadi laleuleus (lemas-lemas). Algoritme untuk aturan tersebut terlihat pada Gambar 9. If Cek_Prefiks("l", kata) Then //Jika huruf pertama adalah huruf //“l” maka 2) If Cek_Prefiks("al",kata) Then //diuji lagi apakah huruf //berikutnya=al gab //jika ya ganti al dengan huruf “l” 3) = "l" + kata If ReadKamus(gab)Then //bandingkan dengan kamus kata = gab 4) infiks = True Else kata = dummy 5) infiks = False End If .... End6)if ... End If
7) Gambar 9 Bagian algoritme Hilangkan_Sisipan() untuk aturan kata yang diawali dengan huruf “l”. Untuk lebih jelasnya diberi contoh sebagai berikut. Misalnya akan diuji untuk kata lalieur. Pengujian Cek_Prefiks("l", kata) akan memberikan hasil true dan kata berubah menjadi “alieur”. Pengujian berikutnya yaitu Cek_Prefiks("al", kata) maka akan memberikan nilai true juga dan kata akan menjadi “ieur”. Perintah gab = "l" + kata akan menambahkan huruf “l” pada kata “ieur” sehingga didapat kata “lieur” yang selanjutnya akan dibandingkan dengan kamus. 2) Digunakan pada kata dasar yang diakhiri konsonan “r” contoh: bageur menjadi balageur (banyak yang baik hati), pinter menjadi palinter (banyak yang pintar). Algoritme untuk aturan ini terlihat seperti pada Gambar 10.
29
If Cek_Sufiks("r", kata)Then //Apakah huruf terkahir adalah “r” kata = dummy //kata dikembalikan ke bentuk semula If InStr(kata, "al") Then //uji apakah kata mengandung “al” kata = Replace(kata, "al", "") //hilangkan “al” dalam kata If ReadKamus(kata) Then //Bandingkan dengan kamus infiks = True Else kata = dummy infiks = False End If End If ..... End if
Gambar 10 Bagian algoritme Hilangkan_Sisipan() untuk aturan kata yang diawali dengan huruf “r”. Pada modul ini terdapat sebuah variabel yang disebut dummy, yang fungsinya untuk mencatat kata sebelum diubah bentuknya. Variebel dummy ini berfungsi untuk mengembali kata menjadi bentuk semula jika diperlukan. Kata yang diberikan akan diuji apakah mempunyai huruf akhir “r” jika ya maka kata=dummy dan diuji lagi apakah kata mengandung suku kata “al”. Jika ya maka hilangkan suku kata “al” dan cari kata dalam kamus. Jika kata tidak ditemukan dalam kamus maka variabel infiks akan bernilai false dan variabel kata dikembalikan menjadi bentuk semula. 3) Digunakan pada kata dasar yang mengandung konsonan gabung br, tr, cr, kr, pr, jr, dan dr, contoh: kempreng menjadi kalempreng (tangan-tangan yang kaku), gombrang menjadi galombrang (pakaian yang kedodoran). Algoritme untuk aturan ini terlihat seperti pada Gambar 11.
If infiks_ar("tr br cr kr pr jr dr", kata) Then gab = Replace(kata, "al", "") kata = gab 4) infiks = True .... End if 5)
Gambar 11 Bagian algoritme Hilangkan_Sisipan() untuk aturan kata yang mengandung suku kata "tr”, “br”, “ cr”, “kr”, “ pr”, “ jr”, “dr”.
30 Kata yang diberikan, akan diuji apakah mengandung gabungan huruf "tr”, “br”, “ cr”, “kr”, “ pr”, “ jr”, “dr” Jika ya maka hilangkan suku kata “al” dari kata yang diberikan. 4) Rarangken tengah -ar- berubah menjadi ar- apabila digunakan pada kata dasar yang diawali huruf vokal, contoh: asup menjadi arasup (banyak yang masuk), ulin menjadi arulin (banyak yang main). Selain itu juga untuk mengatasi rarangken tengah “-ar-” yang berada di tengah seperti misalnya barudak (anak-anak), diperlukan fungsi pembantu untuk menguji apakah suatu kata mengandung suku kata “ar”. Fungsi tersebut memiliki bentuk seperti yang ditunjukkan pada Gambar 12. Fungsi in_str_ar(kata) : Boolean ar1 = Left(kata, 2) ar2 = Mid(kata, 2, 2) If ar1 = "ar" Or ar2 = "ar" Then in_str_ar = True Else in_str_ar = False End If End Fungsi
Gambar 12 Fungsi in_str_ar(). Sedangkan penggalan algoritme untuk mengatasi rarangken tengah “ar” ini adalah seperti yang terlihat pada Gambar 13. If in_str_ar(kata) Then kata = dummy kata = Replace(kata, "ar", "") If ReadKamus(kata) Then Hilangkan_Sisipan = True Else ..... Endif .... End if
Gambar 13 Bagian algoritme Hilangkan_Sisipan() untuk aturan kata yang mengandung suku kata “ar”. 5) Rarangken tengah -ar- berubah menjadi ra- apabila digunakan pada kata dasar yang hanya terdiri dari satu suku kata dan diawali huruf konsonan contoh: cleng menjadi racleng (berloncatan), beng menjadi rabeng
31 (berterbangan). Algoritme untuk aturan tersebut terlihat seperti pada Gambar 14. If Cek_Prefiks("ra", kata) Then kata = Replace(kata, "ra", "") If ReadKamus(kata) Then infiks = True Else infiks = False kata = dummy End If .... End if
Gambar 14 Bagian algoritme Hilangkan_Sisipan() untuk aturan kata yang mengandung suku kata “ra”. 6) Rarangken tengah -in-, contoh: tulis menjadi tinulis (tertulis/ditulis), panggih menjadi pinanggih
(bertemu),
sareng
menjadi
sinareng
(bersama).
Rarangken tengah -in- ini juga memerika fungsi pembantu yang berfungsi untuk menguji apakah sutu kata mengandung suku kata “in”. Fungsi tersebut memiliki bentuk seperti terlihat pada Gambar 15. Fungsi infiks_in(kata As String) : Boolean in1 = Mid(kata, 2, 2) //ambil huruf kedua kata sebanyak 2 //huruf If in1 = "in" Then infiks_in = True Else infiks_in = False End If End Fungsi
Gambar 15 Fungsi infiks_in(). Penggalan algoritme untuk mencari apakah kata mengandung suku kata “in” adalah seperti terlihat pada Gambar 16. If infiks_in(kata) Then kata = Replace(kata, "in", "") If ReadKamus(kata) Then Hilangkan_Sisipan = True Else Hilangkan_Sisipan = False kata = dummy End If End if
Gambar 16 Bagian algoritme Hilangkan_Sisipan() untuk aturan kata yang mengandung suku kata “in”.
32 Rarangken tengah -um-, contoh: sujud menjadi sumujud (bersujud), gantung menjadi gumantung (tergantung), lengis menjadi lumengis (memelas-melas) Pada Rarangken tengah -um- terdapat alomorf um-, yang terjadi apabila digunakan pada kata dasar yang diawali huruf vokal, contoh: amis menjadi umamis (macammacam manis), aing menjadi umaing (egois). Untuk mengatasi rarangken tengah “-um-“ ini juga diperlukan fungsi pembantu yang bertugas untuk menguji apakah kata mengandung suku kata “um” baik di awal kata maupun di tengah kata. Bentuk dari fungsi tersebut seperti terlihat pada Gambar 17. Sedangkan penggalan algoritme untuk rarangken tengah “-um-” seperti yang ditunjukkan pada Gambar 18. Algoritme selengkapnya untuk modul/fungsi Hilangkan_Sisipan() dapat dilihat pada Lampiran 2. Fungsi In_Str_Um(kata As String) As Boolean um1 = Left(kata, 2) um2 = Mid(kata, 2, 2) If um1 = "um" Or um2 = "um" Then In_Str_Um = True Else In_Str_Um = False End If End Fungsi
Gambar 17 Fungsi in_str_um().
If In_Str_Um(kata) <> 0 Then kata = Replace(kata, "um", "") If ReadKamus(kata) Then Hilangkan_Sisipan = True Else Hilangkan_Sisipan = False kata = dummy End If Else ..... Endif
Gambar 18 Bagian algoritme Hilangkan_Sisipan() untuk aturan kata yang mengandung suku kata “um”.
33 3.2.6.4 Modul/fungsi Hilangkan_Barung() Pada modul/fungsi Hilangkan_Barung() ini juga harus memenuhi aturanaturan seperti yang dibahas pada Bab 2. Misalnya untuk aturan yang berakhiran “eun”, ternyata akhiran “-eun” ini mempunyai banyak aturan pada awalannya, contohnya: Rarangken barung sa- -eun (contoh: satujueun = setuju, sahandapeun = lebih bawah, samobileun = untuk satu mobil), Rarangken barung pika- -eun (contoh: pikabungaheun = membuat gembira, pikasebeleun = menyebalkan, pikanyaaheun = membuat jadi sayang),
Rarangken barung pi- -eun (contoh:
pibajueun = bahan baju, pigeuliseun = akan cantik, pigedeeun = akan besar) Algoritme untuk rarangken barung yang memiliki pola seperti di atas, mula-mula akan diuji apakah akhiran dari kata yang diberikan adalah “eun”. Jika ya, maka selanjutnya diuji satu per satu apakah kata memiliki awalan pi-, pika- atau sa-. Sehingga algoritme dengan pola seperti ini adalah penggalan algoritme yang terlihat seperti pada Gambar 19. Algoritme selengkapnya untuk modul/fungsi Hilangkan_Barung() ini dapat dilihat pada Lampiran 2. If (Cek_Sufiks("eun", kata)) Then If Cek_Prefiks("pika", kata) Then 'jika barung = pika- -eun Hilangkan_Barung = True Else If Cek_Prefiks("pi", kata) Then 'jika barung = pi- -eun Hilangkan_Barung = True Else If Cek_Prefiks("sa", kata) Then 'jika barung = sa- -eun Hilangkan_Barung = True Else If Cek_Sufiks("an", kata) Then Hilangkan_Barung = True Else Hilangkan_Barung = False End If End If End If End If End if
Gambar 19 Bagian algoritme Hilangkan_Barung().
34 3.2.6.5 Modul/fungsi Hilangkan_Bareng() Sama seperti modul/fungsi Hilangkan_Barung(), modul ini juga harus mengikuti aturan seperti yang dibahas pada Bab 2. Rarangken bareng memiliki bentuk seperti ini: di- + -ar-, di- + -an, di- + -ar- + -an, di- + -keun, di- +-ar- + keun, di- + -pi, di- + -pika, di- + pang- + -keun, di- + pang- + N- + -keun, di- + pang- + N- + -ar- + -keun, di- + pang- + N- + -ar- +-an +-keun, N- + -ar-, N- + -an, N- + -ar- + -keun, N- + -pi-, N- + -pika-, N- + pang- + -keun-, pa- + N-, pang- + dipika- + -na, pang- + N- + pika- + -na, ting- + -arPembuatan algoritme untuk modul/fungsi Hilangkan_Bareng() ini mengikuti pola seperti yang sudah di bahas pada Sub Bab 3.2.6.4. Salah satu contoh adalah untuk kata yang mempunyai pola, awalan “pang”, bisa mendapatkan gabungan pang- + kata + -na, pangdipika + kata, pang- + kata, pang- N- pika- + kata + -na. Penggalan algoritme untuk pola seperti itu terlihat pada
Gambar
20.
Algoritme
selengkapnya
untuk
Hilangkan_Bareng() dapat dilihat pada Lampiran 2.
If Cek_Prefiks("pang", kata) Then If Cek_Sufiks("na", kata) Then dummy = kata If Cek_Prefiks("dipika", kata) Then Hilangkan_Bareng = True Else If modulNasal_N(kata) Then If Cek_Prefiks("pika", kata) Then Hilangkan_Bareng = True Else Hilangkan_Bareng = False End If End If End If Else If Cek_Sufiks("an", kata) Then Hilangkan_Bareng = True Else Hilangkan_Bareng = False End if End If Else ..... End if
Gambar 20. Bagian algoritme Hilangkan_Bareng().
modul/fungsi
35 3.2.6.5 Modul/fungsi Cek_Kata_Ulang() Pada modul/fungsi kata ulang, akan memisahkan dua hal, yaitu kata ulang yang berbentuk gembleng (seluruhnya) dan kata ulang yang berbentuk sabagian (sebagian). Kata ulang gembleng (seluruhnya) memiliki ciri setiap kata yang diulang dipisahkan dengan tanda “-“. Jika kata berbentuk gembleng (seluruhnya) maka kata yang diambil adalah kata terakhir setelah tanda “-“, setelah itu dicoba untuk menghilangkan imbuhan dari kata tersebut. Untuk kata ulang yang berbentuk sabagian (sebagian), kata ulang yang diberikan akan dihilangkan dahulu imbuhannya baru setelah itu dihilangkan unsur kata ulangnya. Bentuk dari algoritme untuk kata ulang ini dapat dilihat pada Lampiran 2. 3.2.7 Tahap Evaluasi Stemming Pada proses evaluasi stemming ini akan coba dibandingkan antara daftar kata yang muncul dalam dokumen dan daftar kata yang sudah dilakukan proses stemming. Pada tahap ini akan dilihat apakah kata yang ada dalam daftar kata yang muncul dalam dokumen sudah terstemming seperti yang diharapkan. Proses evaluasi dilakukan dengan mengamati secara manual. 3.2.8 Tahap Penulisan Tesis Setelah semua tahapan di atas selesai dilakukan, tahapan berikutnya adalah penulisan dokumen tesis. Penulisan dokumen tesis ini ditulis berdasarkan hasil yang sudah diuji coba dan penulisannya mengikuti standar yang sudah diberikan oleh Institut Pertanian Bogor. 3.2.9 Tahap Pembuatan Kesimpulan Tahapan terakhir adalah tahapan pembuatan kesimpulan. Tahapan ini akan coba disimpulkan bagaimana hasil dari penelitian ini. Dari penelitian ini juga akan ditulis saran-saran untuk penelitian ke depan.
4. HASIL PENELITIAN DAN PEMBAHASAN
4.1.
Hasil Penelitian Algoritme stemming yang dirancang akan diuji dengan kumpulan token/kata
yang berasal dari daftar kemunculan kata dalam dokumen. Selanjutnya kumpulan token/kata tersebut di-stem, dan hasilnya akan dilihat apakah menghasilkan kata sesuai dengan harapan. Dari 130 dokumen uji, didapat 100 824 kata. Kata-kata tersebut belum unik, sehingga perlu diproses lebih lanjut untuk mendapatkan satu kata unik dari sejumlah kata yang memiliki bentuk yang sama. Setelah kata yang sama dihilangkan didapat kata unik sebesar 16 949 kata. Dari jumlah kata tersebut setelah dilakukan proses stemming dihasilkan 11 515 kata. Dari 16 949 kata, setelah dipelajari ternyata banyak kata yang bukan berasal dari bahasa Sunda. Terdapat kata-kata dalam bahasa Arab, bahasa Jawa, bahasa Indonesia dan bahasa Inggris. Ada juga bahasa Indonesia yang disundakan, misalnya dimanfaatkeun (seharusnya dimangpaatkeun); panolong, ngarakit, usulanana, mertahankeun (bahasa Indonesia yang diberi imbuhan bahasa Sunda); juga nama-nama, baik nama orang, nama tempat, nama sungai dan lain-lain. Selain itu, banyak juga singkatan-singkatan serta penulisan-penulisan yang salah ketik. Tentu saja kata-kata di atas jika dilakukan proses stemming dengan algoritme stemming bahasa Sunda hasilnya tidak akan pernah sesuai dengan yang diharapkan. Untuk melihat apakah stemming bekerja sesuai dengan yang diharapkan, kata-kata tersebut dihilangkan dan hasilnya didapat 10 416 kata. Dari jumlah kata tersebut setelah di-stem didapat hasil 5 136 kata. Dalam pengujian terhadap semua kata bahasa Sunda (10 416 kata), algoritme stemming yang dirancang menghasilkan pengurangan ukuran indeks sebesar dari 10 416 kata menjadi 5 136 kata. Dalam hal ini terjadi ppengurangan file indeks sebesar: 5 136/10 416 x 100% = 49.31%. Sedangkan dari jumlah kata hasil stemming (5 136 kata), kata-kata yang didapat dan sesuai dengan harapan
38 berjumlah 4 693 kata dan sisanya 443 adalah kata-kata yang tidak sesuai dengan harapan. Dari data ini dapat dihitung bahwa akurasi stemming hasil kata yang diharapkan adalah sebesar: (4 693/5 136) x 100% = 91.38% Proses pengujian algorime stemming dan hasilnya, diilustrasikan seperti yang terlihat pada Gambar 21.
Gambar 21 Proses percobaan stemming terhadap dokumen uji. Evaluasi terhadap pengujian ini dilakukan secara manual, dengan melihat satu per satu kata hasil stemming. Dari hasil pengujian stemming sebelum penghilangan kata-kata yang bukan dalam bahasa Sunda (16 946 kata), ditemukan kata-kata yang overstemming namun tidak ada satupun kata-kata yang understemming. Selain itu, didapat juga hasil stemming yang tidak sesuai dengan harapan. Berikut ini adalah pembahasan hasil pengujian yang overstemming, dan kata-kata hasil stemming yang tidak sesuai dengan harapan. 4.1.1. Hasil Kata yang Overstemming Beberapa kata yang diuji ternyata didapat overstemming terhadap kata yang di-stem. Kata yang di-stem terlalu banyak pemotongannya, sehingga terdapat kata baru yang tidak sesuai dengan harapan. Kata-kata tersebut di antaranya adalah:
39 -
“cari-cari”, “cina”, didapat kata “ci”.
-
“siti”, “nian”, “tini”, didapat kata “ti”.
-
“diari”, didapat kata “ari.
-
“pamar”, “dibabarkeun”, didapat kata “bar”.
-
“tikang”, “bakang”, didapat kata “kang”.
-
“simana”, didapat kata “sim”.
-
“maran”, “paman”, “perman”, “minan” didapat kata “man”.
-
“kuning”, “tiku” didapat kata “ku”.
-
“pama” di dapat kata “ba”
-
“perda”, “dana”, “dakeunana” di dapat kata “da”.
-
“diracik” didapat kata “cik”.
-
“dipilah”, “silah” didapat kata “lah”.
-
“pekan”,” peking” didapat kata “pek”.
4.1.2. Hasil Kata yang Tidak Sesuai Harapan Pengujian terhadap dokumen ini juga menghasilkan kata yang tidak sesuai dengan harapan. Kata-kata tersebut adalah: -
“mentang-mentang”, hasil proses stemming adalah “bentang”.
-
“made”, hasil hasil proses stemming adalah “bade”.
-
“masa”, hasil hasil proses stemming adalah “basa”
-
Bentuk imbuhan gabungan (rarangken bareng) “N- + -ar-“ pada kata “nyarapu”, “marere”, dan “malayar”, menghasilkan kata “nyarapu”, “marere”, “balayar”.
40 -
Kata “sababaraha” tidak menghasilkan hasil stemming yang diharapkan yaitu “sabaraha”.
4.2. Analisis Terhadap Pengujian Stemming Setelah dilakukan pengujian terhadap kata uji ternyata ada beberapa kata yang tidak memberikan hasil sesuai dengan yang diharapkan. Berikut ini adalah analisis terhadap kegagalan hasil proses stemming. 4.2.1. Analisis Terhadap Kata yang Overstemming Kata “cari-cari” dan “cina” didapat kata “ci”. Pada saat membaca kata ulang “cari-cari”, yang diambil adalah kata paling akhir setelah karakter “-“, didapat kata “cari”. Kata “cari” bukan kata dalam bahasa Sunda, maka pada saat dicari dalam kamus tidak ditemukan. Proses berikutnya adalah penghilangan imbuhan. Kata “cari” menghasilkan kata “ci”, disebabkan karena modul/fungsi Hilangkan_Sisipan(), akan menghilangkan suku kata “ar” dalam kata “cari”, sehingga didapat kata “ci”. Dan jika kata “ci” ini dicari dalam kamus maka akan kata tersebut ada dalam kamus. Untuk kata “cina”, modul/fungsi Hilangkan_Sisipan() juga akan dihilangkan suku kata “in”, sehingga didapat kata “ci”. Kata “siti”, “nian”, “tini”, didapat kata “ti”. Kata “siti” karena merupakan nama seseorang maka ketika dicari dalam kamus bahasa Sunda tidak ditemukan, sehingga proses berikutnya yang dijalankan adalah penghilangkan awalan. Kata “siti” dianggap mempunyai awalan “si”, sehingga oleh modul/fungsi Hilangkan_Awalan() suku kata “si” ini akan dihilangkan dan didapat kata “ti”. Kata “nian” juga bukan merupakan kata dalam bahasa Sunda, sehingga pada saat dicari dalam kamus pertama kali tidak ditemukan. Selanjutnya modul/fungsi Hilangkan_Bareng() akan menghilangkan suku kata “an” dan mengganti huruf “n” menjadi “t” karena dianggap sebagai bentuk kata nasal, sehingga didapat kata “ti”. Kata “tini” yang merupakan nama orang, dianggap
41 mempunyai suku kata “in”, sehingga suku kata tersebut akan dihilangkan dan didapat kata “ti”. Kata “diari”, didapat kata “ari” Kata “ari” dalam bahasa Sunda mempunyai arti sedangkan, kalau atau jika. Kata “diari” yang bukan merupakan kata dalam bahasa Sunda ketika dicari dalam kamus tidak ditemukan. Proses berikutnya pada algoritme stemming adalah penghilangan awalan oleh modul/fungsi Hilangkan_Awalan(). Suku kata “di” pada kata “diari” dianggap merupakan awalan, sehingga akan dihilangkan oleh modul/fungsi tersebut, dan didapat kata “ari”. Kata “pamar”, “dibabarkeun”, didapat kata “bar”. Kata “bar” dalam bahasa Sunda mempunya arti yaitu: kata antar untuk menghamparkan (tikar, karpet, dan lain-lain). Pada saat algoritme stemming bekerja
untuk
kata
“pamar”,
maka
fungsi
Hilangkan_Bareng()
akan
menghilangkan suku kata “pa” dan didapat kata “mar”. Kata “mar” ini dianggap bentuk kata nasal sehingga huruf “m” pada kata tersebut diganti dengan huruf “b”, dan didapat kata “bar”. Untuk kata “dibabarkeun”, akan dianggap sebagai kata ulang dan modul/fungsi Cek_Kata_Ulang() akan menghilangkan awalan dan akhiran “di- + -keun” maka didapat kata “babar”. Karena dianggap kata ulang maka suku kata “ba” akan dihilangkan dari kata tersebut dan didapat kata “bar”. Kata “tikang”, “bakang”, didapat kata “kang” Kata “kang” dalam bahasa Sunda mempunyai arti panggilan untuk lelaki yang lebih tua atau kakak. Pada saat mencari kata “tikang” dan “bakang” dalam kamus kata tersebut ditemukan. Kedua kata tersebut dianggap mempunyai awalan “ti”
dan
“ba”,
sehingga
akan
dihilangkan
Hilangkan_Awalan() dan didapat kata “kang”.
oleh
modul/fungsi
42 Kata “simana”, didapat kata “sim” Kata “sim” dalam bahasa Sunda mempunyai arti saya. Sedangkan kata “simana” merupakan kata “sima” dan diberi akhiran “na”. Pada saat algoritme stemming bekerja, kata “simana” ini diangap mempunyai akhiran “ana”, sehingga akan dipotong menjadi “sim”. Kata “maran”, “perman”, “minan” didapat kata “man” Kata “man” mempunyai arti sebagai kata antar untuk menyuruh berjalan terlebih dahulu. Kata “maran” dan “minan” dianggap mempunyai sisipan “ar” dan “in” sehingga oleh modul/fungsi Hilangkan_Sisipan() kedua suku kata tersebut akan dihilangkan dan didapat kata “man”. Sedangkan untuk kata “perman” dianggap mempunyai awalan “per” dan akan dihilangkan oleh modul/fungsi Hilangkan_Awalan(). Kata “kuning”, “tiku” didapat kata “ku” Kata “ku” mempunyai arti alangkah atau jangankan. Kata “kuning” dianggap mempunyai akhiran “ning” sehingga akhiran tersebut dihilangkan oleh modul/fungsi Hilangkan_Akhiran() sehingga didapat kata “ku”. Sedangkan kata “tiku” dianggap mempunyai awalan “ti” dan oleh modul Hilangkan_Awalan() sehingga didapat kata “ku”. Kata “pama” di dapat kata “ba” Kata “ba” merupakan salah satu bentuk awalan yang berarti “ber”. Kata “pama” setelah
di-stem berubah menjadi kata “ba” disebabkan oleh
modul/fungsi Hilangkan_Bareng() menganggap kata tersebut memiliki bentuk paN-. Modul Hilangkan_Bareng() akan menghilangkan awalan pa- dan huruf “m” pada suku kata “ma” diganti menjadi “b” oleh modul ModulNasal_N() karena dianggap memiliki bentuk nasal. Kata tersebut setelang di-stem didapat kata “ba”. Kata “perda”, “dana”, “dakeunana” di dapat kata “da” Kata “da” memiliki arti “karena”. Kata “perda” dan “dana” yang merupakan kata dalam bahasa Indonesia dianggap memiliki awalan “per” pada
43 kata “perda” dan akhiran “na” pada kata “dana”. Pada proses stemming kata “perda” akan dihilangkan awalan “per”-nya oleh modul Hilangkan_Awalan(), sedangkan kata “dana” akan dihilangkan akhiran “na”-nya oleh modul Hilangkan_Awalan(). Kata “diracik” didapat kata “cik”, “dipilah”, “silah” didapat kata “lah” dan “pekan”,” peking” didapat kata “pek” Kata “diracik” dianggap memiliki bentuk rarangken bareng di- -arsehingga oleh modul Hilangkan_Bareng() dihilangkan awalan “di” dan sisipan “ar” sehingga didapat kata “cik”. Sedangkan untuk kata “dipilah” dan “silah” masing-masing
dianggap
memiliki
bentuk
rarangken
bareng
“di-pi-” dan awalan “si” sehingga bentuk “di-pi-“ dan awalan “si” dihilangkan pada kedua kata tersebut dan didapat kata “lah”. Untuk kata “pekan” dan “peking” keduanya dianggap memiliki bentuk akhiran “an” dan “ing” sehingga oleh modul Hilangkan_Akhiran() kedua akhiran tersebut dihilangkan dan didapat kata “pek”. 4.2.2. Analisis terhadap kata hasil stemming yang tidak sesuai harapan Kata “mentang-mentang”, “made” dan “masa” bukan merupakan kata dalam bahasa Sunda, sehingga ketika dicari dalam kamus, kata tersebut tidak ditemukan. Kata “mentang-mentang” dianggap sebagai kata ulang dan diambil hanya kata terakhir setelah kata “-“ dan didapat kata “mentang”. Kata tersebut dianggap sebagai bentuk nasal sehingga huruf “m” akan diganti oleh huruf “b” sehingga didapat kata “bentang” (bintang). Demikian juga untuk kata “made” dan “masa”, dianggap sebagai bentuk nasal dan hasil stemmingnya adalah “bade” (akan) dan “basa” (bahasa). Hasil stemming yang diharapkan untuk kata nyarapu, marere, malayar adalah kata sapu, bere dan bayar. Namun algoritme stemming yang dirancang tidak dapat menghasilkan kata yang diharapkan. Kesalahannya terletak pada modul/fungsi Hilangkan_Bareng(), yaitu pada penggalan program seperti yang terlihat pada Gambar 22.
44 If Hilangkan_Sisipan(kata) Then If modulNasal_N(kata) Then Hilangkan_Bareng = True Else Hilangkan_Bareng = False End If Else ....... End if
Gambar 22 Bagian algoritme Hilangkan_Sisipan() yang menghasilkan kata yang tidak diharapkan. Pada penggalan program tersebut, baris perintah If Hilangkan_Sisipan(kata) Then diharapkan menghilangkan sisipan dari kata tersebut, akan tetapi karena isi program dari Hilangkan_Sisipan(kata) yang menangani masalah sisipan “ar” ini berbentuk seperti Gambar 23 maka fungsi Hilangkan_Sisipan() menghasilkan hasil kata “nyapu”. If In_Str_Ar(kata, "ar") Then kata = dummy kata = Replace(kata, "ar", "", 1, 1, vbTextCompare) If ReadKamus(kata) Then Hilangkan_Sisipan = True Else ...... End if ...... End if
Gambar 23 Bagian algoritme Hilangkan_Sisipan() yang menguji sisipan “ar”. Proses berikutnya adalah pencarian kata tersebut dalam kamus dan ternyata hasilnya tidak ditemukan. Proses berikutnya dari Hilangkan_Bareng() yaitu proses penghilangan nasal (modulNasal_N(kata)) tidak pernah diproses. Hal inilah yang menyebabkan algoritme stemming ini tidak mampu menghasilkan kata dasar yang diharapkan. Untuk kata uji “malayar” pada saat pengujian menghasilkan kata dasar “balayar”, kata tersebut ada dalam kamus. Namun sebenarnya kata dasar yang diharapkan dari hasil stemming kata “malayar” bukan kata tersebut, kata yang diharapkan adalah kata “bayar”. Hal ini dsebabkan karena kata “malayar” dianggap sebagai nasal yang diproses pada saat menjalankan modul/fungsi Hilangkan_Awalan(). Dan kata hasil stemming setelah dicari dalam kamus
45 ternyata menemukan hasil “balayar”. Potensi kesalahan yang sama akan muncul jika kata yang di-stem mempunyai bentuk N- + -ar,. Algoritme stemming untuk kata ulang dwipurwa adalah dengan mengambil suku kata pertama lalu dibandingkan dengan suku kata berikutnya. Untuk kata sababaraha adalah kata ulang yang mempunyai aturan jika kata dasar memiliki tiga suku kata atau lebih maka yang diulang adalah suku kata kedua. Hasil stemming yang diharapkan dari kata sababaraha adalah sabaraha (berapa). Kegagalan stemming untuk kata sababaraha adalah sulitnya menentukan jumlah suku kata dari kata yang akan di-stem. Agoritme yang diracang belum mampu untuk menangani masalah tersebut. Hasil kata lainnya yang tidak sesuai dengan harapan, yang berjumlah 443 kata disebabkan oleh ketidaksempurnaan algoritme dan disebabkan pula ketidaklengkapan data kamus. Untuk penelitian berikutnya diharapkan dapat lebih menyempurnakan algoritme yang dirancang ini serta melengkapi data kamus.
5. KESIMPULAN DAN SARAN
5.1
Kesimpulan Berdasarkan hasil pengujian dan pembahasan yang telah dilakukan dapat
ditarik kesimpulan sebagai berikut: 1. Algoritme stemming yang dirancang mampu memberikan hasil kata yang diharapkan sebesar 91.38% dan mengurangi jumlah kata pada indeks sebesar 49.31%. 2. Algoritme stemming yang dirancang mempunyai bentuk heavy stemming. Hal ini disebabkan oleh hasil kesalahan stemming seluruhnya menghasilkan kata yang overstemming dan tidak ada yang understemming. 3. Algoritme stemming yang dirancang sebagian besar memberikan hasil yang cukup baik, meskipun masih ada beberapa kata yang overstemming. Selain itu ada beberapa kata hasil stemming tidak menghasilkan kata seperti yang diharapkan. Potensi kegagalan masih dapat terjadi jika kata yang akan di-stem memiliki pola yang sama dengan kata yang gagal di-stem. 4. Kegagalan dari proses stemming untuk menghasilkan kata dasar yang diharapkan disebabkan ada beberapa ketidaksempurnaan pada algoritme dan belum lengkapnya data kamus.
5.2
Saran Berikut ini adalah saran-saran untuk penelitian lebih lanjut:
1. Kurang sempurnanya algoritme dapat diperbaiki pada penelitian berikutnya. Selain itu, algoritme stemming yang diteliti masih belum mampu mengatasi bentuk kata yang mengalami morfofonemis, yaitu kata yang memiliki bentuk rarangken barung ka- -an yang merupakan kata dasar awal atau akhir adalah huruf vokal, yang lalu mengalami perubahan bentuk. Contoh untuk kata mofofonemis adalah kabudayaan menjadi kabudayan, kabupatian manjadi
48 kabupaten, kaanoman menjadi kanoman, karatuan menjadi karaton, kadatuan menjadi kadaton dan lain-lain. Algoritme stemming yang diteliti juga belum mampu mengatasi permasalahan gabungan kata. Contohnya “sateuacana”, yang terdiri dari kata “teu” dan “acan” yang mendapat imbuhan “sa-“ dan akhiran “-na”. Penelitian berikutnya diharapkan mampu mengatasi masalah-masalah tersebut. 2. Implementasi dari algoritme ini bisa dikembangkan untuk membuat mesin pencari (search engine) untuk dokumen berbahasa Sunda. Selain itu juga dapat dikembangkan untuk pembuatan aplikasi translator dokumen dari bahasa Indonesia ke bahasa Sunda.
DAFTAR PUSTAKA Media Indonesia. 2009. Sekitar 2.500 Bahasa terancam punah. http://www.mediaindonesia.com/read/2009/02/02/61657/92/14/Sekitar_2.500_ Bahasa_Terancam_Punah [20 Februari 2009]. Adriani M, Asian J, Nazief B, Tahaghoghi S, William H. 2007. Stemming Indonesian: confix-stripping approach. ACM Transactions on Asian Language Information Processing 6(4) Article 13. Asian J, Williams, Tahaghoghi S. 2005. Stemming Indonesian. Conferences in Research and Practice in Information Technology 38:1. Ichsan M. 1996. Pemotongan imbuhan berdasarkan korpus untuk kata berbahasa Indonesia [skripsi]. Depok: Fakultas Ilmu Komputer. Universitas Indonesia. Paice C. 1996. Method for evaluation of stemming algorithms based on error counting. Journal of The American Society for Information Science 47(8): 835836. Satjadibrata. 2011. Kamus Sunda Indonesia. Bandung: PT Kiblat Buku Utama. Siregar, E. 1995. Pencarian kata berimbuhan pada kamus besar bahasa Indonesia dengan menggunakan algoritma stemming [skripsi]. Depok: Fakultas Ilmu Komputer, Universitas Indonesia. Sudaryat Y, Prawirasumantri A, Yudibrata K. 2007. Tata basa Sunda kiwari. Bandung:Yrama Widya. Tala F. 2003. A Study of stemming effects on information retrieval in bahasa Indonesia [tesis]. Amsterdam: Master of Logic Project Institute for Logic, Language and Computation Universiteit van Amsterdam. Tamsyah B. 1996. Kamus lengkep Sunda – Indonesia, Indonesia – Sunda, Sunda – Sunda. Bandung: CV. Pustaka Setia. Zaenal A, Junaiyah H. 2007. Morfologi bentuk, makna dan fungsi. Jakarta: PT Grasindo.
LAMPIRAN
53 Lampiran 1 Modul Tokenizer Public
Sub ParsingFile(namafile As String)
1. Dim counter As Long 2. Open namafile For Input As #1 3. P_Word = "" 4. counter = 0 5. Do Until EOF(1) 6. ParsingChar 7. DoEvents 8. counter = counter + 1 9. Loop 10.Close #1 11.P_Word = Potong(P_Word) 12.Call SimpanToken2Array(namafile) End Sub ‘ParsingFile Public Sub ParsingChar() 1. 'Baca sebuah karakter dari file 2. P_Character = Input$(1, #1) 3. 'cek apakah karakter yg didapat masuk dalam tag atau bukan 4. If InsideHTML = True Then 5. TestEndTag 6. Else 7. estStartTag 8. End If End Sub ‘ParsingChar Public Sub TestEndTag() 1. BuildSlidingWord 2. If P_Character = ">" Then 3. InsideHTML = False 4. P_Character = Chr(32) 5. End If End Sub ‘TestEndTag Public Sub TestStartTag() 1. If P_Character = "<" Then 2. P_Character = Chr(32) 3. InsideHTML = True 4. Else 5. TestTheCharacter 6. End If End Sub ‘TestStartTag Public Sub TestTheCharacter() 1. 'Menangkap karakter dari a-z dan A-Z dan menyimpannya dalam variabel P_Word 2. If (P_Character >= Chr(65) And P_Character <= Chr(90)) Or (P_Character >= Chr(97) And 3. P_Character <= Chr(122)) Then 4. P_Character = P_Character 'LCase(P_Character) 5. ElseIf P_Character = Chr(34) And InsideALT = True Then
54 Lanjutan 6. InsideALT = False 7. P_Character = Chr(32) 8. Else 9. P_Character = Chr(32) 10. End If 11. P_Word = LTrim(P_Word & P_Character) End Sub Public Function Potong(TheString As String) As String 1. Dim Temp As String, DoubleSpaces As String 2. DoubleSpaces = Chr(32) & Chr(32) 3. Temp = Trim(TheString) 4. Do Until InStr(Temp, DoubleSpaces) = 0 5. Temp = Replace(Temp, DoubleSpaces, Chr(32)) 6. Loop 7. Potong = Temp End Function
55 Lampiran 2 Modul Stemming Public 1. 2. 3.
Function ReadKamus(kata As String) As Boolean Dim rs3 As New ADODB.Recordset Dim arti As String strKoneksi = "Provider=MSDASQL.1;Persist Security Info=False;User ID=root;Data Source=kamus_sunda" 4. db.Open strKoneksi 5. rs3.Open "select * from artikata where Sunda = '" + kata + "'", db, adOpenDynamic, adLockOptimistic 6. If Not rs3.EOF Then 7. ReadKamus = True 8. arti = rs3.Fields("indo") 9. Else 10. ReadKamus = False 11. End If 12. rs3.Close 13. db.Close End Function ‘ReadKamus Private Function Cek_Sufiks(sufiksword As String, result As String) As Boolean 1. Dim n As Integer 2. Dim i As Integer 3. Dim kt As String 4. n = Len(result) 5. i = Len(sufiksword) 6. kt = Right(result, i) 7. If (kt = sufiksword) Then 8. result = Left(result, n - i) 9. Cek_Sufiks = True 10. Else 11. Cek_Sufiks = False 12. End If End Function ‘Cek_Sufiks
Private Function Cek_Prefiks(prefiksword As String, result As String) As Boolean 1. Dim n As Integer 2. Dim i As Integer 3. Dim kt As String 4. n = Len(result) 5. i = Len(prefiksword) 6. kt = Left(result, i) 7. If (kt = prefiksword) Then 8. result = Right(result, n - i) 9. Cek_Prefiks = True 10. Else 11. Cek_Prefiks = False 12. End If End Function ‘Cek_Prefiks Private Function ModulNasal_N(kata As String) As Boolean 1. Dim hasil, tmpkata As String 2. Dim ketemu As Boolean 3. Dim charlist() As String 4. Dim i As Integer 5. Dim cek As Boolean 6. Dim kata1 As String
56 Lanjutan 7. ketemu = False 8. hasil = kata 9. tmpkata = kata 10. If (Cek_Prefiks("nga", kata)) Then 11. If ReadKamus(kata) Then 12. ketemu = True 13. tmpkata = kata 14. Else 15. kata = tmpkata 16. If (Cek_Prefiks("ng", kata)) Then 17. If ReadKamus(kata) Then 18. ketemu = True 19. tmpkata = kata 20. Else 21. If Cek_Sufiks("keun", kata) Then 22. If ReadKamus(kata) Then 23. ketemu = True 24. tmpkata = kata 25. Else 26. kata = "k" + kata 27. If ReadKamus(kata) Then 28. ketemu = True 29. tmpkata = kata 30. Else 31. ketemu = False 32. End If 33. End If 34. Else 35. If ReadKamus(kata) Then 36. ketemu = True 37. tmpkata = kata 38. Else 39. kata = "k" + kata 40. If ReadKamus(kata) Then 41. ketemu = True 42. tmpkata = kata 43. Else 44. ketemu = False 45. End If 46. End If 47. End If 48. End If 49. End If 50. End If 51. Else 52. kata = hasil 53. If (Cek_Prefiks("nge", kata)) Then 54. If ReadKamus(kata) Then 55. ketemu = True 56. tmpkata = kata 57. Else 58. kata = hasil 59. If Cek_Prefiks("ng", kata) Then 60. If ReadKamus(kata) Then 61. ketemu = True 62. tmpkata = kata 63. Else
57 Lanjutan 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.
kata1 = kata kata = "k" + kata If ReadKamus(kata) Then ketemu = True tmpkata = kata Else ketemu = False End If End If End If End If Else If (Cek_Prefiks("m", kata)) Then ReDim charlist(2) As String charlist(1) = "b" charlist(2) = "p" For i = 1 To UBound(charlist) tmpkata = charlist(i) + kata If ReadKamus(tmpkata) Then ketemu = True Exit For End If Next i Else If (Cek_Prefiks("ny", kata)) Then ReDim charlist(2) As String charlist(1) = "c" charlist(2) = "s" For i = 1 To UBound(charlist) tmpkata = charlist(i) + kata If ReadKamus(tmpkata) Then ketemu = True Exit For End If Next i Else If (Cek_Prefiks("ng", kata)) Then kata1 = kata kata = "k" + kata If ReadKamus(kata) Then ketemu = True tmpkata = kata Else kata = kata1 If ReadKamus(kata) Then ketemu = True tmpkata = kata Else ketemu = False End If End If Else If (Cek_Prefiks("n", kata)) Then tmpkata = "t" + kata If ReadKamus(tmpkata) Then ketemu = True Else ketemu = False Else
58 Lanjutan 120. End If 121. End If 122. End If 123. End If 124. End If 125. End If 126. If ketemu Then 127. kata = tmpkata 128. Else 129. kata = hasil 130. End If 131. modulNasal_N = ketemu End Function ‘ModulNasal_N Private Function infiks_ar(Arr As String, kata As String) As Boolean 1. Dim g() As String 2. Dim i As Integer 3. Dim temu As Boolean 4. g = Split(Arr) 5. temu = False 6. For i = 0 To UBound(g) - 1 7. If InStr(kata, g(i)) Then 8. temu = True 9. Exit For 10. End If 11. Next i 12. infiks_ar = temu End Function ‘infiks_ar Private Function infiks_ra(Arr As String, kata As String) As Boolean 1. Dim g() As String 2. Dim i As Integer 3. Dim temu As Boolean 4. g = Split(Arr) 5. temu = False 6. For i = 0 To UBound(g) - 1 7. If Cek_Prefiks(g(i), kata) Then 8. temu = True 9. Exit For 10. End If 11. Next i 12. infiks_ra = temu End Function ‘infiks_ra Private Function infiks_in(kata As String) As Boolean 1. Dim in1 As String 2. in1 = Mid(kata, 2, 2) '//ambil huruf kedua kata sebanyak 2 huruf 3. If in1 = "in" Then 4. infiks_in = True 5. Else 6. infiks_in = False 7. End If End Function ‘infiks_in
59 Lanjutan Private Function in_str_ar(kata) As Boolean 1. Dim ar1 As String 2. Dim ar2 As String 3. ar1 = Left(kata, 2) 4. ar2 = Mid(kata, 2, 2) 5. If ar1 = "ar" Or ar2 = "ar" Then 6. in_str_ar = True 7. Else 8. in_str_ar = False 9. End If End Function ‘in_str_ar Private Function In_Str_Um(kata As String) As Boolean 1. Dim um1 As String 2. Dim um2 As String 3. um1 = Left(kata, 2) 4. um2 = Mid(kata, 2, 2) 5. If um1 = "um" Or um2 = "um" Then 6. In_Str_Um = True 7. Else 8. In_Str_Um = False 9. End If End Function ‘In_Str_Um Private 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.
Function Hilangkan_Sisipan(kata As String) As Boolean Dim dummy As String Dim gab As String dummy = kata If Cek_Prefiks("l", kata) Then If Cek_Prefiks("al", kata) Then gab = "l" + kata If ReadKamus(gab) Then kata = gab Hilangkan_Sisipan = True Else kata = dummy Hilangkan_Sisipan = False End If Else kata = dummy kata = Replace(kata, "um", "") If ReadKamus(kata) Then Hilangkan_Sisipan = True Else Hilangkan_Sisipan = False End If End If Else If Cek_Sufiks("r", kata) Then kata = dummy If InStr(kata, "al") Then kata = Replace(kata, "al", "") If ReadKamus(kata) Then Hilangkan_Sisipan = True Else kata = dummy Hilangkan_Sisipan = False
60 Lanjutan 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.
End If End If Else If infiks_ar("tr br cr kr pr jr dr", kata) Then gab = Replace(kata, "al", "") kata = gab If ReadKamus(kata) Then Hilangkan_Sisipan = True Else Hilangkan_Sisipan = False End If Else If in_str_ar(kata) Then kata = dummy kata = Replace(kata, "ar", "", 1, 1,) If ReadKamus(kata) Then Hilangkan_Sisipan = True Else kata = dummy kata = Replace(kata, "um", "") If ReadKamus(kata) Then Hilangkan_Sisipan = True Else Hilangkan_Sisipan = False End If End If Else If infiks_in(kata) Then kata = Replace(kata, "in", "") If ReadKamus(kata) Then Hilangkan_Sisipan = True Else Hilangkan_Sisipan = False kata = dummy End If Else If In_Str_Um(kata) <> 0 Then kata = Replace(kata, "um", "") If ReadKamus(kata) Then Hilangkan_Sisipan = True Else Hilangkan_Sisipan = False kata = dummy End If Else If Cek_Prefiks("ra", kata) Then kata = Replace(kata, "ra", "") If ReadKamus(kata) Then Hilangkan_Sisipan = True Else Hilangkan_Sisipan = False kata = dummy End If Else If InStr(kata, "ar") Then kata = Replace(kata, "ra", "") If ReadKamus(kata) Then
61 Lanjutan 91. Hilangkan_Sisipan = True 92. Else 93. Hilangkan_Sisipan = False 94. kata = dummy 95. End If 96. End If 97. End If 98. End If 99. End If 100. End If 101. End If 102. End If 103. End If End Function ‘Hilangkan_Sisipan Private Function infiks_ndb(kata As String) As Boolean 1. Dim dummy As String 2. Dim gab As String 3. infiks_ndb = True 4. If Cek_Prefiks("l", kata) Then 5. If Cek_Prefiks("al", kata) Then 6. kata = "l" + kata 7. Else 8. kata = Replace(kata, "um", "") 9. End If 10. Else 11. If Cek_Sufiks("r", kata) Then 12. kata = dummy 13. If InStr(kata, "al") Then 14. kata = Replace(kata, "al", "") 15. Else 16. infiks_ndb = False 17. End If 18. Else 19. If infiks_ar("tr br cr kr pr jr dr", kata) Then 20. gab = Replace(kata, "al", "") 21. kata = gab 22. Else 23. If InStr(kata, "ar") Then 24. kata = Replace(kata, "ar", "", 1, 1) 25. Else 26. If infiks_in(kata) Then 27. kata = Replace(kata, "in", "") 28. Else 29. If InStr(kata, "um") <> 0 Then 30. kata = Replace(kata, "um", "") 31. Else 32. If Cek_Prefiks("ra", kata) Then 33. kata = Replace(kata, "ra", "") 34. Else 35. infiks_ndb = False 36. End If 37. End If 38. End If 39. End If 40. End If 41. End If
62 Lanjutan 42. End If End Function ‘infiks_ndb Private 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.
Function Hilangkan_Akhiran(kata As String) As Boolean Dim dummy As String Dim akhiran() As String Dim i As Integer Dim ketemu As Boolean 'deklarasi variabel akhiran bertipe array dan berisi akhiran-akhiran dummy = kata If Not Cek_Sufiks("na", kata) Then akhiran = Split("an keun eun na ning ing") i = 0 ketemu = False While i <= UBound(akhiran) And Not ketemu 'looping sampai jumlah akhiran tercapai If (Cek_Sufiks(akhiran(i), kata)) Then If akhiran(i) = "ning" Then If ReadKamus(kata) Then ketemu = True Else kata = dummy End If Else ketemu = True End If End If i = i + 1 Wend Hilangkan_Akhiran = ketemu Else 'Hilangkan_Akhiran -na perlu perlakukan khusus If Not ReadKamus(kata) Then kata = dummy If Cek_Sufiks("ana", kata) Then 'Jika Hilangkan_Akhiran= 'ana If Not ReadKamus(kata) Then If (Cek_Sufiks("keun", kata)) Then If Not ReadKamus(kata) Then Hilangkan_Akhiran = False Else If (Cek_Sufiks("eun", kata)) Then If Not ReadKamus(kata) Then Hilangkan_Akhiran = False Else Hilangkan_Akhiran = True End if Else dummy = kata If (Cek_Sufiks("an", kata)) Then If Not ReadKamus(kata) Then kata = dummy If (Cek_Sufiks("n", kata)) Then If ReadKamus(kata) Then Hilangkan_Akhiran = True Else
63 Lanjutan 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65.
Hilangkan_Akhiran = False End if Else Hilangkan_Akhiran = False End If Else Hilangkan_Akhiran = True End If End If End If End If Else Hilangkan_Akhiran = True End If Else If (Cek_Sufiks("na", kata)) Then 'Jika Hilangkan_Akhiran= 'ana 66. If ReadKamus(kata) Then 67. Hilangkan_Akhiran = True 68. Else 69. If (Cek_Sufiks("na", kata)) Then 'Jika Hilangkan_Akhiran= 'ana 70. Hilangkan_Akhiran = True 71. Else 72. Hilangkan_Akhiran = False 73. End If 74. End If 75. End If 76. End If 77. Else 78. Hilangkan_Akhiran = True 79. End If 80. End If End Function ‘Hilangkan_Akhiran Private 1. 2. 3. 4. 5. 6. 7.
8. 9. 10. 11. 12. 13. 14. 15. 16. 17.
Function Hilangkan_Awalan(kata As String) As Boolean Dim awalan() As String Dim dummy As String Dim i As Integer Dim ketemu As Boolean 'deklarasi variabel akhiran bertipe array dan berisi akhiran2 dummy = kata awalan = Split("barang mang pating pada para pang per pilih sang silih sili ting ti si ba pili pi pa di ka sa mi") i = 0 ketemu = False While i <= UBound(awalan) And Not ketemu 'looping sampai jumlah akhiran tercapai If (Cek_Prefiks(awalan(i), kata)) Then If awalan(i) = "pada" Then If ReadKamus(kata) Then ketemu = True Else kata = dummy End If
64 Lanjutan 18. Else 19. If awalan(i) = "mi" Then 20. If ReadKamus(kata) Then 21. ketemu = True 22. Else 23. kata = dummy 24. End If 25. Else 26. If awalan(i) = "mang" Then 27. If ReadKamus(kata) Then 28. ketemu = True 29. Else 30. kata = dummy 31. End If 32. Else 33. ketemu = True 34. End If 35. End If 36. End If 37. End If 38. i = i + 1 39. Wend 40. If ketemu Then 41. Hilangkan_Awalan = ketemu 42. Else 43. If modulNasal_N(kata) Then 44. Hilangkan_Awalan = True 45. Else 46. Hilangkan_Awalan = False 47. End If 48. End If End Function ‘Hilangkan_Awalan Private Function Hilangkan_Barung(kata As String) As Boolean 1. If (Cek_Sufiks("keun", kata)) Then 'jika barung= pang- keun 2. If Cek_Prefiks("pang", kata) Then 3. Hilangkan_Barung = True 4. If modulNasal_N(kata) Then 5. Hilangkan_Barung = True 6. End If 7. Else 8. Hilangkan_Barung = False 9. End If 10. Else 11. If (Cek_Sufiks("eun", kata)) Then 12. If Cek_Prefiks("pika", kata) Then 'jika barung = pika- -eun 13. Hilangkan_Barung = True 14. Else 15. If Cek_Prefiks("pi", kata) Then 'jika barung = pi- -eun 16. Hilangkan_Barung = True 17. Else 18. If Cek_Prefiks("sa", kata) Then 'jika barung = sa- -eun 19. Hilangkan_Barung = True
65 Lanjutan 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31.
Else If Cek_Sufiks("an", kata) Then Hilangkan_Barung = True Else Hilangkan_Barung = False End If End If End If End If Else If (Cek_Sufiks("an", kata)) Then If Cek_Prefiks("kapi", kata) Then 'jika barung = ka-pi- -an 32. Hilangkan_Barung = True 33. Else 34. If Cek_Prefiks("ka", kata) Then 'jika barung = ka- -an 35. Hilangkan_Barung = True 36. Else 37. If Cek_Prefiks("pa", kata) Then 'jika barung = pa- -an 38. Hilangkan_Barung = True 39. If modulNasal_N(kata) Then Hilangkan_Barung = True 40. Else 41. If Cek_Prefiks("pi", kata) Then 42. Hilangkan_Barung = True 43. Else 44. If modulNasal_N(kata) Then 45. Hilangkan_Barung = True 46. Else 47. Hilangkan_Barung = False 48. End if 49. End If 50. End If 51. End If 52. End If 53. Else 54. If (Cek_Sufiks("na", kata)) Then 55. If Cek_Prefiks("pang", kata) Then 'jika barung = pang- -na 56. Hilangkan_Barung = True 57. Else 58. If Cek_Prefiks("sa",kata) Then Hilangkan_Barung=True 59. Else 60. Hilangkan_Barung = False 61. End If 62. End If 63. Else 64. If Cek_Prefiks("pika", kata) Then Hilangkan_Barung = True 65. End If 66. End If 67. End If 68. End If End Function ‘Hilangkan_Barung
66 Lanjutan Private Function Hilangkan_Bareng(kata As String) As Boolean 1. Dim dummy As String 2. Dim dummy1 As String 3. Dim temu As Boolean 4. dummy = kata 5. If (Cek_Prefiks("di", kata)) Then 6. dummy = kata 7. If Hilangkan_Sisipan(kata) Then 8. Hilangkan_Bareng = True 9. Else 10. dummy = kata 11. If Cek_Sufiks("an", kata) Then 12. If ReadKamus(kata) Then 13. Hilangkan_Bareng = True 14. Else 15. If Hilangkan_Sisipan(kata) Then 16. If ReadKamus(kata) Then Hilangkan_Bareng = True Else Hilangkan_Bareng=False 17. End If 18. End If 19. Else 20. If Cek_Sufiks("keun", kata) Then 21. dummy = kata 22. If ReadKamus(kata) Then 23. Hilangkan_Bareng = True 24. Else 25. If Hilangkan_Sisipan(kata) Then 26. If ReadKamus(kata) Then Hilangkan_Bareng=True Else Hilangkan_Bareng=False 27. Else 28. kata = dummy 29. If Cek_Prefiks("pang", kata) Then 30. dummy = kata 31. If ReadKamus(kata) Then 32. Hilangkan_Bareng = True 33. Else 34. If Cek_Sufiks("an", kata) Then 35. If modulNasal_N(kata) Then 36. Hilangkan_Bareng = True 37. Else 38. If infiks_ndb(kata) Then 39. Hilangkan_Bareng = True 40. If modulNasal_N(kata) Then Hilangkan_Bareng=True 41. Else 42. Hilangkan_Bareng = False 43. kata = dummy 44. End If 45. End If 46. Else 47. If modulNasal_N(kata) Then 48. Hilangkan_Bareng = True 49. Else 50. If infiks_ndb(kata) Then 51. Hilangkan_Bareng = True 52. Else 53. Hilangkan_Bareng = False
67 Lanjutan 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.
kata = dummy End If End If End If End If Else End If End If End If Else If Cek_Prefiks("pang", kata) Then If modulNasal_N(kata) Then Hilangkan_Bareng = True Else If Hilangkan_Sisipan(kata) Then Hilangkan_Bareng = True Else Hilangkan_Bareng = False kata = dummy End If End If Else If Cek_Prefiks("pika", kata) Then Hilangkan_Bareng = True Else If Cek_Prefiks("pi", kata) Then Hilangkan_Bareng = True Else If Hilangkan_Sisipan(kata) Then Hilangkan_Bareng = True Else dummy1 = kata If Cek_Sufiks("ana", kata) Then If ReadKamus(kata) Then Hilangkan_Bareng = True Else kata = dummy1 If Cek_Sufiks("na", kata) Then If ReadKamus(kata) Then Hilangkan_Bareng = True Else Hilangkan_Bareng = False End If End If End If Else If Cek_Sufiks("eun", kata) Then Hilangkan_Bareng = True Else If Cek_Sufiks("na", kata) Then Hilangkan_Bareng = True Else Hilangkan_Bareng = False End If End If End If End If
68 Lanjutan 111. End If 112. End If 113. End If 114. End If 115. End If 116. End If 117. Else 118. kata = dummy 119. If Cek_Prefiks("pang", kata) Then 120. If Cek_Sufiks("na", kata) Then 121. dummy = kata 122. If Cek_Prefiks("dipika", kata) Then 123. Hilangkan_Bareng = True 124. Else 125. If modulNasal_N(kata) Then 126. If Cek_Prefiks("pika", kata) Then 127. Hilangkan_Bareng = True 128. Else 129. Hilangkan_Bareng = False 130. End If 131. End If 132. End If 133. Else 134. If Cek_Sufiks("an",kata)Then Hilangkan_Bareng=True Else Hilangkan_Bareng=False 135. End If 136. Else 137. kata = dummy 138. If Cek_Prefiks("ting", kata) Then 139. If Hilangkan_Sisipan(kata) Then Hilangkan_Bareng=True Else Hilangkan_Bareng=False 140. Else 141. If modulNasal_N(kata) Then 142. dummy = kata 143. If Cek_Sufiks("keun", kata) Then 144. If ReadKamus(kata) Then 145. Hilangkan_Bareng = True 146. Else 147. If Hilangkan_Sisipan(kata) Then 148. Hilangkan_Bareng = True 149. Else 150. If Cek_Prefiks("pang",kata) Then Hilangkan_Bareng=True Else Hilangkan_Bareng=False 151. End If 152. End If 153. Else 154. kata = dummy 155. If Cek_Sufiks("an", kata) Then 156. If ReadKamus(kata) Then 157. Hilangkan_Bareng = True 158. Else 159. If Hilangkan_Sisipan(kata) Then Hilangkan_Bareng=True Else Hilangkan_Bareng=False 160. End If 161. Else 162. dummy = kata 163. If Cek_Prefiks("pika", kata) Then
69 Lanjutan 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.
Hilangkan_Bareng = True Else If Cek_Prefiks("pi", kata) Then Hilangkan_Bareng = True Else Hilangkan_Bareng = False End If End If End If End If Else If Cek_Sufiks("ana", kata) Then If Cek_Sufiks("keun", kata) Then Hilangkan_Bareng = True If modulNasal_N(kata) Then Hilangkan_Bareng = True Else If Cek_Sufiks("an", kata) Then Hilangkan_Bareng = True If Cek_Prefiks("ka", kata) Then Hilangkan_Bareng = True Else If modulNasal_N(kata) Then Hilangkan_Bareng = True Else Hilangkan_Bareng = False End If End If Else If Cek_Sufiks("eun", kata) Then Hilangkan_Bareng = True Else If modulNasal_N(kata) Then Hilangkan_Bareng = True Else kata = dummy If Cek_Sufiks("na", kata) Then If modulNasal_N(kata) Then Hilangkan_Bareng=True Else Hilangkan_Bareng = False End If End If End If End If End If Else If Cek_Sufiks("keun", kata) Then temu = False temu = Hilangkan_Sisipan(kata) 'infiks_ndb(kata) If temu Then If modulNasal_N(kata) Then Hilangkan_Bareng = True Else Hilangkan_Bareng = False End If Else If Cek_Prefiks("mang", kata) Then
70 Lanjutan 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.
Hilangkan_Bareng = True Else If Cek_Prefiks("nga", kata) Then Hilangkan_Bareng = True Else If modulNasal_N(kata) Then Hilangkan_Bareng = True Else kata = dummy If Cek_Sufiks("eun", kata) Then If modulNasal_N(kata) Then Hilangkan_Bareng = True Else Hilangkan_Bareng = False End If End If End If End If End If End If Else If Hilangkan_Sisipan(kata) Then If modulNasal_N(kata) Then Hilangkan_Bareng = True Else Hilangkan_Bareng = False End If Else If Cek_Sufiks("eun", kata) Then Hilangkan_Bareng = True If Cek_Sufiks("an", kata) Then Hilangkan_Bareng=True If Cek_Prefiks("ka",kata) Then Hilangkan_Bareng=True Else If Cek_Prefiks("pa", kata) Then If Cek_Prefiks("da", kata) Then If modulNasal_N(kata)Then Hilangkan_Bareng=True Else Hilangkan_Bareng=False Else If Cek_Sufiks("na",kata) Then Hilangkan_Bareng=True If modulNasal_N(kata) Then Hilangkan_Bareng=True End If Else If Cek_Prefiks("mika", kata) Then Hilangkan_Bareng = True Else If Cek_Prefiks("mi", kata) Then Hilangkan_Bareng = True If Cek_Sufiks("an", kata) Then Hilangkan_Bareng = True Else If Cek_Prefiks("nga", kata) Then If Cek_Sufiks("an", kata) Then Hilangkan_Bareng = True
71 Lanjutan 271. 272. 273. 274. 275. 276. 277.
Else If Cek_Sufiks("keun",kata) Then Hilangkan_Bareng = True Else If Cek_Sufiks("na",kata) Then Hilangkan_Bareng = True If Cek_Prefiks("pa",kata) Then Hilangkan_Bareng=True 278. Else 279. Hilangkan_Bareng = False 280. End If 281. End If 282. End If 283. Else 284. If Cek_Sufiks("na", kata) Then 285. Hilangkan_Bareng = True 286. If Cek_Prefiks("ka",kata) Then 287. Hilangkan_Bareng = True 288. Else 289. If Cek_Prefiks("pi", kata) Then Hilangkan_Bareng=True 290. If modulNasal_N(kata) Then Hilangkan_Bareng=True 291. End If 292. Else 293. If Cek_Sufiks("an", kata) Then 294. Hilangkan_Bareng = True 295. If modulNasal_N(kata) Then Hilangkan_Bareng = True 296. Else 297. Hilangkan_Bareng = False 298. End If 299. End If 300. End If 301. End If 302. End If 303. End If 304. End If 305. End If 306. End If 307. End If 308. End If 309. End If 310. End If 311. End If End Function Private Function cek_kt_ulang(kata) As Boolean 1. Dim kata1 As String 2. Dim kata2 As String 3. Dim kata3 As String 4. Dim dummy As String 5. Dim dummy1 As String 6. Dim ketemu As Boolean 7. dummy = kata 8. If InStr(kata, "-") Then 9. kata2 = Trim(Right(kata, Len(kata) - InStr(kata, "-")))
72 Lanjutan 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.
If InStr(kata2,"-") Then kata2=Trim(Right(kata2,Len(kata2)-InStr(kata2,"-"))) If ReadKamus(kata2) Then cek_kt_ulang = True kata = kata2 Exit Function End If If Hilangkan_Bareng(kata2) Then cek_kt_ulang = True Else cek_kt_ulang = False End If Exit Function Else kata2 = kata If Cek_Sufiks("na", kata2) Then ketemu = True If Cek_Prefiks("pa", kata2) Then ketemu = True Else If Cek_Sufiks("an", kata2) Then ketemu = True Else If modulNasal_N(kata2) Then ketemu = True Else If Cek_Prefiks("ti", kata2) Then ketemu = True Else If Cek_Prefiks("ka", kata2) Then ketemu = True Else If Cek_Prefiks("di", kata2) Then If Cek_Sufiks("keun", kata2) Then ketemu = True ketemu = True Else If Cek_Prefiks("pa", kata2) Then ketemu = True Else If Cek_Sufiks("eun", kata2) Then ketemu = True Else If Cek_Prefiks("di", kata2) Then ketemu = True Else If Cek_Prefiks("nga", kata2) Then ketemu = True Else ketemu = False End If End If End If End If End If End If End If End If End If
73 Lanjutan 66. End If 67. dummy1 = kata2 68. kata1 = Left(kata2, 2) 69. If Not Len(kata2) > 1 Then 70. cek_kt_ulang = False 71. kata = dummy 72. Exit Function 73. End If 74. dummy = Mid(kata2, 3, Len(kata2) - 2) 75. kata3 = Left(dummy, 2) 76. If kata1 = kata3 Then 77. If ReadKamus(dummy) Then 78. cek_kt_ulang = True 79. kata = dummy 80. Else 81. cek_kt_ulang = False 82. End If 83. Else 84. dummy = Mid(kata2, 4, Len(kata2) - 2) 85. kata3 = Left(dummy, 3) 86. kata1 = Left(kata2, 3) 87. If kata1 = kata3 Then 88. If ReadKamus(dummy) Then 89. cek_kt_ulang = True 90. kata = dummy 91. Else 92. cek_kt_ulang = False 93. kata = dummy 94. End If 95. End If 96. End If 97. End If End Function Public Function stemKata(kata As String) As String 1. Dim hasil, pos As String 2. Dim tmpkata As String 3. Dim dumy As Boolean 4. tmpkata = kata 5. If (Not ReadKamus(kata)) Then 'kata tidak ada dalam kamus? 6. 'Hilangkan akhiran 7. If Hilangkan_Akhiran(kata) Then 8. If ReadKamus(kata) Then 9. stemKata = kata 10. Exit Function 11. End If 12. End If 13. kata = tmpkata 14. If Hilangkan_Awalan(kata) Then 15. If ReadKamus(kata) Then 16. stemKata = kata 17. Exit Function 18. Else 19. kata = tmpkata 20. End If 21. Else
74 Lanjutan 22. kata = tmpkata 23. dumy = modulNasal_N(kata) 'Jika prefiks adalah nasal 24. If dumy Then 25. If ReadKamus(kata) Then 26. stemKata = kata 27. Exit Function 28. End If 29. Else 30. End If 31. End If 32. kata = tmpkata 33. If Hilangkan_Sisipan(kata) Then 34. If ReadKamus(kata) Then 35. stemKata = kata 36. Exit Function 37. End If 38. End If 39. kata = tmpkata 40. If cek_kt_ulang(kata) Then 41. If ReadKamus(kata) Then 42. stemKata = kata 43. Exit Function 44. End If 45. End If 46. kata = tmpkata 47. If Hilangkan_Barung(kata) Then 48. If ReadKamus(kata) Then 49. stemKata = kata 50. Exit Function 51. End If 52. End If 53. kata = tmpkata 54. If Hilangkan_Bareng(kata) Then 55. If ReadKamus(kata) Then 56. stemKata = kata 57. Exit Function 58. Else 59. kata = tmpkata 60. End If 61. Else 62. kata = tmpkata 63. End If 64. stemKata = kata 65. Else 66. stemKata = kata 67. End If End Function ‘stemKata