jamoSimilarityPercentage static method
double
jamoSimilarityPercentage(
- String s1,
- String s2, {
- bool replaceNumberToKorean = true,
- bool replaceSpecialCharToKorean = true,
- PhonemeCost? phonemeCost,
- 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;
}