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 comment so far

  1. Silo on

    Duh ra donk blas he..he

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


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: