Menghitung Kemiripan Dua Nama dg JavaScript

Latar Belakang

  • 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

  1. Duh ra donk blas he..he

    eshabe: he...he... itu untuk catatan pribadi :)
    siapa tahu berguna juga bagi orang lain.

    BalasHapus