diff options
author | Rocky Madden <git@rockymadden.com> | 2012-11-20 13:43:41 -0700 |
---|---|---|
committer | Rocky Madden <git@rockymadden.com> | 2012-11-20 13:43:41 -0700 |
commit | c92a5365eeb76ffc3d41015650b92e58fde094ce (patch) | |
tree | 192430e732b3d0a9ff12283043a734bea338eeeb | |
parent | c20f08049db4ef5f5fc8d3ab04c42fa8ab5375be (diff) | |
download | stringmetric-c92a5365eeb76ffc3d41015650b92e58fde094ce.tar.gz stringmetric-c92a5365eeb76ffc3d41015650b92e58fde094ce.tar.bz2 stringmetric-c92a5365eeb76ffc3d41015650b92e58fde094ce.zip |
More idiomatic handling of Option.
18 files changed, 41 insertions, 80 deletions
diff --git a/core/source/core/scala/org/hashtree/stringmetric/filter/AsciiControlOnlyStringFilter.scala b/core/source/core/scala/org/hashtree/stringmetric/filter/AsciiControlOnlyStringFilter.scala index e84b3bd..c3fd442 100755 --- a/core/source/core/scala/org/hashtree/stringmetric/filter/AsciiControlOnlyStringFilter.scala +++ b/core/source/core/scala/org/hashtree/stringmetric/filter/AsciiControlOnlyStringFilter.scala @@ -6,9 +6,7 @@ import org.hashtree.stringmetric.StringFilter trait AsciiControlOnlyStringFilter extends StringFilter { abstract override def filter(charArray: Array[Char]): Array[Char] = super.filter( - charArray.filter { c => - (c <= 31 || c == 127) - } + charArray.filter(c => (c <= 31 || c == 127)) ) abstract override def filter(string: String): String = filter(string.toCharArray).mkString diff --git a/core/source/core/scala/org/hashtree/stringmetric/filter/AsciiControlStringFilter.scala b/core/source/core/scala/org/hashtree/stringmetric/filter/AsciiControlStringFilter.scala index f9cb6a6..8fdab7e 100755 --- a/core/source/core/scala/org/hashtree/stringmetric/filter/AsciiControlStringFilter.scala +++ b/core/source/core/scala/org/hashtree/stringmetric/filter/AsciiControlStringFilter.scala @@ -6,9 +6,7 @@ import org.hashtree.stringmetric.StringFilter trait AsciiControlStringFilter extends StringFilter { abstract override def filter(charArray: Array[Char]): Array[Char] = super.filter( - charArray.filter { c => - !(c <= 31 || c == 127) - } + charArray.filter(c => !(c <= 31 || c == 127)) ) abstract override def filter(string: String): String = filter(string.toCharArray).mkString diff --git a/core/source/core/scala/org/hashtree/stringmetric/filter/AsciiLetterCaseStringFilter.scala b/core/source/core/scala/org/hashtree/stringmetric/filter/AsciiLetterCaseStringFilter.scala index a1be6bb..d041ded 100755 --- a/core/source/core/scala/org/hashtree/stringmetric/filter/AsciiLetterCaseStringFilter.scala +++ b/core/source/core/scala/org/hashtree/stringmetric/filter/AsciiLetterCaseStringFilter.scala @@ -6,9 +6,7 @@ import org.hashtree.stringmetric.StringFilter trait AsciiLetterCaseStringFilter extends StringFilter { abstract override def filter(charArray: Array[Char]): Array[Char] = super.filter( - charArray.map { c => - if (c >= 65 && c <= 90) (c + 32).toChar else c - } + charArray.map(c => if (c >= 65 && c <= 90) (c + 32).toChar else c) ) abstract override def filter(string: String): String = filter(string.toCharArray).mkString diff --git a/core/source/core/scala/org/hashtree/stringmetric/filter/AsciiLetterNumberOnlyStringFilter.scala b/core/source/core/scala/org/hashtree/stringmetric/filter/AsciiLetterNumberOnlyStringFilter.scala index 4cd4ea0..595c95c 100755 --- a/core/source/core/scala/org/hashtree/stringmetric/filter/AsciiLetterNumberOnlyStringFilter.scala +++ b/core/source/core/scala/org/hashtree/stringmetric/filter/AsciiLetterNumberOnlyStringFilter.scala @@ -6,9 +6,9 @@ import org.hashtree.stringmetric.StringFilter trait AsciiLetterNumberOnlyStringFilter extends StringFilter { abstract override def filter(charArray: Array[Char]): Array[Char] = super.filter( - charArray.filter { c => + charArray.filter(c => ((c >= 48 && c <= 57 ) || (c >= 65 && c <= 90 ) || (c >= 97 && c <= 122)) - } + ) ) abstract override def filter(string: String): String = filter(string.toCharArray).mkString diff --git a/core/source/core/scala/org/hashtree/stringmetric/filter/AsciiLetterNumberStringFilter.scala b/core/source/core/scala/org/hashtree/stringmetric/filter/AsciiLetterNumberStringFilter.scala index 05e477c..576b56e 100755 --- a/core/source/core/scala/org/hashtree/stringmetric/filter/AsciiLetterNumberStringFilter.scala +++ b/core/source/core/scala/org/hashtree/stringmetric/filter/AsciiLetterNumberStringFilter.scala @@ -6,9 +6,9 @@ import org.hashtree.stringmetric.StringFilter trait AsciiLetterNumberStringFilter extends StringFilter { abstract override def filter(charArray: Array[Char]): Array[Char] = super.filter( - charArray.filter { c => + charArray.filter(c => !((c >= 48 && c <= 57 ) || (c >= 65 && c <= 90 ) || (c >= 97 && c <= 122)) - } + ) ) abstract override def filter(string: String): String = filter(string.toCharArray).mkString diff --git a/core/source/core/scala/org/hashtree/stringmetric/filter/AsciiLetterOnlyStringFilter.scala b/core/source/core/scala/org/hashtree/stringmetric/filter/AsciiLetterOnlyStringFilter.scala index c259126..ad38f5d 100755 --- a/core/source/core/scala/org/hashtree/stringmetric/filter/AsciiLetterOnlyStringFilter.scala +++ b/core/source/core/scala/org/hashtree/stringmetric/filter/AsciiLetterOnlyStringFilter.scala @@ -6,9 +6,7 @@ import org.hashtree.stringmetric.StringFilter trait AsciiLetterOnlyStringFilter extends StringFilter { abstract override def filter(charArray: Array[Char]): Array[Char] = super.filter( - charArray.filter { c => - ((c >= 65 && c <= 90 ) || (c >= 97 && c <= 122)) - } + charArray.filter(c => ((c >= 65 && c <= 90 ) || (c >= 97 && c <= 122))) ) abstract override def filter(string: String): String = filter(string.toCharArray).mkString diff --git a/core/source/core/scala/org/hashtree/stringmetric/filter/AsciiLetterStringFilter.scala b/core/source/core/scala/org/hashtree/stringmetric/filter/AsciiLetterStringFilter.scala index 4942f26..456e818 100755 --- a/core/source/core/scala/org/hashtree/stringmetric/filter/AsciiLetterStringFilter.scala +++ b/core/source/core/scala/org/hashtree/stringmetric/filter/AsciiLetterStringFilter.scala @@ -6,9 +6,7 @@ import org.hashtree.stringmetric.StringFilter trait AsciiLetterStringFilter extends StringFilter { abstract override def filter(charArray: Array[Char]): Array[Char] = super.filter( - charArray.filter { c => - !((c >= 65 && c <= 90 ) || (c >= 97 && c <= 122)) - } + charArray.filter(c => !((c >= 65 && c <= 90 ) || (c >= 97 && c <= 122))) ) abstract override def filter(string: String): String = filter(string.toCharArray).mkString diff --git a/core/source/core/scala/org/hashtree/stringmetric/filter/AsciiNumberOnlyStringFilter.scala b/core/source/core/scala/org/hashtree/stringmetric/filter/AsciiNumberOnlyStringFilter.scala index 02390a5..e19e901 100755 --- a/core/source/core/scala/org/hashtree/stringmetric/filter/AsciiNumberOnlyStringFilter.scala +++ b/core/source/core/scala/org/hashtree/stringmetric/filter/AsciiNumberOnlyStringFilter.scala @@ -6,9 +6,7 @@ import org.hashtree.stringmetric.StringFilter trait AsciiNumberOnlyStringFilter extends StringFilter { abstract override def filter(charArray: Array[Char]): Array[Char] = super.filter( - charArray.filter { c => - (c >= 48 && c <= 57 ) - } + charArray.filter(c => (c >= 48 && c <= 57 )) ) abstract override def filter(string: String): String = filter(string.toCharArray).mkString diff --git a/core/source/core/scala/org/hashtree/stringmetric/filter/AsciiNumberStringFilter.scala b/core/source/core/scala/org/hashtree/stringmetric/filter/AsciiNumberStringFilter.scala index 6a5264c..fe61fc8 100755 --- a/core/source/core/scala/org/hashtree/stringmetric/filter/AsciiNumberStringFilter.scala +++ b/core/source/core/scala/org/hashtree/stringmetric/filter/AsciiNumberStringFilter.scala @@ -6,9 +6,7 @@ import org.hashtree.stringmetric.StringFilter trait AsciiNumberStringFilter extends StringFilter { abstract override def filter(charArray: Array[Char]): Array[Char] = super.filter( - charArray.filter { c => - !(c >= 48 && c <= 57) - } + charArray.filter(c => !(c >= 48 && c <= 57)) ) abstract override def filter(string: String): String = filter(string.toCharArray).mkString diff --git a/core/source/core/scala/org/hashtree/stringmetric/filter/AsciiSymbolOnlyStringFilter.scala b/core/source/core/scala/org/hashtree/stringmetric/filter/AsciiSymbolOnlyStringFilter.scala index 4a58ff3..d581b44 100755 --- a/core/source/core/scala/org/hashtree/stringmetric/filter/AsciiSymbolOnlyStringFilter.scala +++ b/core/source/core/scala/org/hashtree/stringmetric/filter/AsciiSymbolOnlyStringFilter.scala @@ -6,9 +6,9 @@ import org.hashtree.stringmetric.StringFilter trait AsciiSymbolOnlyStringFilter extends StringFilter { abstract override def filter(charArray: Array[Char]): Array[Char] = super.filter( - charArray.filter { c => + charArray.filter(c => ((c >= 32 && c <= 47) || (c >= 58 && c <= 64) || (c >= 91 && c <= 96) || (c >= 123 && c <= 126)) - } + ) ) abstract override def filter(string: String): String = filter(string.toCharArray).mkString diff --git a/core/source/core/scala/org/hashtree/stringmetric/filter/AsciiSymbolStringFilter.scala b/core/source/core/scala/org/hashtree/stringmetric/filter/AsciiSymbolStringFilter.scala index fce3667..8602277 100755 --- a/core/source/core/scala/org/hashtree/stringmetric/filter/AsciiSymbolStringFilter.scala +++ b/core/source/core/scala/org/hashtree/stringmetric/filter/AsciiSymbolStringFilter.scala @@ -6,9 +6,9 @@ import org.hashtree.stringmetric.StringFilter trait AsciiSymbolStringFilter extends StringFilter { abstract override def filter(charArray: Array[Char]): Array[Char] = super.filter( - charArray.filter { c => + charArray.filter(c => !((c >= 32 && c <= 47) || (c >= 58 && c <= 64) || (c >= 91 && c <= 96) || (c >= 123 && c <= 126)) - } + ) ) abstract override def filter(string: String): String = filter(string.toCharArray).mkString diff --git a/core/source/core/scala/org/hashtree/stringmetric/phonetic/MetaphoneMetric.scala b/core/source/core/scala/org/hashtree/stringmetric/phonetic/MetaphoneMetric.scala index 6652e36..efd65b8 100755 --- a/core/source/core/scala/org/hashtree/stringmetric/phonetic/MetaphoneMetric.scala +++ b/core/source/core/scala/org/hashtree/stringmetric/phonetic/MetaphoneMetric.scala @@ -14,13 +14,9 @@ object MetaphoneMetric extends StringMetric with FilterableStringMetric { lazy val ca2 = stringFilter.filter(charArray2) if (ca1.length == 0 || !Alphabet.is(ca1.head) || ca2.length == 0 || !Alphabet.is(ca2.head)) None - else { - val mp1 = MetaphoneAlgorithm.compute(ca1) - lazy val mp2 = MetaphoneAlgorithm.compute(ca2) - - if (!mp1.isDefined || mp1.get.length == 0 || !mp2.isDefined || mp2.get.length == 0) None - else Some(mp1.get.sameElements(mp2.get)) - } + else MetaphoneAlgorithm.compute(ca1).filter(_.length > 0).flatMap(mp1 => + MetaphoneAlgorithm.compute(ca2).filter(_.length > 0).map(mp1.sameElements(_)) + ) } override def compare(string1: String, string2: String) diff --git a/core/source/core/scala/org/hashtree/stringmetric/phonetic/NysiisMetric.scala b/core/source/core/scala/org/hashtree/stringmetric/phonetic/NysiisMetric.scala index 46f53d1..279ec82 100755 --- a/core/source/core/scala/org/hashtree/stringmetric/phonetic/NysiisMetric.scala +++ b/core/source/core/scala/org/hashtree/stringmetric/phonetic/NysiisMetric.scala @@ -21,13 +21,9 @@ object NysiisMetric extends StringMetric with FilterableStringMetric { if (ca1.length == 0 || !Alphabet.is(ca1.head) || ca2.length == 0 || !Alphabet.is(ca2.head)) None else if (unequal(ca1.head, ca2.head)) Some(false) - else { - val ny1 = NysiisAlgorithm.compute(ca1) - lazy val ny2 = NysiisAlgorithm.compute(ca2) - - if (!ny1.isDefined || ny1.get.length == 0 || !ny2.isDefined || ny2.get.length == 0) None - else Some(ny1.get.sameElements(ny2.get)) - } + else NysiisAlgorithm.compute(ca1).filter(_.length > 0).flatMap(ny1 => + NysiisAlgorithm.compute(ca2).filter(_.length > 0).map(ny1.sameElements(_)) + ) } override def compare(string1: String, string2: String) diff --git a/core/source/core/scala/org/hashtree/stringmetric/phonetic/RefinedNysiisMetric.scala b/core/source/core/scala/org/hashtree/stringmetric/phonetic/RefinedNysiisMetric.scala index 10d7bc0..8d688ce 100755 --- a/core/source/core/scala/org/hashtree/stringmetric/phonetic/RefinedNysiisMetric.scala +++ b/core/source/core/scala/org/hashtree/stringmetric/phonetic/RefinedNysiisMetric.scala @@ -21,13 +21,9 @@ object RefinedNysiisMetric extends StringMetric with FilterableStringMetric { if (ca1.length == 0 || !Alphabet.is(ca1.head) || ca2.length == 0 || !Alphabet.is(ca2.head)) None else if (unequal(ca1.head, ca2.head)) Some(false) - else { - val rny1 = RefinedNysiisAlgorithm.compute(ca1) - lazy val rny2 = RefinedNysiisAlgorithm.compute(ca2) - - if (!rny1.isDefined || rny1.get.length == 0 || !rny2.isDefined || rny2.get.length == 0) None - else Some(rny1.get.sameElements(rny2.get)) - } + else RefinedNysiisAlgorithm.compute(ca1).filter(_.length > 0).flatMap(rny1 => + RefinedNysiisAlgorithm.compute(ca2).filter(_.length > 0).map(rny1.sameElements(_)) + ) } override def compare(string1: String, string2: String) diff --git a/core/source/core/scala/org/hashtree/stringmetric/phonetic/RefinedSoundexMetric.scala b/core/source/core/scala/org/hashtree/stringmetric/phonetic/RefinedSoundexMetric.scala index 778c9d2..89ebb1d 100755 --- a/core/source/core/scala/org/hashtree/stringmetric/phonetic/RefinedSoundexMetric.scala +++ b/core/source/core/scala/org/hashtree/stringmetric/phonetic/RefinedSoundexMetric.scala @@ -15,13 +15,9 @@ object RefinedSoundexMetric extends StringMetric with FilterableStringMetric { if (ca1.length == 0 || !Alphabet.is(ca1.head) || ca2.length == 0 || !Alphabet.is(ca2.head)) None else if (ca1.head.toLower != ca2.head.toLower) Some(false) - else { - val rse1 = RefinedSoundexAlgorithm.compute(ca1) - lazy val rse2 = RefinedSoundexAlgorithm.compute(ca2) - - if (!rse1.isDefined || rse1.get.length == 0 || !rse2.isDefined || rse2.get.length == 0) None - else Some(rse1.get.sameElements(rse2.get)) - } + else RefinedSoundexAlgorithm.compute(ca1).filter(_.length > 0).flatMap(rse1 => + RefinedSoundexAlgorithm.compute(ca2).filter(_.length > 0).map(rse1.sameElements(_)) + ) } override def compare(string1: String, string2: String) diff --git a/core/source/core/scala/org/hashtree/stringmetric/phonetic/SoundexMetric.scala b/core/source/core/scala/org/hashtree/stringmetric/phonetic/SoundexMetric.scala index e405688..d446730 100755 --- a/core/source/core/scala/org/hashtree/stringmetric/phonetic/SoundexMetric.scala +++ b/core/source/core/scala/org/hashtree/stringmetric/phonetic/SoundexMetric.scala @@ -15,13 +15,9 @@ object SoundexMetric extends StringMetric with FilterableStringMetric { if (ca1.length == 0 || !Alphabet.is(ca1.head) || ca2.length == 0 || !Alphabet.is(ca2.head)) None else if (ca1.head.toLower != ca2.head.toLower) Some(false) - else { - val se1 = SoundexAlgorithm.compute(ca1) - lazy val se2 = SoundexAlgorithm.compute(ca2) - - if (!se1.isDefined || se1.get.length == 0 || !se2.isDefined || se2.get.length == 0) None - else Some(se1.get.sameElements(se2.get)) - } + else SoundexAlgorithm.compute(ca1).filter(_.length > 0).flatMap(se1 => + SoundexAlgorithm.compute(ca2).filter(_.length > 0).map(se1.sameElements(_)) + ) } override def compare(string1: String, string2: String) diff --git a/core/source/core/scala/org/hashtree/stringmetric/similarity/DiceSorensenMetric.scala b/core/source/core/scala/org/hashtree/stringmetric/similarity/DiceSorensenMetric.scala index 2fed038..513b5ed 100755 --- a/core/source/core/scala/org/hashtree/stringmetric/similarity/DiceSorensenMetric.scala +++ b/core/source/core/scala/org/hashtree/stringmetric/similarity/DiceSorensenMetric.scala @@ -20,17 +20,14 @@ object DiceSorensenMetric extends StringMetric with FilterableConfigurableString if (ca1.length < n || ca2.length < n) None // Because length is less than n, it is not possible to compare. else if (ca1.sameElements(ca2)) Some(1d) - else { - val ca1bg = NGramAlgorithm.compute(ca1)(n) - lazy val ca2bg = NGramAlgorithm.compute(ca2)(n) + else + NGramAlgorithm.compute(ca1)(n).flatMap { ca1bg => + NGramAlgorithm.compute(ca2)(n).map { ca2bg => + val ms = scoreMatches((ca1bg.map(_.mkString), ca2bg.map(_.mkString))) - if (!ca1bg.isDefined || !ca2bg.isDefined) None - else { - val ms = scoreMatches((ca1bg.get.map(_.mkString), ca2bg.get.map(_.mkString))) - - Some((2d * ms) / (ca1bg.get.length + ca2bg.get.length)) + (2d * ms) / (ca1bg.length + ca2bg.length) + } } - } } override def compare(string1: String, string2: String)(n: Int) diff --git a/core/source/core/scala/org/hashtree/stringmetric/similarity/NGramMetric.scala b/core/source/core/scala/org/hashtree/stringmetric/similarity/NGramMetric.scala index 4fe581c..0932b0a 100755 --- a/core/source/core/scala/org/hashtree/stringmetric/similarity/NGramMetric.scala +++ b/core/source/core/scala/org/hashtree/stringmetric/similarity/NGramMetric.scala @@ -19,14 +19,12 @@ object NGramMetric extends StringMetric with FilterableConfigurableStringMetric[ if (ca1.length < n || ca2.length < n) None // Because length is less than n, it is not possible to compare. else if (ca1.sameElements(ca2)) Some(1d) else { - val ca1bg = NGramAlgorithm.compute(ca1)(n) - lazy val ca2bg = NGramAlgorithm.compute(ca2)(n) + NGramAlgorithm.compute(ca1)(n).flatMap { ca1bg => + NGramAlgorithm.compute(ca2)(n).map { ca2bg => + val ms = scoreMatches((ca1bg.map(_.mkString), ca2bg.map(_.mkString))) - if (!ca1bg.isDefined || !ca2bg.isDefined) None - else { - val ms = scoreMatches((ca1bg.get.map(_.mkString), ca2bg.get.map(_.mkString))) - - Some(ms.toDouble / math.max(ca1bg.get.length, ca2bg.get.length)) + ms.toDouble / math.max(ca1bg.length, ca2bg.length) + } } } } |