Ramdhani’s Blog

Catatan kecil pengalaman, pemikiran dan proses pembelajaran …

Algoritma metaphone dan antimetaphone

with one comment

Iseng-iseng menelusuri file-file lama pada masa-masa kuliah, saya menemukan file lama mengenai oprek-oprekan ilmiah saya mengenai metode pencarian nama dengan menggunakan algoritma metaphone dan antimetaphone berbahasa indonesia. algoritm fonetik pada beberapa bahasa pemrograman sudah di implementasikan secara langsung sebagai method, seperti pada PHP yang memiliki fungsi soundex() dan metaphone(), tapi masih menggunakan acuan ejaan dalam bahasa inggris, maka dari itu perlunya memodifikasi dalam ejaan bahasa indonesia karena memang memiliki perbedaan karakter ditambah lagi adanya ejaan lama dan ejaan baru dalam perbendaharaan bahasa indonesia.

Metaphone

Algoritma Metaphone dapat diterapkan pada berbagai bahasa di dunia dalam pencarian data tertentu.  Karena setiap bahasa di dunia dalam pengucapannya memiliki cara yang berbeda, sehingga algoritma dimodifikasi sesuai dengan karakteristik bahasa yang digunakan. Pada bahasa-bahasa tertentu, pengucapan kadang-kadang mempunyai kesamaan dalam hal pengucapan.
Selain bahasa Inggris, algoritma ini telah diadopsi pula dalam bahasa Spanyol, Jerman dan Perancis.
Dalam bahasa Indonesia Algoritma Metaphone bertujuan untuk mencari kata-kata yang memiliki kemiripan bunyi baik dalam bahasa Indonesia sendiri maupun pendekatan dalam bahasa Inggris, seperti kata-kata ilmiah dalam bahasa Indonesia masih banyak yang disadur dari bahasa Inggris, seperti contoh  dibawah ini :
Mikro
Micro
Makro
Macro

Pada contoh kata di atas apabila mencari data tentang mikro, maka akan keluar data mikro dan micro. Hal terjadi karena adanya kemiripan dalam pengucapan kata mikro. Cara kerja Metaphone yaitu kalimat diubah menjadi sebuah kode terlebih dahulu, kemudian apabila ada kemiripan dalam pengucapan maka data akan yang dicari akan ditampilkan.  Pada tahun 1990-an, Lawrence Philips mengembangkan yang disebut dengan Algoritma Metaphone. Tujuan dari algoritma ini adalah mencari kata-kata yang memiliki persamaan bunyi. Setiap kata akan memiliki kode tertentu jika melalui algoritma metaphone, Sehingga metaphone tidak mencari kata dasar.  Kata-kata yang bunyinya sama akan memiliki kode yang sama pula.

Aturan-aturan dasar dari Algoritma Metaphone ini adalah sebagai berikut  :
1.  Menghilangkan semua karakter diluar alfabet.
2. Alfabet yang digunakan hanya 16 suara konsonan  yaitu:
B, F, H, J, K, L, M, N, P, R, S, T, W, X, Y, (kosong) O adalah simbul untuk suara yang dihasilkan oleh “th”
3. Menghilangkan semua huruf vokal A, I, U, E, O
4. Mengelompokkan huruf-huruf yang bersifat variabel, yaitu:C, G, P, S, T
5. Melakukan  konversi  kata  menjadi  metaphone dengan    melakukan   pengecekkan  setiap  huruf  yang  sesuai dengan  aturan bahasa tertentu.
Huruf-huruf yang bersifat variabel tersebut dapat berubah bunyinya jika digabungkan dengan huruf-huruf tertentu, sehingga perlu dilakukan analisa dalam konversi. Sebagai contoh huruf P. Jika P diikuti oleh huruf vokal, maka bunyinya menjadi P. Tetapi jika diikuti dengan huruf  H, maka bunyinyapun berubah menjadi lebih mirip F. Hal yang sama tidak dijumpai pada keenambelas konsonan yang telah disebut di atas.
Perancangan algoritma Metaphone untuk bahasa Indonesia dilakukan dengan menetapkan aturan-aturan seperti berikut ini:
1.  Alfabet yang digunakan hanya 18 suara konsonan, yaitu:
B,C,D,F,G,H,K,L,M,N,P,R,S,T,W,X,Y,0
0 mewakili suara yang dihasilkan oleh “ng” dalam bahasa Indonesia.
2.   Tetapkan huruf vokal, seperti:
A,I,U,E dan O
3.    Tetapkan huruf variabel, Varson, antara lain:
C,G,P,S dan T
4.    Tetapkan huruf vokal depan, depan vokal seperti:
E, I, Y
5.    Proses I
a.    Jika panjang string adalah nol, kembalikan        nilai “”
b. Buang semua karakter bukan alfabet
c. Jika panjang string menjadi nol, kembalikan nol “”
d.    jika panjang string adalah satu, maka kembalikan string tersebut
e.    Ubah semua huruf menjadi huruf kapital
6.    Proses II
a. Jika ada tj, ubah menjadi c
b. Jika ada dj, ubah menjadi j
c. Jika ada dz, ubah menjadi z
7.   Proses III (per huruf)
a. Jika ada string [i] dan string [i+1] adalah konsonan yang sama, buang string [i]
b. Jika string [i] adalah huruf vokal, buang string [i]
c. Jika hurup pertama merupakan huruf vokal maka petakan seperti huruf pertamanya
d. Jika string [i] = B dan berada diakhir kata,maka petakan menjadi P
e.    Jika string [i] = C dan berada sebelum “hs”, maka petakan menjadi K
f. Jika string [i] = C dan berada sebelum H, maka petakan menjadi C
g. Jika string [i] = C dan berada sebelum dua huruf vokal berturut-turut, maka petakan menjadi K
h. Jika string [i] = C dan berada sebelum di depan huruf vokal, maka petakan menjadi S
i. Jika string [i] = C dan berada sebelum “hr”, maka petakan menjadi R ? K
j. Jika string [i] = C dan kondisinya selain 7.d hingga 7.h, maka petakan menjadi K
k. Jika string [i] = D, maka petakan menjadi D
l. Jika string [i] = D dan berada di akhir kata, maka petakan menjadi T
m. Jika string [i] = G dan berada setelah N, maka buang G => NG
n. Jika string [i] = G dan kondisinya selain 7.l, maka petakan menjadi G
o. Jika string [i] = H dan berada sebelum huruf vokal atau di depan huruf vokal atau sesudah huruf konsonan, maka buang H
p. Jika string [i] = H dan kondisinya selain 7.n,  maka petakan menjadi H
q. Jika string [i] = I dan berada sebelum huruf vokal dan huruf berikutnya bukan E, maka petakan menjadi Y
r. Jika string [i] = J, maka petakan menjadi Y
s. Jika string [i] = K dan berada sebelum H, maka buang K
t. Jika string [i] = K dan kondisinya selain 7.r, maka petakan menjadi K
u. Jika string [i] = N dan berada sebelum G, maka petakan menjadi O
v. Jika string [i] = N dan kondisinya selain 7.t, maka petakan menjadi N
w. Jika string [i] = P dan berada sebelum H, maka petakan menjadi F
x. Jika string [i] = P dan kondisinya selain 7.v,  maka petakan menjadi P
y. Jika string [i] = Q, maka petakan menjadi K
z. Jika string [i] = S dan berada sebelum huruf Z, maka buang S
– Jika string [i] = S dan kondisinya selain 7.y,  maka petakan menjadi S
aa.Jika string [i] = T, maka petakan menjadi T
bb.Jika string [i] = V, maka petakan menjadi V
cc. Jika string [i] = X, maka petakan menjadi KS
dd. Jika string [i] = Y dan berada setelah huruf konsonan dan setelah huruf vokal, maka petakan menjadi Y
ee. Jika string [i] = Y  dan berada sebelum huruf vokal, maka petakan menjadi Y
ff. Jika string [i] = Y dan berada sebelum huruf S atau huruf H, maka petakan menjadi Y
gg. Jika string [i] = Y dan kondisinya selain 7.ff sampai 7.hh, maka buang Y (diakhir kalimat)
hh. Jika string [i] = Z dan berada sebelum atau sesudah “I” atau sesudah huruf “M” atau di akhir kata, maka petakan menjadi S
ii. Jika string [i] = Z dan kondisinya selain 7.jj, maka petakan menjadi Y
jj.    Selain aturan di atas seperti huruf F,L,M,N,R,T da W tidak ada perubahan
kk. Jika string [i] = O dan berada sebelum huruf vokal dan huruf berikutnya bukan E, maka petakan menjadi W
ll. Jika string [i] = U dan berada sebelum huruf vokal dan huruf berikutnya bukan I, maka petakan menjadi W

Anti Metaphone
Teknik anti metaphone merupakan kebalikan dari algoritma metaphone. Algoritma metaphone yaitu teknik yang menghilangkan huruf vokal sedangkan anti metaphone yaitu memunculkan kembali huruf vokal yang terdapat dalam sebuah kalimat. Aturan dari algoritma anti metaphone, adalah sebagai berikut:
1.  Vokal, yaitu huruf A,E,I,O,U
2.  Cek huruf per huruf:
a. Jika huruf Y dan bukan di awal kata dan berada setelah konsonan, maka petakan menjadi I
b. Jika huruf Y dan berada diluar aturan 2.a, maka buang huruf Y
c. Jika huruf E dan berada setelah huruf “I” atau “O” maka buang huruf E
d. Jika huruf E dan berada di luar aturan 2.c, maka petakan menjadi E
e. Jika huruf O dan berada sebelum huruf E, maka petakan menjadi U
f. Jika huruf O dan berada di luar aturan 2.e, maka petakan menjadi O
g. Huruf vokal yang lain tidak mengalami perubahan sehingga dapat langsung dipetakan.
Pada aturan nomer 2.c (Jika huruf E dan berada setelah huruf “I” atau “O” maka buang huruf E) terjadi karena tidak adanya keselarasan vokal pada dwisuku sehingga huruf E dapat dihilangkan. Demikian juga terjadi pada aturan nomer 2.e merupakan solusi atas ejaan lama yang menggunakan huruf “OE” untuk pengucapan atau pelafalan “U”. Sedangkan aturan nomer 2.c (Jika huruf E dan berada setelah huruf “I” atau “O” maka buang huruf E) merupakan penerapan dari aturan nomer 2.e.

Secara teori jika kita mencari nama Suwanto dan Soewanto maka akan mendapatkan kunci yang sama, begitu juga klo kita mencari tjahjono dengan cahyono maka akan mendapat kunci yang sama pula.

Berikut ini source program implementasi algoritma metaphone dan antimetaphone dalam bahasa C# dan VB.NET (masih .Net framework 1) yang saya modifikasi dari class C# yang dibuat oleh Adam Nelson (anelson@nullpointer.net) yang memporting algoritma double metaphone dari lawrence philips yang dipublikasikan pada C/C++ Users Journal edisi Juni.

Source progam terdiri dari beberapa folder :

1. db (file database sql server)

2. Metaphone.NET (class metaphone menggunakan C#)

3. AntiMetaphone (class AntiMetaphone menggunakan C#)

4. WebMetaphoneApps (aplikasi utama , interface pencarian sederhana menggunakan VB.NET)

silakan unduh di https://dl.getdropbox.com/u/461588/Metaphone.rar

Written by Ramdhani

Januari 11, 2009 pada 7:25 am

Satu Tanggapan

Subscribe to comments with RSS.

  1. lagi baca metaphone, sekalian nanya juga dong..
    kalau di liat dari algoritma metaphone bhs indo di atas berarti ga bisa ya kalau contohnya :
    – ‘jg’ disamakan dengan ‘juga’ -> kasus singkatan
    – ‘brapa’ disamakan dengan ‘berapa’ -> kasus hilang huruf
    – ‘terablik’ disamakan dengan ‘terbalik’ -> kasus huruf yg terbalik

    apa perlu dengan algoritma lain? kalau ada namanya apa ?

    artm

    Desember 15, 2009 at 6:00 am


Tinggalkan Balasan

Isikan data di bawah atau klik salah satu ikon untuk log in:

Logo WordPress.com

You are commenting using your WordPress.com account. Logout / Ubah )

Gambar Twitter

You are commenting using your Twitter account. Logout / Ubah )

Foto Facebook

You are commenting using your Facebook account. Logout / Ubah )

Foto Google+

You are commenting using your Google+ account. Logout / Ubah )

Connecting to %s

%d blogger menyukai ini: