diff options
author | Rocky Madden <git@rockymadden.com> | 2012-11-28 10:13:49 -0700 |
---|---|---|
committer | Rocky Madden <git@rockymadden.com> | 2012-11-28 10:13:49 -0700 |
commit | 51b0bac8cc86269098d6cabf55316566ffc7ac26 (patch) | |
tree | 319229d9b8a475e827af50ed9c741d6866359896 /core | |
parent | 52c21222a7df020ea406d0bd9a0d014a0ac5623b (diff) | |
download | stringmetric-51b0bac8cc86269098d6cabf55316566ffc7ac26.tar.gz stringmetric-51b0bac8cc86269098d6cabf55316566ffc7ac26.tar.bz2 stringmetric-51b0bac8cc86269098d6cabf55316566ffc7ac26.zip |
Consistent return of None across all metrics if either argument is empty.
Diffstat (limited to 'core')
4 files changed, 10 insertions, 12 deletions
diff --git a/core/source/core/scala/org/hashtree/stringmetric/similarity/LevenshteinMetric.scala b/core/source/core/scala/org/hashtree/stringmetric/similarity/LevenshteinMetric.scala index 90bb060..945a240 100755 --- a/core/source/core/scala/org/hashtree/stringmetric/similarity/LevenshteinMetric.scala +++ b/core/source/core/scala/org/hashtree/stringmetric/similarity/LevenshteinMetric.scala @@ -10,11 +10,10 @@ object LevenshteinMetric extends StringMetric with FilterableStringMetric { (implicit stringFilter: StringFilter): Option[CompareReturn] = { val fca1 = stringFilter.filter(charArray1) - val fca2 = stringFilter.filter(charArray2) + lazy val fca2 = stringFilter.filter(charArray2) - if (fca1.length == 0 && fca2.length == 0) None - else if (fca1.length == 0) Some(fca2.length) - else if (fca2.length == 0) Some(fca1.length) + if (fca1.length == 0 || fca2.length == 0) None + else if (fca1.sameElements(fca2)) Some(0) else Some(levenshtein(fca1, fca2)) } diff --git a/core/source/core/scala/org/hashtree/stringmetric/similarity/WeightedLevenshteinMetric.scala b/core/source/core/scala/org/hashtree/stringmetric/similarity/WeightedLevenshteinMetric.scala index dc16c86..0277430 100755 --- a/core/source/core/scala/org/hashtree/stringmetric/similarity/WeightedLevenshteinMetric.scala +++ b/core/source/core/scala/org/hashtree/stringmetric/similarity/WeightedLevenshteinMetric.scala @@ -18,11 +18,9 @@ object WeightedLevenshteinMetric throw new IllegalArgumentException("Expected valid weight options.") val fca1 = stringFilter.filter(charArray1) - val fca2 = stringFilter.filter(charArray2) + lazy val fca2 = stringFilter.filter(charArray2) - if (fca1.length == 0 && fca2.length == 0) None - else if (fca1.length == 0) Some((options._2 * fca2.length).toDouble) - else if (fca2.length == 0) Some((options._1 * fca1.length).toDouble) + if (fca1.length == 0 || fca2.length == 0) None else if (fca1.sameElements(fca2)) Some(0d) else Some(weightedLevenshtein((fca1, fca2), options).toDouble) } diff --git a/core/source/test/scala/org/hashtree/stringmetric/similarity/LevenshteinMetricSpec.scala b/core/source/test/scala/org/hashtree/stringmetric/similarity/LevenshteinMetricSpec.scala index 4a56dcb..c8b5336 100755 --- a/core/source/test/scala/org/hashtree/stringmetric/similarity/LevenshteinMetricSpec.scala +++ b/core/source/test/scala/org/hashtree/stringmetric/similarity/LevenshteinMetricSpec.scala @@ -11,6 +11,8 @@ final class LevenshteinMetricSpec extends ScalaTest { "empty arguments" should returns { "None" in { LevenshteinMetric.compare("", "").isDefined should be (false) + LevenshteinMetric.compare("abc", "").isDefined should be (false) + LevenshteinMetric.compare("", "xyz").isDefined should be (false) } } "equal arguments" should returns { @@ -21,8 +23,6 @@ final class LevenshteinMetricSpec extends ScalaTest { } "unequal arguments" should returns { "Int indicating distance" in { - LevenshteinMetric.compare("abc", "").get should be (3) - LevenshteinMetric.compare("", "xyz").get should be (3) LevenshteinMetric.compare("abc", "xyz").get should be (3) LevenshteinMetric.compare("123", "456").get should be (3) } diff --git a/core/source/test/scala/org/hashtree/stringmetric/similarity/WeightedLevenshteinMetricSpec.scala b/core/source/test/scala/org/hashtree/stringmetric/similarity/WeightedLevenshteinMetricSpec.scala index 64dec2a..c5f946e 100755 --- a/core/source/test/scala/org/hashtree/stringmetric/similarity/WeightedLevenshteinMetricSpec.scala +++ b/core/source/test/scala/org/hashtree/stringmetric/similarity/WeightedLevenshteinMetricSpec.scala @@ -13,6 +13,8 @@ final class WeightedLevenshteinMetricSpec extends ScalaTest { "empty arguments" should returns { "None" in { WeightedLevenshteinMetric.compare("", "")(Options).isDefined should be (false) + WeightedLevenshteinMetric.compare("abc", "")(Options).isDefined should be (false) + WeightedLevenshteinMetric.compare("", "xyz")(Options).isDefined should be (false) } } "equal arguments" should returns { @@ -23,8 +25,7 @@ final class WeightedLevenshteinMetricSpec extends ScalaTest { } "unequal arguments" should returns { "Double indicating distance" in { - WeightedLevenshteinMetric.compare("abc", "")(Options).get should be (30) - WeightedLevenshteinMetric.compare("", "xyz")(Options).get should be (0.3) + WeightedLevenshteinMetric.compare("abc", "xyz")(Options).get should be (3) WeightedLevenshteinMetric.compare("123", "456")(Options).get should be (3) } } |