Skip to content

Instantly share code, notes, and snippets.

@olegp
Created March 4, 2012 20:35
Show Gist options
  • Save olegp/1974682 to your computer and use it in GitHub Desktop.
Save olegp/1974682 to your computer and use it in GitHub Desktop.
String Similarity
// JS port of http://www.catalysoft.com/articles/StrikeAMatch.html
function similarity(str1, str2) {
function letterPairs(str) {
var pairs = [];
for ( var i = 0; i < str.length - 1; i++) {
pairs.push(str.substr(i, i + 2));
}
return pairs;
}
function wordLetterPairs(str) {
var allPairs = [];
var words = str.split("\\s");
for ( var w = 0; w < words.length; w++) {
var pairsInWord = letterPairs(words[w]);
for ( var p = 0; p < pairsInWord.length; p++) {
allPairs.push(pairsInWord[p]);
}
}
return allPairs;
}
var pairs1 = wordLetterPairs(str1.toUpperCase());
var pairs2 = wordLetterPairs(str2.toUpperCase());
var intersection = 0;
var union = pairs1.length + pairs2.length;
for ( var i = 0; i < pairs1.length; i++) {
var pair1 = pairs1[i];
for ( var j = 0; j < pairs2.length; j++) {
var pair2 = pairs2[j];
if (pair1[0] == pair2[0] && pair1[1] == pair2[1]) {
intersection++;
pairs2.slice(j, 1);
break;
}
}
}
return (2.0 * intersection) / union;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment