- Mencari data-data ganda akibat salah ketik nama atau perbedaan penambahan spasi atau titik, koma, dll.
Tujuan
- Menghitung nilai kemiripan dua nama (string) secara sederhana.
- Tidak untuk menggantikan levenshtein atau similar_text di PHP
Metode penilaian (t1, t2)
a = jumlah perbedaan karakter penyusun
nilai_a = 1 - a/(panjang(t1)+panjang(t2)
:: nilai akan mendekati 1 jika perbedaan semakin sedikit
b1 = urutan susunan karakter t1 terhadap t2
b2 = urutan susunan karakter t2 terhadap t1
(tiap urutan yg sesuai memiliki nilai 1)
nilai_b = maks (b1/panjang(t1) , b2/panjang(t2))
nilai_total = nilai_a*50+nilai_b*50
Code:
function ujiKemiripan (t1, t2) { if (!t1 || !t2) return 0;
if (t1=='' || t2=='') return 0;
if (t1==t2) return 100;
var cc = BandingkanKarakter (t1,t2);
var ur = BandingkanUrutanKarakter (t1,t2);
return cc*50+ur*50; return cc*100;
}
function keKarakter (t) { var x = ''; for (i=0;i<t.length;i++) { var y = t.charAt(i); if (x.indexOf(y)<0) x += y; } return x; }
function PerbedaanKarakter (t1, t2) { var x = ''; for (i=0;i<t1.length;i++) { var y = t1.charAt(i); if (t2.indexOf(y)<0 && x.indexOf(y)<0) x += y; } for (i=0;i<t2.length;i++) { var y = t2.charAt(i); if (t1.indexOf(y)<0 && x.indexOf(y)<0) x += y; } return x; }
function BandingkanKarakter (t1,t2) { var x1 = keKarakter (t1); var x2 = keKarakter (t2); var y = PerbedaanKarakter (x1,x2); return 1-y.length/(x1.length+x2.length); }
function UrutanKarakter (t1, t2) { var s = 0; var p2 = -1; for (i=0;i<t1.length;i++) { var y = t1.charAt(i); var p1 = t2.indexOf(y, p2+1); if (p1>p2) s++; p2 = p1; } return s; }
function BandingkanUrutanKarakter (t1, t2) { var l1 = t1.length;
var l2 = t2.length;
/* compare only same characters. ex: ABC vs BAC */ var k = PerbedaanKarakter (t1, t2);
if (k!='')
{ rege = new RegExp('['+k+']','g');
t1 = t1.replace (rege,'');
t2 = t2.replace (rege,'');
//alert (t1+'\n'+t2+'\n'+k); }
var u1 = UrutanKarakter (t1, t2);
var u2 = UrutanKarakter (t2, t1);
return Math.max(u1/l1,u2/l2);
}
/* contoh */ function test1() { var t1 = 'SITI NURHALIZAH'; var t2 = 'SITI NURFADHILAH';
var x = ujiKemiripan (t1, t2);
alert (t1+'\n'+t2+'\n'+x); }
function test2() { var t1 = prompt ('Nama 1'); var t2 = prompt ('Nama 2');
t1 = t1.toUpperCase(); t2 = t2.toUpperCase();
/* clean */ var rege = new RegExp ('[^A-Z]','g'); t1 = t1.replace (rege, ''); t2 = t2.replace (rege, '');
var x = ujiKemiripan (t1, t2);
alert (t1+'\n'+t2+'\n'+x); }
test1(); test2();
1 Komentar
Duh ra donk blas he..he
BalasHapuseshabe: he...he... itu untuk catatan pribadi :)
siapa tahu berguna juga bagi orang lain.