calculateSimilarity method

  1. @override
double calculateSimilarity(
  1. String str1,
  2. String str2
)
override

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);
}