calculateSimilarity method
Calculates similarity score between two strings (0.0 to 1.0)
Implementation
@override
double calculateSimilarity(String str1, String str2) {
if (str1 == str2) return 1.0;
if (str1.isEmpty || str2.isEmpty) return 0.0;
final len1 = str1.length;
final len2 = str2.length;
final matrix = List.generate(len1 + 1, (_) => List.filled(len2 + 1, 0));
// Initialize first row and column
for (int i = 0; i <= len1; i++) {
matrix[i][0] = i;
}
for (int j = 0; j <= len2; j++) {
matrix[0][j] = j;
}
// Fill the matrix
for (int i = 1; i <= len1; i++) {
for (int j = 1; j <= len2; j++) {
final cost = str1[i - 1] == str2[j - 1] ? 0 : 1;
matrix[i][j] = [
matrix[i - 1][j] + 1, // deletion
matrix[i][j - 1] + 1, // insertion
matrix[i - 1][j - 1] + cost // substitution
].reduce((a, b) => a < b ? a : b);
}
}
final distance = matrix[len1][len2];
final maxLength = len1 > len2 ? len1 : len2;
return 1.0 - (distance / maxLength);
}