Javascript: calculating similarity % between two strings

HTML
<html> <head> <title> test </title> </head> <body> This is a way to calculate similarity % between two strings based on <a href="https://en.wikipedia.org/wiki/Levenshtein_distance">Levenshtein distance:</a><p><p><br> </body> </html>
CSS
body{ font-family: verdana; color:gray; margin: 8px; } .str{ color:#F0F; } .perc{ color:#000; background-color:#FF0; } .comment{ color:silver; } p{ color: black; font-style:italic; }
JAVASCRIPT
function similarity(s1, s2) { var longer = s1; var shorter = s2; if (s1.length < s2.length) { longer = s2; shorter = s1; } var longerLength = longer.length; if (longerLength === 0) { return 1.0; } return (longerLength - editDistance(longer, shorter)) / parseFloat(longerLength); } function editDistance(s1, s2) { s1 = s1.toLowerCase(); s2 = s2.toLowerCase(); var costs = new Array(); for (var i = 0; i <= s1.length; i++) { var lastValue = i; for (var j = 0; j <= s2.length; j++) { if (i == 0) costs[j] = j; else { if (j > 0) { var newValue = costs[j - 1]; if (s1.charAt(i - 1) != s2.charAt(j - 1)) newValue = Math.min(Math.min(newValue, lastValue), costs[j]) + 1; costs[j - 1] = lastValue; lastValue = newValue; } } } if (i > 0) costs[s2.length] = lastValue; } return costs[s2.length]; } var $str1="Marco Antonio Piñero Lopez"; var $str2="marco antonio Pineda lópez"; var perc=Math.round(similarity($str1,$str2)*10000)/100; var txt="The strings: <span class=\"str\">'"+$str1+"'</span> and <span class=\"str\">'"+$str2+"'</span>"; txt+="<br>are similar <span class=\"perc\">"+perc+"%</span>"; document.write(txt);
Expand for more options Login