Algoritma Fonetik Bahasa Indonesia

[Algoritma fonetik](http://en.wikipedia.org/wiki/Phonetic_algorithm) adalah algoritma untuk mengelompokkan kata-kata berdasarkan cara pengucapannya. Jika fungsi *F()* adalah sebuah algoritma fonetik, maka *F(“andy”)* akan memiliki hasil yang sama dengan *F(“andi”)*, karena ‘andy’ dan ‘andi’ memiliki cara pengucapan yang sama. Untuk Bahasa Inggris, algoritma yang populer adalah [Soundex](http://en.wikipedia.org/wiki/Soundex) dan [Metaphone](http://en.wikipedia.org/wiki/Metaphone).

Bagaimana dengan Bahasa Indonesia?

Algoritma fonetik untuk Bahasa Indonesia seharusnya jauh lebih sederhana daripada algoritma fonetik untuk Bahasa Inggris karena Bahasa Indonesia adalah bahasa yang fonetik: pengucapannya relatif konsisten dengan penulisan. Algoritma metaphone seharusnya dapat dimodifikasi menjadi jauh lebih sederhana untuk dapat digunakan dalam Bahasa Indonesia.

Tetapi karena saya terlalu malas untuk mempelajarinya, berikut adalah algoritma fonetik Bahasa Indonesia tanpa basisdata hasil rekaan dari saya sendiri:

1. Ubah ejaan lama menjadi ejaan baru: ubah **oe** menjadi **u**, **tj** menjadi **c**, **dj** menjadi **j**. Untuk menghindari *false positive*, jangan ubah **j** menjadi **y** kecuali jika ada pengubahan ejaan lama menjadi ejaan baru yang lain. Hati-hati dengan urutan pengubahan, jangan sampai **dj** berubah menjadi **y**.

2. Ganti konsonan yang berderet menjadi satu konsonan saja. Misalnya ‘anni’ menjadi ‘ani’.

3. Normalkan diftong: ubah **ai** di akhir kata menjadi **ay**, **au** di akhir kata menjadi **aw** dan **oi** di akhir kata menjadi **oy**.

4. Normalkan semivokal: ubah **konsonan-y** menjadi **konsonan-i**, **iy** menjadi **i** dan **uw** menjadi **u**

5. Normalkan konsonan yang berbunyi nyaris sama: ubah **kh** dan **q** menjadi **k**, **sy** menjadi **s**, **v** menjadi **f**, **z** menjadi **j**, **d** menjadi **t**, **b** menjadi **p** (mungkin masih ada yang kurang atau salah).

6. Normalkan ‘x’: ubah **x** menjadi **ks**

7. Ubah konsonan *compound* yang tersisa menjadi satu karakter: **ng** menjadi **d** dan **ny** menjadi **b**.

8. Normalkan h diam: ubah **konsonan-h-vokal** menjadi **konsonan-vokal** saja.

9. Hapus semua huruf vokal.

Untuk memuaskan ego saya, maka algoritma yang sama sekali belum pernah dicoba ini saya namakan: Algoritma Priyadi™. Ha! >:)

Khusus untuk nama orang, mungkin akan lebih baik jika algoritma fonetik Bahasa Indonesia (apapun algoritmanya, tentunya bukan Algoritma Priyadiâ„¢) dicampur dengan algoritma fonetik Bahasa Inggris. Hal ini akibat banyaknya nama orang Indonesia yang menganut pengucapan Bahasa Asing.

Selain itu, karena Bahasa Indonesia relatif sangat fonetik, kemiripan pengucapan bisa saja berbanding terbalik dengan [jarak Levenshtein](http://en.wikipedia.org/wiki/Levenshtein_distance). Semakin mirip pengucapan dua buah kata, maka semakin dekat jarak Levenshtein-nya. Hanya saja, metoda ini akan membutuhkan tempat penyimpanan yang jauh lebih besar daripada jika menggunakan algoritma fonetik.

Mungkin saya sedang *reinventing the wheel*. Mungkin sudah ada algoritma lain yang lebih baik dan tentunya lebih terbukti? Atau mungkin sudah ada yang sudah mempelajari efektivitas algoritma fonetik Bahasa Inggris jika diterapkan pada Bahasa Indonesia? Jika belum ada, mungkin ini topik yang baik untuk tugas akhir mahasiswa S1 teknik atau sastra.

Pesan saya, namakan algoritma anda dengan nama anda sendiri, jangan nama dosen pembimbing anda, kecuali kalau nama anda adalah ‘Priyadi’ :D.

46 comments

  1. if (PriyadiAlgorithm(“Roy Suryo”)==PriyadiAlgorithm(“Roi Soerjo”)) {
    printf(“Horeeeee!!!!”);
    }

    :D

  2. kalo algoritma/kaidah “Unsur Serapan” dari bhs asing ke bhs Indonesia, ada tuh.

    eh..nyambung nggak ya :-?

  3. …maka F(”andy”) akan memiliki hasil yang sama dengan F(”andi”), karena ‘andy’ dan ‘andi’ memiliki cara pengucapan yang sama.

    Wah, tumben gue ke pilem :-??

  4. “jangan ubah j menjadi y kecuali jika ada pengubahan ejaan lama menjadi ejaan baru yang lain.”

    yulian adalah jay menjadi yulian adalah yay … hi..hi…

    #-o

  5. pak pri hmmmmssss
    cerdas…….
    pintar…..
    matang…
    mapan……
    sosok pria yg mendekati kesempurnaan.
    btw, anda bukan anggota lsm-kan?…
    yg bergerak kalo ada titipan :d

  6. #13: heh, salah dong. kalo ‘jay adalah yulian’ gak berubah jadi ‘yay adalah yulian’, beda kalau ‘jay adalah joelian’, maka berubah jadi ‘yay adalah yulian’.

  7. —–
    Normalkan diftong: ubah ai menjadi ay, au menjadi aw dan oi menjadi oy.
    —–

    1. baik menjadi bayk? (bayek)
    2. baur menjadi bawr? (bawer)

  8. #18, mestinya pakai database.

    Tapi gue heran, kok omPri gak pake contoh “standar”. Misalnya dalam paragraf pertama:

    >Jika fungsi F() adalah sebuah algoritma fonetik,
    >maka F(”andy”) akan memiliki hasil yang sama
    >dengan F(”andi”), karena ‘andy’ dan ‘andi’
    >memiliki cara pengucapan yang sama.

    Mestinya ditulis
    >Jika fungsi F() adalah sebuah algoritma fonetik,
    >maka F(”roy”) akan memiliki hasil yang sama
    >dengan F(”roi”), karena ‘roy’ dan ‘roi’
    >memiliki cara pengucapan yang sama.

    Atau sebagai contoh di point 1:
    >Ubah ejaan lama menjadi ejaan baru:
    >ubah oe menjadi u

    Maka F(“Roy Soeryo”) akan sama dengan F(“Roi Suryo”).

    Dengan begini artikel omPri akan 68% lebih baik daripada yang sekarang. Sekarang ini gue kira nilai untuk artikel omPri hanya 68. Karena 68% dari isi artikel itu cuma menunjukkan omPri lagi kurang kerjaan, seperti halnya 68% dari komentator di blog ini :d

  9. hmmm…
    jadi inget orang-orang latin
    yang berbahasa Inggris,
    di pilem-pilem Huliwud.

    kata orang,
    bahasa itu untuk memudahkan,
    untuk memahami,
    jadi ksimpulannya :
    gunakan bahasa dengan menikmatinya.

    :o

    Hi Pri! ™
    salam kenal.

  10. bwuheheheh, gw juga pernah bikin algoritma ngasal, yaitu stemming bahasa indonesia, kapan2x posting di blog ah, jadi algoritma jefri =))

  11. Kenapa juga ai harus berubah jadi ay, gimana kalo ai berubah jadi e, jadi if PriyadiAlgorithm(“pandai”) then PriyadiAlgorithm(“pande”), oke??? tapi asyik juga isengnya (dari pada mikirin yang jorok n g jelas, be creative…. :-) )

  12. dipikirnya alogoritma mat…. :((
    gk taunya………….
    malah bahasan diftong dkk
    tp cool jga ne:)
    lam kenal wat pak priadi(gt ya)
    hehehe:d

  13. Saya telah menuangkan algoritma anda dalam bahasa pemrograman Delphi 7, secara kebetulan sudah di buat oleh Achmad Zaenuri, namun saya membuat versi saya sendiri.

    Algoritma ini saya pakai untuk Tugas Akhir kuliah saya yang berjudul Aplikasi Pemeriksa Ejaan Kata Bahasa Indonesia. Dimana memadukan antara algoritma fonetik dengan algoritma levensthein. Saya sudah mencantumkan algoritma ini pada program dan laporan TA saya sebagai Algoritma Priyadi.Dengan ini saya memohon ijin untuk memakai algoritma anda, sebelumnya saya ucapkan terima kasih. :)

  14. #44: waduh. posting saya ini cuma brainstorming aja. algoritmanya belum tentu akurat karena memang belum pernah dicoba. saya posting ini siapa tahu ada yang tertarik untuk ngembangin :). jadi, saya harap jangan dicontek mentah2. soal nama, jangan pake nama saya deh hehehe :)

Leave a Reply to ullilkecil Cancel reply

Your email address will not be published. Required fields are marked *