parea-ai
Version:
Client SDK library to connect to Parea AI.
55 lines (54 loc) • 1.67 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.levenshtein = exports.levenshteinDistance = void 0;
function levenshteinHelper(a, b) {
const an = a ? a.length : 0;
const bn = b ? b.length : 0;
if (an === 0) {
return bn;
}
if (bn === 0) {
return an;
}
const matrix = new Array(bn + 1);
for (let i = 0; i <= bn; ++i) {
const row = (matrix[i] = new Array(an + 1));
row[0] = i;
}
const firstRow = matrix[0];
for (let j = 1; j <= an; ++j) {
firstRow[j] = j;
}
for (let i = 1; i <= bn; ++i) {
for (let j = 1; j <= an; ++j) {
if (b.charAt(i - 1) === a.charAt(j - 1)) {
matrix[i][j] = matrix[i - 1][j - 1];
}
else {
matrix[i][j] =
Math.min(matrix[i - 1][j - 1], // substitution
matrix[i][j - 1], // insertion
matrix[i - 1][j]) + 1;
}
}
}
return matrix[bn][an];
}
const levenshteinDistance = (output, target) => {
const maxLen = Math.max(output.length, target.length);
let score = 1;
if (maxLen > 0) {
score = 1 - levenshteinHelper(output, target) / maxLen;
}
return score;
};
exports.levenshteinDistance = levenshteinDistance;
const levenshtein = (log) => {
if (log.target === undefined || log.target === null) {
throw new Error('Levenshtein requires a ground truth');
}
const output = log.output || '';
const target = log.target;
return (0, exports.levenshteinDistance)(output, target);
};
exports.levenshtein = levenshtein;