UNPKG

@technobuddha/library

Version:
38 lines 3.35 kB
import { diceCoefficient } from "./dice-coefficient.js"; import { levenshteinDistance } from "./levenshtein-distance.js"; import { longestCommonSubstring } from "./longest-common-substring.js"; /** * Computes a fuzzy similarity score between two strings using a weighted combination * of Levenshtein distance, Dice coefficient, and longest common substring metrics. * @param input - The input string to compare. * @param comparedTo - The string to compare against. * @param options - Optional configuration for the comparison. * @returns A similarity score between 0 and 1, where 1 indicates a perfect match. * @group String * @category Fuzzy Match */ export function fuzzyMatch(input, comparedTo, { caseInsensitive = true, weightLevenshteinDistance = 5, weightDiceCoefficient = 3, weightLongestCommonSubstring = 2, } = {}) { const len = Math.max(input.length, comparedTo.length); let wgt = 0; let sum = 0; if (len) { if (weightLevenshteinDistance) { sum += weightLevenshteinDistance * (1.0 - levenshteinDistance(input, comparedTo, { caseInsensitive }) / len); wgt += weightLevenshteinDistance; } if (weightDiceCoefficient) { sum += weightDiceCoefficient * diceCoefficient(input, comparedTo, { caseInsensitive }); wgt += weightDiceCoefficient; } if (weightLongestCommonSubstring) { sum += weightLongestCommonSubstring * (longestCommonSubstring(input, comparedTo, { caseInsensitive }).length / len); wgt += weightLongestCommonSubstring; } } return wgt === 0 ? 0 : sum / wgt; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZnV6enktbWF0Y2guanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvZnV6enktbWF0Y2gudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQ3hELE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQ2hFLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBa0J2RTs7Ozs7Ozs7O0dBU0c7QUFDSCxNQUFNLFVBQVUsVUFBVSxDQUN4QixLQUFhLEVBQ2IsVUFBa0IsRUFDbEIsRUFDRSxlQUFlLEdBQUcsSUFBSSxFQUN0Qix5QkFBeUIsR0FBRyxDQUFDLEVBQzdCLHFCQUFxQixHQUFHLENBQUMsRUFDekIsNEJBQTRCLEdBQUcsQ0FBQyxNQUNYLEVBQUU7SUFFekIsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsTUFBTSxFQUFFLFVBQVUsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUN0RCxJQUFJLEdBQUcsR0FBRyxDQUFDLENBQUM7SUFDWixJQUFJLEdBQUcsR0FBRyxDQUFDLENBQUM7SUFFWixJQUFJLEdBQUcsRUFBRSxDQUFDO1FBQ1IsSUFBSSx5QkFBeUIsRUFBRSxDQUFDO1lBQzlCLEdBQUc7Z0JBQ0QseUJBQXlCO29CQUN6QixDQUFDLEdBQUcsR0FBRyxtQkFBbUIsQ0FBQyxLQUFLLEVBQUUsVUFBVSxFQUFFLEVBQUUsZUFBZSxFQUFFLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQztZQUM1RSxHQUFHLElBQUkseUJBQXlCLENBQUM7UUFDbkMsQ0FBQztRQUVELElBQUkscUJBQXFCLEVBQUUsQ0FBQztZQUMxQixHQUFHLElBQUkscUJBQXFCLEdBQUcsZUFBZSxDQUFDLEtBQUssRUFBRSxVQUFVLEVBQUUsRUFBRSxlQUFlLEVBQUUsQ0FBQyxDQUFDO1lBQ3ZGLEdBQUcsSUFBSSxxQkFBcUIsQ0FBQztRQUMvQixDQUFDO1FBRUQsSUFBSSw0QkFBNEIsRUFBRSxDQUFDO1lBQ2pDLEdBQUc7Z0JBQ0QsNEJBQTRCO29CQUM1QixDQUFDLHNCQUFzQixDQUFDLEtBQUssRUFBRSxVQUFVLEVBQUUsRUFBRSxlQUFlLEVBQUUsQ0FBQyxDQUFDLE1BQU0sR0FBRyxHQUFHLENBQUMsQ0FBQztZQUNoRixHQUFHLElBQUksNEJBQTRCLENBQUM7UUFDdEMsQ0FBQztJQUNILENBQUM7SUFFRCxPQUFPLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQztBQUNuQyxDQUFDIn0=