Author: ggregory Date: Tue Aug 9 01:16:09 2011 New Revision: 1155182 URL: http://svn.apache.org/viewvc?rev=1155182&view=rev Log: [CODEC-125] Implement a Beider-Morse phonetic matching codec. Applied patch https://issues.apache.org/jira/secure/attachment/12489767/comparator.patch
Modified: commons/proper/codec/trunk/src/java/org/apache/commons/codec/language/bm/PhoneticEngine.java commons/proper/codec/trunk/src/java/org/apache/commons/codec/language/bm/Rule.java commons/proper/codec/trunk/src/test/org/apache/commons/codec/language/bm/RuleTest.java Modified: commons/proper/codec/trunk/src/java/org/apache/commons/codec/language/bm/PhoneticEngine.java URL: http://svn.apache.org/viewvc/commons/proper/codec/trunk/src/java/org/apache/commons/codec/language/bm/PhoneticEngine.java?rev=1155182&r1=1155181&r2=1155182&view=diff ============================================================================== --- commons/proper/codec/trunk/src/java/org/apache/commons/codec/language/bm/PhoneticEngine.java (original) +++ commons/proper/codec/trunk/src/java/org/apache/commons/codec/language/bm/PhoneticEngine.java Tue Aug 9 01:16:09 2011 @@ -251,7 +251,7 @@ public class PhoneticEngine { return phonemeBuilder; } - Set<Rule.Phoneme> phonemes = new TreeSet<Rule.Phoneme>(); + Set<Rule.Phoneme> phonemes = new TreeSet<Rule.Phoneme>(Rule.Phoneme.COMPARATOR); for (Rule.Phoneme phoneme : phonemeBuilder.getPhonemes()) { PhonemeBuilder subBuilder = PhonemeBuilder.empty(phoneme.getLanguages()); Modified: commons/proper/codec/trunk/src/java/org/apache/commons/codec/language/bm/Rule.java URL: http://svn.apache.org/viewvc/commons/proper/codec/trunk/src/java/org/apache/commons/codec/language/bm/Rule.java?rev=1155182&r1=1155181&r2=1155182&view=diff ============================================================================== --- commons/proper/codec/trunk/src/java/org/apache/commons/codec/language/bm/Rule.java (original) +++ commons/proper/codec/trunk/src/java/org/apache/commons/codec/language/bm/Rule.java Tue Aug 9 01:16:09 2011 @@ -21,6 +21,7 @@ import java.io.InputStream; import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; +import java.util.Comparator; import java.util.EnumMap; import java.util.HashMap; import java.util.HashSet; @@ -80,7 +81,26 @@ import java.util.regex.Pattern; */ public class Rule { - public static final class Phoneme implements PhonemeExpr, Comparable<Phoneme> { + public static final class Phoneme implements PhonemeExpr { + public static final Comparator<Phoneme> COMPARATOR = new Comparator<Phoneme>() { + public int compare(Phoneme o1, Phoneme o2) { + for (int i = 0; i < o1.phonemeText.length(); i++) { + if (i >= o2.phonemeText.length()) { + return +1; + } + int c = o1.phonemeText.charAt(i) - o2.phonemeText.charAt(i); + if (c != 0) { + return c; + } + } + + if (o1.phonemeText.length() < o2.phonemeText.length()) { + return -1; + } + + return 0; + } + }; private final CharSequence phonemeText; private final Languages.LanguageSet languages; @@ -94,24 +114,6 @@ public class Rule { return new Phoneme(this.phonemeText.toString() + str.toString(), this.languages); } - public int compareTo(Phoneme o) { - for (int i = 0; i < phonemeText.length(); i++) { - if (i >= o.phonemeText.length()) { - return +1; - } - int c = phonemeText.charAt(i) - o.phonemeText.charAt(i); - if (c != 0) { - return c; - } - } - - if (phonemeText.length() < o.phonemeText.length()) { - return -1; - } - - return 0; - } - public Languages.LanguageSet getLanguages() { return this.languages; } Modified: commons/proper/codec/trunk/src/test/org/apache/commons/codec/language/bm/RuleTest.java URL: http://svn.apache.org/viewvc/commons/proper/codec/trunk/src/test/org/apache/commons/codec/language/bm/RuleTest.java?rev=1155182&r1=1155181&r2=1155182&view=diff ============================================================================== --- commons/proper/codec/trunk/src/test/org/apache/commons/codec/language/bm/RuleTest.java (original) +++ commons/proper/codec/trunk/src/test/org/apache/commons/codec/language/bm/RuleTest.java Tue Aug 9 01:16:09 2011 @@ -63,7 +63,7 @@ public class RuleTest { for (Rule.Phoneme[] phs : makePhonemes()) { for (int i = 0; i < phs.length; i++) { for (int j = i + 1; j < phs.length; j++) { - int c = phs[i].compareTo(phs[j]); + int c = Rule.Phoneme.COMPARATOR.compare(phs[i], phs[j]); assertThat("Comparing " + phs[i].getPhonemeText() + " to " + phs[j].getPhonemeText() + " should be negative", c, new NegativeIntegerBaseMatcher()); @@ -76,7 +76,8 @@ public class RuleTest { public void phonemeComparedToSelfIsZero() { for (Rule.Phoneme[] phs : makePhonemes()) { for (Rule.Phoneme ph : phs) { - assertEquals("Phoneme compared to itself should be zero: " + ph.getPhonemeText(), 0, ph.compareTo(ph)); + assertEquals("Phoneme compared to itself should be zero: " + ph.getPhonemeText(), 0, + Rule.Phoneme.COMPARATOR.compare(ph, ph)); } } }