Вы можете сделать это, используя коэффициент Соренсена – Дайса.
коэффициент коэффициента = ((2 * | X∩Y |) / (| X | + | Y |))
где,| X |& | Y |кардинальности двух множеств,| X∩Y |число общих элементов в обоих наборах
Коэффициент варьируется от 0 до 1, где 1 очень похоже, а 0 наименее похоже.
Поскольку вам нужно, чтобы набор был чувствительным к регистру:замените символы в наборе на любые символы.(ПРИМЕЧАНИЕ: использование значений ascii можетрадикально изменить показатель точности).Я бы порекомендовал кодироватьсимволы как разные символы для сохранения точности.
например:b = '!', e = '@', r = '#', l = '$', i = '%', n = '^',B = '&', E = '*', R = '(', L = ')', I = '?', N = '{'
код: -
var oldSet = ['Berlin' , 'BERLIN' , 'BERlin', 'BeRlin','berlin','berliN' , 'berLIN'];
var newSet = ['&@#$%^', '&*()?{', "&*($%^", "&@($%^", "!@#$%^", "!@#$%{", "!@#)?{"];
var ratio= [];
for(var i=0; i<newSet.length-1; i++) {
for(var j=i+1; j<newSet.length; j++) {
var cof= getCoefficient(newSet[i], newSet[j], getIntersection(newSet[i], newSet[j]));
print("\n\n" + oldSet[i] + "====" + oldSet[j] + "===>" + cof);
ratio.push(cof);
}
print("\n");
}
//This function will return coeffiecient between 0 to 1
function getCoefficient(x, y, commonCnt) {
return ((2*commonCnt) / (x + y));
}
вывод: -
Berlin====BERLIN===>0.16666666666666666
Berlin====BERlin===>0.6666666666666666
Berlin====BeRlin===>0.8333333333333334
Berlin====berlin===>0.8333333333333334
Berlin====berliN===>0.6666666666666666
Berlin====berLIN===>0.3333333333333333
BERLIN====BERlin===>0.5
BERLIN====BeRlin===>0.3333333333333333
BERLIN====berlin===>0
BERLIN====berliN===>0.16666666666666666
BERLIN====berLIN===>0.5
BERlin====BeRlin===>0.8333333333333334
BERlin====berlin===>0.5
BERlin====berliN===>0.3333333333333333
BERlin====berLIN===>0
BeRlin====berlin===>0.6666666666666666
BeRlin====berliN===>0.5
BeRlin====berLIN===>0.16666666666666666
berlin====berliN===>0.8333333333333334
berlin====berLIN===>0.5
berliN====berLIN===>0.6666666666666666