summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRocky Madden <git@rockymadden.com>2013-12-28 18:39:04 -0700
committerRocky Madden <git@rockymadden.com>2013-12-28 18:39:04 -0700
commitc42768673de38cf835f249f692a471456dedc75b (patch)
treeb869f0668ad58cc316d85e451fd756d2bad84617
parent75d6fbe5e3fcea28754e9c2fc4b0bcefcf512665 (diff)
downloadstringmetric-c42768673de38cf835f249f692a471456dedc75b.tar.gz
stringmetric-c42768673de38cf835f249f692a471456dedc75b.tar.bz2
stringmetric-c42768673de38cf835f249f692a471456dedc75b.zip
Added convenience objects.
-rwxr-xr-xcore/source/main/scala/com/rockymadden/stringmetric/Algorithm.scala19
-rwxr-xr-xcore/source/main/scala/com/rockymadden/stringmetric/Metric.scala49
-rwxr-xr-xcore/source/main/scala/com/rockymadden/stringmetric/Tokenizer.scala7
-rwxr-xr-xcore/source/main/scala/com/rockymadden/stringmetric/package.scala5
-rw-r--r--core/source/test/scala/com/rockymadden/stringmetric/AlgorithmSpec.scala24
-rw-r--r--core/source/test/scala/com/rockymadden/stringmetric/MetricSpec.scala42
6 files changed, 145 insertions, 1 deletions
diff --git a/core/source/main/scala/com/rockymadden/stringmetric/Algorithm.scala b/core/source/main/scala/com/rockymadden/stringmetric/Algorithm.scala
index 5acb9f3..cb0d9cc 100755
--- a/core/source/main/scala/com/rockymadden/stringmetric/Algorithm.scala
+++ b/core/source/main/scala/com/rockymadden/stringmetric/Algorithm.scala
@@ -9,4 +9,23 @@ object Algorithm {
trait StringAlgorithm extends Algorithm[Array[Char]] {
def compute(a: String): Option[String]
}
+
+
+ object StringAlgorithm {
+ val Metaphone = com.rockymadden.stringmetric.phonetic.MetaphoneAlgorithm
+ val Nysiis = com.rockymadden.stringmetric.phonetic.NysiisAlgorithm
+ val RefinedNysiis = com.rockymadden.stringmetric.phonetic.RefinedNysiisAlgorithm
+ val RefinedSoundex = com.rockymadden.stringmetric.phonetic.RefinedSoundexAlgorithm
+ val Soundex = com.rockymadden.stringmetric.phonetic.SoundexAlgorithm
+
+ def computeWithMetaphone(charArray: Array[Char]) = Metaphone.compute(charArray)
+
+ def computeWithNysiis(charArray: Array[Char]) = Nysiis.compute(charArray)
+
+ def computeWithRefinedNysiis(charArray: Array[Char]) = RefinedNysiis.compute(charArray)
+
+ def computeWithRefinedSoundex(charArray: Array[Char]) = RefinedSoundex.compute(charArray)
+
+ def computeWithSoundex(charArray: Array[Char]) = Soundex.compute(charArray)
+ }
}
diff --git a/core/source/main/scala/com/rockymadden/stringmetric/Metric.scala b/core/source/main/scala/com/rockymadden/stringmetric/Metric.scala
index 5423d4d..ea70b9c 100755
--- a/core/source/main/scala/com/rockymadden/stringmetric/Metric.scala
+++ b/core/source/main/scala/com/rockymadden/stringmetric/Metric.scala
@@ -9,4 +9,53 @@ object Metric {
trait StringMetric[A] extends Metric[Array[Char], A] {
def compare(a: String, b: String): Option[A]
}
+
+
+ object StringMetric {
+ final val DiceSorensen = com.rockymadden.stringmetric.similarity.DiceSorensenMetric
+ final val Hamming = com.rockymadden.stringmetric.similarity.HammingMetric
+ final val Jaccard = com.rockymadden.stringmetric.similarity.JaccardMetric
+ final val Jaro = com.rockymadden.stringmetric.similarity.JaroMetric
+ final val JaroWinkler = com.rockymadden.stringmetric.similarity.JaroWinklerMetric
+ final val Levenshtein = com.rockymadden.stringmetric.similarity.LevenshteinMetric
+ final val Metaphone = com.rockymadden.stringmetric.phonetic.MetaphoneMetric
+ final val NGram = com.rockymadden.stringmetric.similarity.NGramMetric
+ final val Nysiis = com.rockymadden.stringmetric.phonetic.NysiisMetric
+ final val Overlap = com.rockymadden.stringmetric.similarity.OverlapMetric
+ final val RefinedNysiis = com.rockymadden.stringmetric.phonetic.RefinedNysiisMetric
+ final val RefinedSoundex = com.rockymadden.stringmetric.phonetic.RefinedSoundexMetric
+ final val Soundex = com.rockymadden.stringmetric.phonetic.SoundexMetric
+ final val WeightedLevenshtein = com.rockymadden.stringmetric.similarity.WeightedLevenshteinMetric
+
+ def compareWithDiceSorensen(n: Int)(a: Array[Char], b: Array[Char]) = DiceSorensen(n).compare(a, b)
+
+ def compareWithHamming(a: Array[Char], b: Array[Char]) = Hamming.compare(a, b)
+
+ def compareWithJaccard(n: Int)(a: Array[Char], b: Array[Char]) = Jaccard(n).compare(a, b)
+
+ def compareWithJaro(a: Array[Char], b: Array[Char]) = Jaro.compare(a, b)
+
+ def compareWithJaroWinkler(a: Array[Char], b: Array[Char]) = JaroWinkler.compare(a, b)
+
+ def compareWithLevenshtein(a: Array[Char], b: Array[Char]) = Levenshtein.compare(a, b)
+
+ def compareWithMetaphone(a: Array[Char], b: Array[Char]) = Metaphone.compare(a, b)
+
+ def compareWithNGram(n: Int)(a: Array[Char], b: Array[Char]) = NGram(n).compare(a, b)
+
+ def compareWithNysiis(a: Array[Char], b: Array[Char]) = Nysiis.compare(a, b)
+
+ def compareWithOverlap(n: Int)(a: Array[Char], b: Array[Char]) = Overlap(n).compare(a, b)
+
+ def compareWithRefinedNysiis(a: Array[Char], b: Array[Char]) = RefinedNysiis.compare(a, b)
+
+ def compareWithRefinedSoundex(a: Array[Char], b: Array[Char]) = RefinedSoundex.compare(a, b)
+
+ def compareWithSoundex(a: Array[Char], b: Array[Char]) = Soundex.compare(a, b)
+
+ def compareWithWeightedLevenshtein(delete: BigDecimal, insert: BigDecimal, substitute: BigDecimal)
+ (a: Array[Char], b: Array[Char]) =
+
+ WeightedLevenshtein(delete, insert, substitute).compare(a, b)
+ }
}
diff --git a/core/source/main/scala/com/rockymadden/stringmetric/Tokenizer.scala b/core/source/main/scala/com/rockymadden/stringmetric/Tokenizer.scala
index 7053f98..ed012d4 100755
--- a/core/source/main/scala/com/rockymadden/stringmetric/Tokenizer.scala
+++ b/core/source/main/scala/com/rockymadden/stringmetric/Tokenizer.scala
@@ -9,4 +9,11 @@ object Tokenizer {
trait StringTokenizer extends Tokenizer[Array[Char]] {
def tokenize(a: String): Option[Array[String]]
}
+
+
+ object StringTokenizer {
+ val NGram = com.rockymadden.stringmetric.tokenize.NGramTokenizer
+
+ def tokenizeWithNGram(n: Int)(charArray: Array[Char]) = NGram(n).tokenize(charArray)
+ }
}
diff --git a/core/source/main/scala/com/rockymadden/stringmetric/package.scala b/core/source/main/scala/com/rockymadden/stringmetric/package.scala
index 6752f4d..377fa7e 100755
--- a/core/source/main/scala/com/rockymadden/stringmetric/package.scala
+++ b/core/source/main/scala/com/rockymadden/stringmetric/package.scala
@@ -1,7 +1,10 @@
package com.rockymadden
package object stringmetric {
- type CompareTuple[T] = (Array[T], Array[T])
+ import scala.language.implicitConversions
+ type CompareTuple[T] = (Array[T], Array[T])
type MatchTuple[T] = (Array[T], Array[T])
+
+ implicit def stringToArrayOfChar(s: String): Array[Char] = s.toCharArray
}
diff --git a/core/source/test/scala/com/rockymadden/stringmetric/AlgorithmSpec.scala b/core/source/test/scala/com/rockymadden/stringmetric/AlgorithmSpec.scala
new file mode 100644
index 0000000..700328d
--- /dev/null
+++ b/core/source/test/scala/com/rockymadden/stringmetric/AlgorithmSpec.scala
@@ -0,0 +1,24 @@
+package com.rockymadden.stringmetric
+
+import org.junit.runner.RunWith
+import org.scalatest.junit.JUnitRunner
+
+@RunWith(classOf[JUnitRunner])
+final class AlgorithmSpec extends ScalaTest { "StringAlgorithm standalone object" should provide {
+ import com.rockymadden.stringmetric.phonetic._
+ import com.rockymadden.stringmetric.Algorithm._
+
+ "compute method and companion object pass through" in {
+ StringAlgorithm.computeWithMetaphone("testone").get should
+ equal (MetaphoneAlgorithm.compute("testone".toCharArray).get)
+ StringAlgorithm.computeWithNysiis("testone").get should
+ equal (NysiisAlgorithm.compute("testone".toCharArray).get)
+ StringAlgorithm.computeWithRefinedNysiis("testone").get should
+ equal (RefinedNysiisAlgorithm.compute("testone".toCharArray).get)
+ StringAlgorithm.computeWithRefinedSoundex("testone").get should
+ equal (RefinedSoundexAlgorithm.compute("testone".toCharArray).get)
+ StringAlgorithm.computeWithSoundex("testone").get should
+ equal (SoundexAlgorithm.compute("testone".toCharArray).get)
+ }
+}}
+
diff --git a/core/source/test/scala/com/rockymadden/stringmetric/MetricSpec.scala b/core/source/test/scala/com/rockymadden/stringmetric/MetricSpec.scala
new file mode 100644
index 0000000..48994e9
--- /dev/null
+++ b/core/source/test/scala/com/rockymadden/stringmetric/MetricSpec.scala
@@ -0,0 +1,42 @@
+package com.rockymadden.stringmetric
+
+import org.junit.runner.RunWith
+import org.scalatest.junit.JUnitRunner
+
+@RunWith(classOf[JUnitRunner])
+final class MetricSpec extends ScalaTest { "StringMetric standalone object" should provide {
+ import com.rockymadden.stringmetric.phonetic._
+ import com.rockymadden.stringmetric.similarity._
+ import com.rockymadden.stringmetric.Metric._
+
+ "compare method and companion object pass through" in {
+ StringMetric.compareWithDiceSorensen(1)("testone", "testtwo").get should
+ equal (DiceSorensenMetric(1).compare("testone".toCharArray, "testtwo".toCharArray).get)
+ StringMetric.compareWithHamming("testone", "testtwo").get should
+ equal (HammingMetric.compare("testone".toCharArray, "testtwo".toCharArray).get)
+ StringMetric.compareWithJaccard(1)("testone", "testtwo").get should
+ equal (JaccardMetric(1).compare("testone".toCharArray, "testtwo".toCharArray).get)
+ StringMetric.compareWithJaro("testone", "testtwo").get should
+ equal (JaroMetric.compare("testone".toCharArray, "testtwo".toCharArray).get)
+ StringMetric.compareWithJaroWinkler("testone", "testtwo").get should
+ equal (JaroWinklerMetric.compare("testone".toCharArray, "testtwo".toCharArray).get)
+ StringMetric.compareWithLevenshtein("testone", "testtwo").get should
+ equal (LevenshteinMetric.compare("testone".toCharArray, "testtwo".toCharArray).get)
+ StringMetric.compareWithMetaphone("testone", "testtwo").get should
+ equal (MetaphoneMetric.compare("testone".toCharArray, "testtwo".toCharArray).get)
+ StringMetric.compareWithNGram(1)("testone", "testtwo").get should
+ equal (NGramMetric(1).compare("testone".toCharArray, "testtwo".toCharArray).get)
+ StringMetric.compareWithNysiis("testone", "testtwo").get should
+ equal (NysiisMetric.compare("testone".toCharArray, "testtwo".toCharArray).get)
+ StringMetric.compareWithOverlap(1)("testone", "testtwo").get should
+ equal (OverlapMetric(1).compare("testone".toCharArray, "testtwo".toCharArray).get)
+ StringMetric.compareWithRefinedNysiis("testone", "testtwo").get should
+ equal (RefinedNysiisMetric.compare("testone".toCharArray, "testtwo".toCharArray).get)
+ StringMetric.compareWithRefinedSoundex("testone", "testtwo").get should
+ equal (RefinedSoundexMetric.compare("testone".toCharArray, "testtwo".toCharArray).get)
+ StringMetric.compareWithSoundex("testone", "testtwo").get should
+ equal (SoundexMetric.compare("testone".toCharArray, "testtwo".toCharArray).get)
+ StringMetric.compareWithWeightedLevenshtein(1, 2, 3)("testone", "testtwo").get should
+ equal (WeightedLevenshteinMetric(1, 2, 3).compare("testone".toCharArray, "testtwo".toCharArray).get)
+ }
+}}