Skip to content

Instantly share code, notes, and snippets.

@geovedi
Last active November 29, 2023 06:07
Show Gist options
  • Star 3 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save geovedi/b70176b39972d6e856c4 to your computer and use it in GitHub Desktop.
Save geovedi/b70176b39972d6e856c4 to your computer and use it in GitHub Desktop.
Catatan pengembangan pemeriksa ejaan bahasa Indonesia

Isu Seputar Pemeriksa Ejaan

Tugas pemeriksaan ejaan adalah untuk mengetahui kata-kata yang salah eja dalam teks, dan juga untuk memberikan daftar pengganti dieja dengan benar.

Sebuah fasilitas pemeriksaan ejaan dapat menjadi aplikasi yang berdiri sendiri, atau terintegrasi dengan aplikasi lain pengolahan teks.

Mencari Kecocokan dalam Kosakata

Kosakata biasanya berupa kamus. Kamus yang memungkinkan untuk digunakan dapat berupa kamus statik (dengan kosakata yang tetap) dan kamus dinamik (memungkinkan melakukan operasi mikro seperti menyisipkan atau menghapus elemen dari sebuah kata).

Struktur data yang sepertinya cocok untuk penggunaan ini adalah balanced binary tree, B-tree, Hash table and bloom filter.

Untuk kamus statis diperlukan metode pencarian yang efisien, daftar kata yang diurutkan menggunakan pencarian biner dapat menjadi alternatif yang baik untuk kemudahan pemrograman.

Sejumlah pemeriksa ejaan ada yang sama sekali tidak menggunakan kamus. Biasanya bergantung pada metode ekstraksi kata dari corpus yang sangat besar dan melakukan pemetaan kata (biasanya berupa trigram, 3 kata yang tersusun berurutan). Beberapa kelemahan dari metode ini adalah tidak dilakukannya pemberian label sebagai anomali dan adanya kesalahan ejaan pada corpus.

Mengusulkan Alternatif Kata

Untuk pengguna yang tidak pandai mengeja kata, fitur tambahan menyarankan kata alternatif yang benar sangatlah membantu. Pertanyaannya adalah bagaimana membangun suatu daftar alternatif kata-kata yang mirip satu sama lain dalam morfologi atau pengucapan.

Secara Morfologis

Umum ditemukan bahwa kesalahan ejaan terjadi karena substitusi/penyisipan/penghapusan 1 huruf dan transposisi dari 2 huruf yang berdekatan. Jadi dengan membalik karakter dalam kata yang salah eja dan mencari kata pada kamus, kita dapat menemukan alternatif kata yang benar.

Secara Fonetik

Sangat mungkin untuk menyusun kata yang memiliki kesamaan pengucapan (soundex code). Kemudian kata salah eja diubah menjadi kode soundex, dan kata-kata dengan fitur fonetik serupa diekstrak. Kata-kata serupa pengucapannya dapat ditemukan menggunakan algoritma kesamaan string (seperti algoritma Levenshtein) dan algoritma pencocokan fonetik (seperti algoritma soundex atau algoritma metaphone). Dan ketika memberikan alternatif, algoritma Levenshtein distance dapat digunakan untuk mengurutkan kata-kata alternatif.

Menurut Konteks

Masalah dalam penggunaan sehari-hari pemeriksa kata yang menggunakan dua metode di atas adalah ketika kata yang ditemukan terdapat dalam kamus dan benar menurut pengucapannya namun tidak sesuai penempatannya. Lihat contoh-contoh kasus di bagian berikut untuk lebih jelasnya.

Penyelesaiannya bisa memanfaatkan daftar tatabahasa (grammar) dan melakukan POS-Tagging (memberikan label jenis kata). Namun sampai saat ini belum ada yang melakukan penyusunan daftar tatabahasa yang umum digunakan.

Analisa Kasus dan Kemungkinan Implementasi

Salah Ketik Umum (Kata)

Salah ketik yang seharusnya dapat dideteksi dengan mudah menggunakan kamus.

Contoh

  • tidrtidur

Deteksi

Menggunakan kamus.

Catatan

Lihat:

Salah Ketik Umum (Frasa)

Salah ketik yang dapat dideteksi dengan merujuk ke daftar frasa yang umum digunakan. Teknik ini seharusnya dapat mendeteksi penggunaan kata yang salah pada konteks namun benar menurut kamus.

Contoh

  • pertandingan semak bolapertandingan sepak bola
  • perselisihannya semakan seruperselisihannya semakin seru

Deteksi

Menggunakan ngram sebagai dasar data.

Catatan

  • Untuk ragam tulis, bisa menggunakan ngram dari corpus Kompas dan Wikipedia Indonesia.
  • Untuk ragam lisan, bisa menggunakan ngram dari corpus Twitter, namun masih harus dibersihkan secara manual.

Transposisi

Salah menempatkan kata, biasanya karena diterjemahkan dari bahasa asing.

Contoh

  • sosial mediamedia sosial

Deteksi

belum ada ide

Catatan

Bisa menggunakan ngram, namun kecenderungan salah mengidentifikasi (false positive) cukup tinggi. Seperti balap mobil dan mobil balap, keduanya benar dan merujuk ke dua konsep yang berbeda.

Salah Tatabahasa

Kesalahan yang biasa terjadi karena menggunakan ragam lisan untuk tulisan yang seharusnya menggunakan ragam tulis.

Contoh

  • males banget makenyamalas sekali menggunakannya

Deteksi

belum ada ide

Catatan

Mungkin perlu dibuat daftar tatabahasa yang biasa digunakan menurut ragamnya. Lihat implementasi Link Grammar Parser.

Variasi Bunyi Homophone, Slang dan Ragam Percakapan Daring

Biasanya digunakan pada ragam percakapan. Lihat makalah Perbandingan distribusi frekuensi kata bahasa Indonesia di Kompas, Wikipedia, Twitter, dan Kaskus.

Contoh

  • iaya
  • maomau
  • gwgue
  • wagua
  • gokilgila (istilah slang tahun 80an)
  • pa aminPak Amin
  • akika mawar makanaku mau makan (umum digunakan banci/wadam)

atau yang cukup ekstrim.

QmO dLaM iDopQhO. q tWo… qMo mANk cLiDwAd cYanK m qHo. 
tPhE qMo pLu tHwO„ mYLuPi”… aLwaYs 4’U. 
cO’nA cMa qMo YaNk CoWaD qHo cYuM. 
k’tHwA,, n cNeNk tHanKzb’4„ yOz aLaWAiCe d bEzT,, iN meYe heArD.
tHo_tHo..LupHz yOu„ bU_bU.... 
I’mReGrEeEeeEEeeEet nOw... 
naFaZ..bNcHi 
qOhnGmBAnK... hOeKkkKKk

Deteksi

belum ada ide

Catatan

Ini isu yang cukup kompleks. Namun sepertinya gabungan penggunaan trigram dan kamus bisa menjadi solusi.

Kata yang Hilang

Contoh

  • mereka dari penyalahgunaan narkotikamereka [bersih] dari penyalahgunaan narkotika

Deteksi

belum ada ide

Catatan

Besar kemungkinan kesalahan deteksi terjadi.

Purwarupa

Lihat demo konteks-sensitif pemeriksaan ejaan dan pencari kesamaan kata (word sense disambiguation dan string similarity) khusus untuk ragam percakapan daring bahasa Indonesia.

Teknologi ini juga digunakan pada chatbot @begobet di Twitter.

Untuk pemeriksa ejaan basis web (walaupun belum semua masalah-masalah di atas teratasi) bisa memulainya dengan melakukan forking proyek ini, https://github.com/ardwort/ardspellchecker

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment