summaryrefslogtreecommitdiff
path: root/core
diff options
context:
space:
mode:
authorRocky Madden <git@rockymadden.com>2012-11-28 10:13:49 -0700
committerRocky Madden <git@rockymadden.com>2012-11-28 10:13:49 -0700
commit51b0bac8cc86269098d6cabf55316566ffc7ac26 (patch)
tree319229d9b8a475e827af50ed9c741d6866359896 /core
parent52c21222a7df020ea406d0bd9a0d014a0ac5623b (diff)
downloadstringmetric-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')
-rwxr-xr-xcore/source/core/scala/org/hashtree/stringmetric/similarity/LevenshteinMetric.scala7
-rwxr-xr-xcore/source/core/scala/org/hashtree/stringmetric/similarity/WeightedLevenshteinMetric.scala6
-rwxr-xr-xcore/source/test/scala/org/hashtree/stringmetric/similarity/LevenshteinMetricSpec.scala4
-rwxr-xr-xcore/source/test/scala/org/hashtree/stringmetric/similarity/WeightedLevenshteinMetricSpec.scala5
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)
}
}