cockpitFuzzyTextSimilarity function
Implementation
double cockpitFuzzyTextSimilarity(String actual, String expected) {
final normalizedActual = _normalizeFuzzyText(actual);
final normalizedExpected = _normalizeFuzzyText(expected);
if (normalizedActual == normalizedExpected) return 1;
if (normalizedActual.isEmpty || normalizedExpected.isEmpty) return 0;
final actualRunes = normalizedActual.runes.toList(growable: false);
final expectedRunes = normalizedExpected.runes.toList(growable: false);
final fullSimilarity = _fuzzyRuneSimilarity(actualRunes, expectedRunes);
if (expectedRunes.length < 5 || actualRunes.length <= expectedRunes.length) {
return fullSimilarity;
}
final substringDistance = _fuzzySubstringDistance(actualRunes, expectedRunes);
final substringSimilarity = (1 - (substringDistance / expectedRunes.length))
.clamp(0, 1)
.toDouble();
return substringSimilarity > fullSimilarity
? substringSimilarity
: fullSimilarity;
}