Minggu, 25 Januari 2009

ALGORITMA METAPHONE DAN ANTI METAPHONE

Algoritma metaphone dan antimetaphone

Metaphone

From Wikipedia, the free encyclopedia Dari Wikipedia Indonesia, ensiklopedia bebas berbahasa Indonesia

Jump to: navigation , search Langsung ke: navigasi, cari

Metaphone is a phonetic algorithm , an algorithm for indexing words by their sound, when pronounced in English. Metaphone adalah fonetis algoritma, suatu algoritma untuk mengindeks kata dengan suara mereka, apabila diucapkan dalam bahasa Inggris. The algorithm produces variable length keys as its output, as opposed to Soundex 's fixed-length keys. Algoritma yang menghasilkan panjang kunci variabel sebagai output, dibandingkan dengan Soundex 's tetap-panjang kunci. Similar sounding words share the same keys. Mirip bunyi berbagi kata kunci yang sama.

Metaphone was developed by Lawrence Philips as a response to deficiencies in the Soundex algorithm. Metaphone dikembangkan oleh Lawrence Philips sebagai respon terhadap kekurangan dalam Soundex algoritma. It is more accurate than Soundex because it uses a larger set of rules for English pronunciation. Hal ini lebih akurat daripada Soundex karena lebih besar menggunakan sebuah kumpulan aturan untuk pelafalan bahasa Inggris. Metaphone is available as a built-in operator in a number of systems, including later versions of PHP . Metaphone tersedia sebagai built-in operator dalam sejumlah sistem, termasuk nanti versi PHP.

The original author later produced a new version of the algorithm, which he named Double Metaphone , that produces more accurate results than the original algorithm. Penulis asli kemudian diproduksi versi baru suatu algoritma, yang dinamakannya Double Metaphone, yang memproduksi hasil yang lebih akurat daripada yang asli algoritma.

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,

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

Double Metaphone

From Wikipedia, the free encyclopedia Dari Wikipedia Indonesia, ensiklopedia bebas berbahasa Indonesia

Jump to: navigation , search Langsung ke: navigasi, cari

The Double Metaphone search algorithm is a phonetic algorithm written by Lawrence Philips and is the second generation of his Metaphone algorithm. The Double Metaphone pencarian algoritma adalah algoritma fonetis yang ditulis oleh Lawrence Philips dan merupakan generasi kedua orang Metaphone algoritma. Its implementation was described in the June 2000 issue of C/C++ Users Journal . Pelaksanaannya telah dijelaskan di Juni 2000 persoalan C / C + + Users Journal.

It is called "Double" because it can return both a primary and a secondary code for a string; this accounts for some ambiguous cases as well as for multiple variants of surnames with common ancestry. It is called "ganda" karena dapat kembali baik primer dan sekunder untuk kode string; account ini untuk beberapa kasus dwimakna serta beberapa varian dari Nama keluarga dengan keturunan umum. For example, encoding the name "Smith" yields a primary code of SM0 and a secondary code of XMT , while the name "Schmidt" yields a primary code of XMT and a secondary code of SMT --both have XMT in common. Misalnya, encoding nama "Smith" primer hasil kode SM0 dan kedua kode XMT, sedangkan nama "Schmidt" primer hasil kode XMT dan sekunder kode SMT - keduanya ada di XMT umum.

Double Metaphone tries to account for myriad irregularities in English of Slavic , Germanic , Celtic , Greek , French , Italian , Spanish , Chinese , and other origin. Double Metaphone mencoba untuk memperhitungkan segudang penyimpangan dalam bahasa Inggris dari Slavia, Jerman, Celtic, Yunani, Perancis, Italia, Spanyol, Cina, dan lainnya asal. Thus it uses a much more complex ruleset for coding than its predecessor; for example, it tests for approximately 100 different contexts of the use of the letter C alone. Dengan demikian ia menggunakan jauh lebih rumit untuk coding ruleset dari para pendahulu, misalnya untuk tes ini sekitar 100 berbeda dari konteks penggunaan huruf C sendiri. In the introduction to his original journal article, Mr. Philips defended this complexity: Dalam pengenalan kepada jurnal artikel asli, Bapak Philips defended kompleksitas ini:

Albert Einstein once said, "Everything should be made as simple as possible--but no simpler!" Albert Einstein pernah berkata, "Semuanya harus dilakukan secara mudah mungkin - tetapi tidak mudah!" Simplicity, of course, is a fundamental touchstone of quality in engineering and science. Kesederhanaan, tentu saja, adalah dasar batu ujian kualitas teknik dan sains. If an algorithm accomplishes its task as simply as possible, and demonstrates a touch of intuitive inspiration as well, we compliment it as "elegant." Jika suatu algoritma yang accomplishes tugas sebagai hanya mungkin, dan menunjukkan sentuhan intuitif inspirasi juga, kita sebagai pujian "elegan." Unfortunately for engineers, human activity can rarely be described elegantly. Sayangnya untuk insinyur, aktivitas manusia dapat jarang digambarkan elegan. And although text processing is a critical technology at a time when millions of people are searching the web , the unsystematic and exception-laden English language often demands algorithms that look ugly to engineers. Walaupun teks dan pemrosesan teknologi penting adalah pada waktu ketika jutaan orang yang mencari di web, yang tak sistematis dan pengecualian-sarat bahasa Inggris menuntut algoritma yang sering terlihat jelek ke teknisi.

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