UNPKG

cockatoo.js

Version:

Fuzzy search library based based on Damerau Levenshtein distance algorithm for Node.js

57 lines (56 loc) 2.08 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); var DamerauLevenshtein = /** @class */ (function () { function DamerauLevenshtein() { this.deletionCost = 1; this.insertionCost = 1; this.substitutionCost = 1; this.transpositionCost = 1; } DamerauLevenshtein.prototype.getDistance = function (s1, s2) { if (undefined == s1 || undefined == s2 || 'string' !== typeof s1 || 'string' !== typeof s2 || s1.length === 0 || s2.length === 0) { return -1; } var s1Length = s1.length; var s2Length = s2.length; var d = this.initMatrix(s1Length, s2Length); if (d === null) { return -1; } for (var i = 1; i <= s1Length; i++) { var costSubst = void 0; var costTrans = void 0; for (var j = 1; j <= s2Length; j++) { if (s1.charAt(i - 1) === s2.charAt(j - 1)) { costSubst = 0; costTrans = 0; } else { costSubst = this.substitutionCost; costTrans = this.transpositionCost; } d[i][j] = Math.min(d[i - 1][j] + this.deletionCost, // deletion d[i][j - 1] + this.insertionCost, // insertion d[i - 1][j - 1] + costSubst); if (i > 1 && j > 1 && s1.charAt(i - 1) === s2.charAt(j - 2) && s1.charAt(i - 2) === s2.charAt(j - 1)) { d[i][j] = Math.min(d[i][j], d[i - 2][j - 2] + costTrans); } } } return d[s1Length][s2Length]; }; DamerauLevenshtein.prototype.initMatrix = function (s1Length, s2Length) { var d = []; for (var i = 0; i <= s1Length; i++) { d[i] = []; d[i][0] = i; } for (var j = 0; j <= s2Length; j++) { d[0][j] = j; } return d; }; return DamerauLevenshtein; }()); exports.DamerauLevenshtein = DamerauLevenshtein;