Skip to content

Instantly share code, notes, and snippets.

@peterbe
Created February 5, 2011 13:14
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save peterbe/812443 to your computer and use it in GitHub Desktop.
Save peterbe/812443 to your computer and use it in GitHub Desktop.
EditDistanceMatcher function
exports.EditDistanceMatcher = function(against, alphabet) {
this.against = against;
this.alphabet = alphabet || "abcdefghijklmnopqrstuvwxyz";
this.edits1 = function(word) {
var n = word.length;
var al = this.alphabet.length;
var set = new Array(), t;
// deletion
for (var i=0, len=n; i < len; i++) {
t = word.substring(0, i) + word.substring(i+1, n);
if (-1 == set.indexOf(t))
set.push(t);
}
// transposition
for (var i=0, len=n - 1; i < len; i++) {
t = word.substring(0, i) + word.substr(i+1, 1) + word.substr(i, 1) + word.substring(i+2, n);
if (-1 == set.indexOf(t))
set.push(t);
}
// alteration
for (var i=0, len=n; i < len; i++) {
for (var j=0, leny=al; j<leny; j++) {
t = word.substring(0, i) + this.alphabet.substr(j,1) + word.substring(i+1, n);
if (-1 == set.indexOf(t))
set.push(t);
}
}
// insertion
for (var i=0, len=n + 1; i < len; i++) {
for (var j=0, leny=al; j<leny; j++) {
t = word.substring(0, i) + this.alphabet.substr(j,1) + word.substring(i, n);
if (-1 == set.indexOf(t))
set.push(t);
}
}
return set;
};
};
exports.EditDistanceMatcher.prototype.match = function(word) {
var edits1 = this.edits1(word);
var set = new Array();
for (var i in edits1) {
if (-1 < this.against.indexOf(edits1[i])) {
set.push(edits1[i]);
}
}
return set;
}
exports.EditDistanceMatcher.prototype.is_matched = function(word) {
var edits1 = this.edits1(word);
for (var i in edits1) {
if (-1 < this.against.indexOf(edits1[i])) {
return true;
}
}
return false;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment