From 438b3f91cbdcc26ed95b1b5ca4bd2a5eff4115da Mon Sep 17 00:00:00 2001 From: Matthew Erispe Date: Wed, 16 Oct 2024 13:01:25 +0200 Subject: [PATCH 1/9] implement soundex similarity --- .../linker/backend/LinkerProbabilistic.java | 38 ++++++++++++++++--- 1 file changed, 33 insertions(+), 5 deletions(-) diff --git a/JeMPI_Apps/JeMPI_Linker/src/main/java/org/jembi/jempi/linker/backend/LinkerProbabilistic.java b/JeMPI_Apps/JeMPI_Linker/src/main/java/org/jembi/jempi/linker/backend/LinkerProbabilistic.java index e90b345be..c1bba655a 100644 --- a/JeMPI_Apps/JeMPI_Linker/src/main/java/org/jembi/jempi/linker/backend/LinkerProbabilistic.java +++ b/JeMPI_Apps/JeMPI_Linker/src/main/java/org/jembi/jempi/linker/backend/LinkerProbabilistic.java @@ -1,6 +1,7 @@ package org.jembi.jempi.linker.backend; import com.fasterxml.jackson.core.JsonProcessingException; +import org.apache.commons.codec.language.Soundex; import org.apache.commons.lang3.StringUtils; import org.apache.commons.text.similarity.JaccardSimilarity; import org.apache.commons.text.similarity.JaroWinklerSimilarity; @@ -27,6 +28,7 @@ public final class LinkerProbabilistic { static final JaccardSimilarity JACCARD_SIMILARITY = new JaccardSimilarity(); static final JaroSimilarity JARO_SIMILARITY = new JaroSimilarity(); static final ExactSimilarity EXACT_SIMILARITY = new ExactSimilarity(); + static final SoundexSimilarity SOUNDEX_SIMILARITY = new SoundexSimilarity(); private static final int METRIC_MIN = 0; private static final int METRIC_MAX = 1; private static final int METRIC_SCORE = 2; @@ -73,10 +75,17 @@ static List toLinkProbabilisticFieldList( } static SimilarityScore getSimilarityFunction(final String func) { - if ("JARO_WINKLER_SIMILARITY".equals(func)) { - return JARO_WINKLER_SIMILARITY; - } else { - return JACCARD_SIMILARITY; + switch (func) { + case "JARO_WINKLER_SIMILARITY": + return JARO_WINKLER_SIMILARITY; + case "JARO_SIMILARITY": + return JARO_SIMILARITY; + case "JACCARD_SIMILARITY": + return JACCARD_SIMILARITY; + case "SOUNDEX_SIMILARITY": + return SOUNDEX_SIMILARITY; + default: + return EXACT_SIMILARITY; } } @@ -268,7 +277,7 @@ public Double apply( if (StringUtils.isEmpty(left) || StringUtils.isEmpty(right)) { return 0.5; } - // assert - we have 2 non-empty strings + return StringUtils.equals(left, right) ? 1.0 : 0.0; @@ -276,6 +285,25 @@ public Double apply( } + static class SoundexSimilarity implements SimilarityScore { + + private final Soundex soundex = new Soundex(); + + @Override + public Double apply( + final CharSequence left, + final CharSequence right) { + if (StringUtils.isEmpty(left) || StringUtils.isEmpty(right)) { + return 0.5; + } + + return StringUtils.equals(soundex.soundex((String) left), soundex.soundex((String) right)) + ? 1.0 + : 0.0; + } + + } + static class JaroSimilarity implements SimilarityScore { @Override From 9e5efbfea899a711d039b0474fde2a31b3738a56 Mon Sep 17 00:00:00 2001 From: Matthew Erispe Date: Wed, 16 Oct 2024 13:53:30 +0200 Subject: [PATCH 2/9] refactor --- .../linker/backend/LinkerProbabilistic.java | 28 ++++++++++++------- 1 file changed, 18 insertions(+), 10 deletions(-) diff --git a/JeMPI_Apps/JeMPI_Linker/src/main/java/org/jembi/jempi/linker/backend/LinkerProbabilistic.java b/JeMPI_Apps/JeMPI_Linker/src/main/java/org/jembi/jempi/linker/backend/LinkerProbabilistic.java index c1bba655a..125c31b26 100644 --- a/JeMPI_Apps/JeMPI_Linker/src/main/java/org/jembi/jempi/linker/backend/LinkerProbabilistic.java +++ b/JeMPI_Apps/JeMPI_Linker/src/main/java/org/jembi/jempi/linker/backend/LinkerProbabilistic.java @@ -38,15 +38,15 @@ public final class LinkerProbabilistic { private static final float MISSING_PENALTY = 0.925F; static List currentProbabilisticLinkFields = LINKER_CONFIG.probabilisticLinkFields .stream() - .map(f -> new ProbabilisticField(getSimilarityFunction(f.similarityScore()), f.comparisonLevels(), f.m(), f.u())) + .map(f -> new ProbabilisticField(getSimilarityFunction(SimilarityFunctionName.valueOf(f.similarityScore())), f.comparisonLevels(), f.m(), f.u())) .toList(); static List currentProbabilisticValidateFields = LINKER_CONFIG.probabilisticValidateFields .stream() - .map(f -> new ProbabilisticField(getSimilarityFunction(f.similarityScore()), f.comparisonLevels(), f.m(), f.u())) + .map(f -> new ProbabilisticField(getSimilarityFunction(SimilarityFunctionName.valueOf(f.similarityScore())), f.comparisonLevels(), f.m(), f.u())) .toList(); static List currentProbabilisticMatchFields = LINKER_CONFIG.probabilisticMatchNotificationFields .stream() - .map(f -> new ProbabilisticField(getSimilarityFunction(f.similarityScore()), f.comparisonLevels(), f.m(), f.u())) + .map(f -> new ProbabilisticField(getSimilarityFunction(SimilarityFunctionName.valueOf(f.similarityScore())), f.comparisonLevels(), f.m(), f.u())) .toList(); static List updatedProbabilisticLinkFields = null; @@ -67,22 +67,30 @@ static List toLinkProbabilisticFieldList( final var list = new ArrayList(); for (int i = 0; i < mu.size(); i++) { list.add(new ProbabilisticField( - getSimilarityFunction(probabilisticMetaData.get(i).similarityScore()), + getSimilarityFunction(SimilarityFunctionName.valueOf(probabilisticMetaData.get(i).similarityScore())), probabilisticMetaData.get(i).comparisonLevels(), mu.get(i).m(), mu.get(i).u())); } return list; } - static SimilarityScore getSimilarityFunction(final String func) { + public enum SimilarityFunctionName { + JARO_WINKLER_SIMILARITY, + JARO_SIMILARITY, + JACCARD_SIMILARITY, + SOUNDEX_SIMILARITY, + EXACT_SIMILARITY + } + + static SimilarityScore getSimilarityFunction(final SimilarityFunctionName func) { switch (func) { - case "JARO_WINKLER_SIMILARITY": + case JARO_WINKLER_SIMILARITY: return JARO_WINKLER_SIMILARITY; - case "JARO_SIMILARITY": + case JARO_SIMILARITY: return JARO_SIMILARITY; - case "JACCARD_SIMILARITY": + case JACCARD_SIMILARITY: return JACCARD_SIMILARITY; - case "SOUNDEX_SIMILARITY": + case SOUNDEX_SIMILARITY: return SOUNDEX_SIMILARITY; default: return EXACT_SIMILARITY; @@ -297,7 +305,7 @@ public Double apply( return 0.5; } - return StringUtils.equals(soundex.soundex((String) left), soundex.soundex((String) right)) + return StringUtils.equals(soundex.soundex(left.toString()), soundex.soundex(right.toString())) ? 1.0 : 0.0; } From fe8c0015ef0d5a8c982aaebe6f74816c05690d55 Mon Sep 17 00:00:00 2001 From: Matthew Erispe Date: Thu, 17 Oct 2024 11:20:01 +0200 Subject: [PATCH 3/9] create levenshtein similarity function for literal distance and as a percentage (inverted) --- .../linker/backend/LinkerProbabilistic.java | 52 ++++++++++++++++++- 1 file changed, 51 insertions(+), 1 deletion(-) diff --git a/JeMPI_Apps/JeMPI_Linker/src/main/java/org/jembi/jempi/linker/backend/LinkerProbabilistic.java b/JeMPI_Apps/JeMPI_Linker/src/main/java/org/jembi/jempi/linker/backend/LinkerProbabilistic.java index 125c31b26..66948478a 100644 --- a/JeMPI_Apps/JeMPI_Linker/src/main/java/org/jembi/jempi/linker/backend/LinkerProbabilistic.java +++ b/JeMPI_Apps/JeMPI_Linker/src/main/java/org/jembi/jempi/linker/backend/LinkerProbabilistic.java @@ -5,6 +5,7 @@ import org.apache.commons.lang3.StringUtils; import org.apache.commons.text.similarity.JaccardSimilarity; import org.apache.commons.text.similarity.JaroWinklerSimilarity; +import org.apache.commons.text.similarity.LevenshteinDistance; import org.apache.commons.text.similarity.SimilarityScore; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; @@ -29,6 +30,8 @@ public final class LinkerProbabilistic { static final JaroSimilarity JARO_SIMILARITY = new JaroSimilarity(); static final ExactSimilarity EXACT_SIMILARITY = new ExactSimilarity(); static final SoundexSimilarity SOUNDEX_SIMILARITY = new SoundexSimilarity(); + static final LevenshteinSimilarity LEVENSHTEIN_SIMILARITY = new LevenshteinSimilarity(); + static final LevenshteinSimilarityPercentage LEVENSHTEIN_SIMILARITY_PERCENTAGE = new LevenshteinSimilarityPercentage(); private static final int METRIC_MIN = 0; private static final int METRIC_MAX = 1; private static final int METRIC_SCORE = 2; @@ -79,7 +82,9 @@ public enum SimilarityFunctionName { JARO_SIMILARITY, JACCARD_SIMILARITY, SOUNDEX_SIMILARITY, - EXACT_SIMILARITY + EXACT_SIMILARITY, + LEVENSHTEIN_SIMILARITY, + LEVENSHTEIN_SIMILARITY_PERCENTAGE } static SimilarityScore getSimilarityFunction(final SimilarityFunctionName func) { @@ -92,6 +97,10 @@ static SimilarityScore getSimilarityFunction(final SimilarityFunctionNam return JACCARD_SIMILARITY; case SOUNDEX_SIMILARITY: return SOUNDEX_SIMILARITY; + case LEVENSHTEIN_SIMILARITY: + return LEVENSHTEIN_SIMILARITY; + case LEVENSHTEIN_SIMILARITY_PERCENTAGE: + return LEVENSHTEIN_SIMILARITY_PERCENTAGE; default: return EXACT_SIMILARITY; } @@ -312,6 +321,47 @@ public Double apply( } + static class LevenshteinSimilarityPercentage implements SimilarityScore { + + private final LevenshteinDistance levenshteinDistance = new LevenshteinDistance(); + + @Override + public Double apply( + final CharSequence left, + final CharSequence right) { + if (StringUtils.isEmpty(left) || StringUtils.isEmpty(right)) { + return 0.5; + } + + int maxLength = Math.max(left.length(), right.length()); + double levenshteinDistanceValue = levenshteinDistance.apply(left, right); + + // Invert the percentage value + double percentage = (levenshteinDistanceValue / maxLength) * 100; + double invertedPercentage = 100 - percentage; + + return invertedPercentage; + } + + } + + static class LevenshteinSimilarity implements SimilarityScore { + + private final LevenshteinDistance levenshteinDistance = new LevenshteinDistance(); + + @Override + public Double apply( + final CharSequence left, + final CharSequence right) { + if (StringUtils.isEmpty(left) || StringUtils.isEmpty(right)) { + return 0.5; + } + + return Double.valueOf(levenshteinDistance.apply(left, right)); + } + + } + static class JaroSimilarity implements SimilarityScore { @Override From b9aa5c712d2aca33ebcf676dfa6e8938fbaa3927 Mon Sep 17 00:00:00 2001 From: MatthewErispe Date: Thu, 17 Oct 2024 11:33:23 +0200 Subject: [PATCH 4/9] Update JeMPI_Apps/JeMPI_Linker/src/main/java/org/jembi/jempi/linker/backend/LinkerProbabilistic.java Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com> --- .../org/jembi/jempi/linker/backend/LinkerProbabilistic.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/JeMPI_Apps/JeMPI_Linker/src/main/java/org/jembi/jempi/linker/backend/LinkerProbabilistic.java b/JeMPI_Apps/JeMPI_Linker/src/main/java/org/jembi/jempi/linker/backend/LinkerProbabilistic.java index 66948478a..a7f08ce09 100644 --- a/JeMPI_Apps/JeMPI_Linker/src/main/java/org/jembi/jempi/linker/backend/LinkerProbabilistic.java +++ b/JeMPI_Apps/JeMPI_Linker/src/main/java/org/jembi/jempi/linker/backend/LinkerProbabilistic.java @@ -340,7 +340,7 @@ public Double apply( double percentage = (levenshteinDistanceValue / maxLength) * 100; double invertedPercentage = 100 - percentage; - return invertedPercentage; + return invertedPercentage / 100.0; } } From 57bab5a3196eda254cf987208842760bbac16b21 Mon Sep 17 00:00:00 2001 From: MatthewErispe Date: Thu, 17 Oct 2024 11:45:12 +0200 Subject: [PATCH 5/9] Update JeMPI_Apps/JeMPI_Linker/src/main/java/org/jembi/jempi/linker/backend/LinkerProbabilistic.java Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com> --- .../linker/backend/LinkerProbabilistic.java | 27 +++++++++---------- 1 file changed, 12 insertions(+), 15 deletions(-) diff --git a/JeMPI_Apps/JeMPI_Linker/src/main/java/org/jembi/jempi/linker/backend/LinkerProbabilistic.java b/JeMPI_Apps/JeMPI_Linker/src/main/java/org/jembi/jempi/linker/backend/LinkerProbabilistic.java index a7f08ce09..303236d1e 100644 --- a/JeMPI_Apps/JeMPI_Linker/src/main/java/org/jembi/jempi/linker/backend/LinkerProbabilistic.java +++ b/JeMPI_Apps/JeMPI_Linker/src/main/java/org/jembi/jempi/linker/backend/LinkerProbabilistic.java @@ -87,22 +87,19 @@ public enum SimilarityFunctionName { LEVENSHTEIN_SIMILARITY_PERCENTAGE } + private static final Map> SIMILARITY_FUNCTION_MAP = Map.of( + SimilarityFunctionName.JARO_WINKLER_SIMILARITY, JARO_WINKLER_SIMILARITY, + SimilarityFunctionName.JARO_SIMILARITY, JARO_SIMILARITY, + SimilarityFunctionName.JACCARD_SIMILARITY, JACCARD_SIMILARITY, + SimilarityFunctionName.SOUNDEX_SIMILARITY, SOUNDEX_SIMILARITY, + SimilarityFunctionName.LEVENSHTEIN_SIMILARITY, LEVENSHTEIN_SIMILARITY, + SimilarityFunctionName.LEVENSHTEIN_SIMILARITY_PERCENTAGE, LEVENSHTEIN_SIMILARITY_PERCENTAGE, + SimilarityFunctionName.EXACT_SIMILARITY, EXACT_SIMILARITY + ); + static SimilarityScore getSimilarityFunction(final SimilarityFunctionName func) { - switch (func) { - case JARO_WINKLER_SIMILARITY: - return JARO_WINKLER_SIMILARITY; - case JARO_SIMILARITY: - return JARO_SIMILARITY; - case JACCARD_SIMILARITY: - return JACCARD_SIMILARITY; - case SOUNDEX_SIMILARITY: - return SOUNDEX_SIMILARITY; - case LEVENSHTEIN_SIMILARITY: - return LEVENSHTEIN_SIMILARITY; - case LEVENSHTEIN_SIMILARITY_PERCENTAGE: - return LEVENSHTEIN_SIMILARITY_PERCENTAGE; - default: - return EXACT_SIMILARITY; + return SIMILARITY_FUNCTION_MAP.getOrDefault(func, EXACT_SIMILARITY); + } } } From 8837eb99e48def13a0ee11daff7283d950a9bdbb Mon Sep 17 00:00:00 2001 From: MatthewErispe Date: Thu, 17 Oct 2024 11:46:06 +0200 Subject: [PATCH 6/9] Update JeMPI_Apps/JeMPI_Linker/src/main/java/org/jembi/jempi/linker/backend/LinkerProbabilistic.java Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com> --- .../org/jembi/jempi/linker/backend/LinkerProbabilistic.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/JeMPI_Apps/JeMPI_Linker/src/main/java/org/jembi/jempi/linker/backend/LinkerProbabilistic.java b/JeMPI_Apps/JeMPI_Linker/src/main/java/org/jembi/jempi/linker/backend/LinkerProbabilistic.java index 303236d1e..38b83c02b 100644 --- a/JeMPI_Apps/JeMPI_Linker/src/main/java/org/jembi/jempi/linker/backend/LinkerProbabilistic.java +++ b/JeMPI_Apps/JeMPI_Linker/src/main/java/org/jembi/jempi/linker/backend/LinkerProbabilistic.java @@ -308,7 +308,7 @@ public Double apply( final CharSequence left, final CharSequence right) { if (StringUtils.isEmpty(left) || StringUtils.isEmpty(right)) { - return 0.5; + return 0.0; } return StringUtils.equals(soundex.soundex(left.toString()), soundex.soundex(right.toString())) From 345e29e4b1764907f2a428ed14eac45a72a5aac1 Mon Sep 17 00:00:00 2001 From: Matthew Erispe Date: Thu, 17 Oct 2024 11:54:00 +0200 Subject: [PATCH 7/9] Add missing reference --- .../jembi/jempi/linker/backend/LinkerProbabilistic.java | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/JeMPI_Apps/JeMPI_Linker/src/main/java/org/jembi/jempi/linker/backend/LinkerProbabilistic.java b/JeMPI_Apps/JeMPI_Linker/src/main/java/org/jembi/jempi/linker/backend/LinkerProbabilistic.java index 38b83c02b..cd45f9d41 100644 --- a/JeMPI_Apps/JeMPI_Linker/src/main/java/org/jembi/jempi/linker/backend/LinkerProbabilistic.java +++ b/JeMPI_Apps/JeMPI_Linker/src/main/java/org/jembi/jempi/linker/backend/LinkerProbabilistic.java @@ -17,6 +17,7 @@ import java.util.ArrayList; import java.util.Collections; import java.util.List; +import java.util.Map; import java.util.stream.IntStream; import static java.lang.Math.abs; @@ -95,13 +96,11 @@ public enum SimilarityFunctionName { SimilarityFunctionName.LEVENSHTEIN_SIMILARITY, LEVENSHTEIN_SIMILARITY, SimilarityFunctionName.LEVENSHTEIN_SIMILARITY_PERCENTAGE, LEVENSHTEIN_SIMILARITY_PERCENTAGE, SimilarityFunctionName.EXACT_SIMILARITY, EXACT_SIMILARITY - ); + ); static SimilarityScore getSimilarityFunction(final SimilarityFunctionName func) { return SIMILARITY_FUNCTION_MAP.getOrDefault(func, EXACT_SIMILARITY); } - } - } public static void updateMU(final MUPacket mu) { @@ -327,7 +326,7 @@ public Double apply( final CharSequence left, final CharSequence right) { if (StringUtils.isEmpty(left) || StringUtils.isEmpty(right)) { - return 0.5; + return 0.0; } int maxLength = Math.max(left.length(), right.length()); From 7fa89549ee25e784fa8e22ba0941ceb8a9e8e349 Mon Sep 17 00:00:00 2001 From: Matthew Erispe Date: Thu, 17 Oct 2024 12:56:36 +0200 Subject: [PATCH 8/9] remove levenshtein similarity literal --- .../linker/backend/LinkerProbabilistic.java | 20 ------------------- 1 file changed, 20 deletions(-) diff --git a/JeMPI_Apps/JeMPI_Linker/src/main/java/org/jembi/jempi/linker/backend/LinkerProbabilistic.java b/JeMPI_Apps/JeMPI_Linker/src/main/java/org/jembi/jempi/linker/backend/LinkerProbabilistic.java index cd45f9d41..d8da6061f 100644 --- a/JeMPI_Apps/JeMPI_Linker/src/main/java/org/jembi/jempi/linker/backend/LinkerProbabilistic.java +++ b/JeMPI_Apps/JeMPI_Linker/src/main/java/org/jembi/jempi/linker/backend/LinkerProbabilistic.java @@ -31,7 +31,6 @@ public final class LinkerProbabilistic { static final JaroSimilarity JARO_SIMILARITY = new JaroSimilarity(); static final ExactSimilarity EXACT_SIMILARITY = new ExactSimilarity(); static final SoundexSimilarity SOUNDEX_SIMILARITY = new SoundexSimilarity(); - static final LevenshteinSimilarity LEVENSHTEIN_SIMILARITY = new LevenshteinSimilarity(); static final LevenshteinSimilarityPercentage LEVENSHTEIN_SIMILARITY_PERCENTAGE = new LevenshteinSimilarityPercentage(); private static final int METRIC_MIN = 0; private static final int METRIC_MAX = 1; @@ -84,7 +83,6 @@ public enum SimilarityFunctionName { JACCARD_SIMILARITY, SOUNDEX_SIMILARITY, EXACT_SIMILARITY, - LEVENSHTEIN_SIMILARITY, LEVENSHTEIN_SIMILARITY_PERCENTAGE } @@ -93,7 +91,6 @@ public enum SimilarityFunctionName { SimilarityFunctionName.JARO_SIMILARITY, JARO_SIMILARITY, SimilarityFunctionName.JACCARD_SIMILARITY, JACCARD_SIMILARITY, SimilarityFunctionName.SOUNDEX_SIMILARITY, SOUNDEX_SIMILARITY, - SimilarityFunctionName.LEVENSHTEIN_SIMILARITY, LEVENSHTEIN_SIMILARITY, SimilarityFunctionName.LEVENSHTEIN_SIMILARITY_PERCENTAGE, LEVENSHTEIN_SIMILARITY_PERCENTAGE, SimilarityFunctionName.EXACT_SIMILARITY, EXACT_SIMILARITY ); @@ -341,23 +338,6 @@ public Double apply( } - static class LevenshteinSimilarity implements SimilarityScore { - - private final LevenshteinDistance levenshteinDistance = new LevenshteinDistance(); - - @Override - public Double apply( - final CharSequence left, - final CharSequence right) { - if (StringUtils.isEmpty(left) || StringUtils.isEmpty(right)) { - return 0.5; - } - - return Double.valueOf(levenshteinDistance.apply(left, right)); - } - - } - static class JaroSimilarity implements SimilarityScore { @Override From 4d97e1dc1e5c44e16d3d7a64f97e7bde58df7cbd Mon Sep 17 00:00:00 2001 From: Matthew Erispe Date: Thu, 17 Oct 2024 13:59:14 +0200 Subject: [PATCH 9/9] revert map similarity function logic --- .../linker/backend/LinkerProbabilistic.java | 25 +++++++++++-------- 1 file changed, 14 insertions(+), 11 deletions(-) diff --git a/JeMPI_Apps/JeMPI_Linker/src/main/java/org/jembi/jempi/linker/backend/LinkerProbabilistic.java b/JeMPI_Apps/JeMPI_Linker/src/main/java/org/jembi/jempi/linker/backend/LinkerProbabilistic.java index d8da6061f..fe4324522 100644 --- a/JeMPI_Apps/JeMPI_Linker/src/main/java/org/jembi/jempi/linker/backend/LinkerProbabilistic.java +++ b/JeMPI_Apps/JeMPI_Linker/src/main/java/org/jembi/jempi/linker/backend/LinkerProbabilistic.java @@ -17,7 +17,6 @@ import java.util.ArrayList; import java.util.Collections; import java.util.List; -import java.util.Map; import java.util.stream.IntStream; import static java.lang.Math.abs; @@ -86,17 +85,21 @@ public enum SimilarityFunctionName { LEVENSHTEIN_SIMILARITY_PERCENTAGE } - private static final Map> SIMILARITY_FUNCTION_MAP = Map.of( - SimilarityFunctionName.JARO_WINKLER_SIMILARITY, JARO_WINKLER_SIMILARITY, - SimilarityFunctionName.JARO_SIMILARITY, JARO_SIMILARITY, - SimilarityFunctionName.JACCARD_SIMILARITY, JACCARD_SIMILARITY, - SimilarityFunctionName.SOUNDEX_SIMILARITY, SOUNDEX_SIMILARITY, - SimilarityFunctionName.LEVENSHTEIN_SIMILARITY_PERCENTAGE, LEVENSHTEIN_SIMILARITY_PERCENTAGE, - SimilarityFunctionName.EXACT_SIMILARITY, EXACT_SIMILARITY - ); - static SimilarityScore getSimilarityFunction(final SimilarityFunctionName func) { - return SIMILARITY_FUNCTION_MAP.getOrDefault(func, EXACT_SIMILARITY); + switch (func) { + case JARO_WINKLER_SIMILARITY: + return JARO_WINKLER_SIMILARITY; + case JARO_SIMILARITY: + return JARO_SIMILARITY; + case JACCARD_SIMILARITY: + return JACCARD_SIMILARITY; + case SOUNDEX_SIMILARITY: + return SOUNDEX_SIMILARITY; + case LEVENSHTEIN_SIMILARITY_PERCENTAGE: + return LEVENSHTEIN_SIMILARITY_PERCENTAGE; + default: + return EXACT_SIMILARITY; + } } public static void updateMU(final MUPacket mu) {