- 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.