generateVariations method

  1. @override
List<String> generateVariations(
  1. String word
)
override

Generates variations of a word for fuzzy matching

Implementation

@override
List<String> generateVariations(String word) {
  final variations = <String>{word};

  const typoSubstitutions = {
    'a': ['e'],
    'e': ['a'],
    'i': ['y'],
    'y': ['i'],
    's': ['z'],
    'z': ['s'],
    'o': ['u'],
    'u': ['o']
  };

  for (int i = 0; i < word.length; i++) {
    final char = word[i];
    if (typoSubstitutions.containsKey(char)) {
      for (var replacement in typoSubstitutions[char]!) {
        final variation = word.replaceRange(i, i + 1, replacement);
        variations.add(variation);
      }
    }
  }

  // Add plural/singular variations
  if (!word.endsWith('s') && word.length > 2) {
    variations.add('${word}s');
  }
  if (word.endsWith('s') && word.length > 1) {
    variations.add(word.substring(0, word.length - 1));
  }

  return variations.toList();
}