jamoSimilarityPercentage static method

double jamoSimilarityPercentage(
  1. String s1,
  2. String s2, {
  3. bool replaceNumberToKorean = true,
  4. bool replaceSpecialCharToKorean = true,
  5. PhonemeCost? phonemeCost,
  6. List<SpecialCharToSpeech>? specialCharReplacementOptions,
})

Calculates the similarity percentage between two Korean strings based on decomposed phonemes.

Parameters:

  • s1 : The first Korean string.
  • s2 : The second Korean string.
  • replaceNumberToKorean : Whether to replace numeric characters with Korean representations.
  • replaceSpecialCharToKorean : Whether to replace special characters with their Korean equivalents based on provided options.
  • phonemeCost : Customized weights for different phonemes.
  • specialCharReplacementOptions : Options for replacing special characters.

Returns the similarity percentage between the two strings.

Implementation

static double jamoSimilarityPercentage(
  String s1,
  String s2, {
  bool replaceNumberToKorean = true,
  bool replaceSpecialCharToKorean = true,
  PhonemeCost? phonemeCost,
  List<SpecialCharToSpeech>? specialCharReplacementOptions,
}) {
  assert(
    !s1.containsEnglish || !s2.containsEnglish,
    'English should not be contained',
  );

  s1 = s1.replaceAll(' ', '');
  s2 = s2.replaceAll(' ', '');

  if (replaceNumberToKorean) {
    s1 = replaceNumberWithKorean(s1);
    s2 = replaceNumberWithKorean(s2);
  } else {
    s1 = s1.removeAllNumbers();
    s2 = s2.removeAllNumbers();
  }

  if (replaceSpecialCharToKorean) {
    specialCharReplacementOptions ??= commonSpecitalCharToSpeechOptions;

    s1 = replaceSpecialCharsWithKorean(s1,
        specialCharToSpeech: specialCharReplacementOptions);
    s2 = replaceSpecialCharsWithKorean(s2,
        specialCharToSpeech: specialCharReplacementOptions);
  } else {
    s1 = s1.removeAllSpecialCharsNotKorean();
    s2 = s2.removeAllSpecialCharsNotKorean();
  }

  final int maxLen = s1.length > s2.length ? s1.length : s2.length;
  final double distance = jamoLevenshteinDistance(
    s1,
    s2,
    phonemeCost: phonemeCost,
  );
  return ((maxLen - distance) / maxLen) * 100;
}