diff options
author | Rocky Madden <git@rockymadden.com> | 2013-02-11 14:35:34 -0700 |
---|---|---|
committer | Rocky Madden <git@rockymadden.com> | 2013-02-11 14:35:34 -0700 |
commit | d7c64cfa99a6ac3a7428c0840e61f4c7e496cba1 (patch) | |
tree | 8337b700ff24e8145594d55fb48c249c02df53bb | |
parent | be28fca736f2bc7623b6ab6773a90ae113a93caf (diff) | |
download | stringmetric-d7c64cfa99a6ac3a7428c0840e61f4c7e496cba1.tar.gz stringmetric-d7c64cfa99a6ac3a7428c0840e61f4c7e496cba1.tar.bz2 stringmetric-d7c64cfa99a6ac3a7428c0840e61f4c7e496cba1.zip |
Trait and convenience object tweaks. Took notes from the scala library collection packages.
48 files changed, 293 insertions, 250 deletions
diff --git a/core/source/core/scala/com/rockymadden/stringmetric/Algorithm.scala b/core/source/core/scala/com/rockymadden/stringmetric/Algorithm.scala new file mode 100755 index 0000000..40d0d5a --- /dev/null +++ b/core/source/core/scala/com/rockymadden/stringmetric/Algorithm.scala @@ -0,0 +1,3 @@ +package com.rockymadden.stringmetric + +trait Algorithm[T, R] extends AlgorithmLike[T, R] diff --git a/core/source/core/scala/com/rockymadden/stringmetric/ConfigurableAlgorithm.scala b/core/source/core/scala/com/rockymadden/stringmetric/ConfigurableAlgorithm.scala new file mode 100755 index 0000000..34d5919 --- /dev/null +++ b/core/source/core/scala/com/rockymadden/stringmetric/ConfigurableAlgorithm.scala @@ -0,0 +1,3 @@ +package com.rockymadden.stringmetric + +trait ConfigurableAlgorithm[T, R, O] extends ConfigurableAlgorithmLike[T, R, O] diff --git a/core/source/core/scala/com/rockymadden/stringmetric/ConfigurableMetric.scala b/core/source/core/scala/com/rockymadden/stringmetric/ConfigurableMetric.scala new file mode 100755 index 0000000..035027e --- /dev/null +++ b/core/source/core/scala/com/rockymadden/stringmetric/ConfigurableMetric.scala @@ -0,0 +1,3 @@ +package com.rockymadden.stringmetric + +trait ConfigurableMetric[T, R, O] extends ConfigurableMetricLike[T, R, O] diff --git a/core/source/core/scala/com/rockymadden/stringmetric/ConfigurableStringAlgorithm.scala b/core/source/core/scala/com/rockymadden/stringmetric/ConfigurableStringAlgorithm.scala new file mode 100755 index 0000000..20464a7 --- /dev/null +++ b/core/source/core/scala/com/rockymadden/stringmetric/ConfigurableStringAlgorithm.scala @@ -0,0 +1,20 @@ +package com.rockymadden.stringmetric + +import com.rockymadden.stringmetric.similarity.NGramAlgorithm + +trait ConfigurableStringAlgorithm[R, O] + extends ConfigurableAlgorithm[String, R, O] with ConfigurableStringAlgorithmLike[R, O] with StringFilterLike { + + override def filter(charArray: Array[Char]): Array[Char] = charArray + + override def filter(string: String): String = string +} + +object ConfigurableStringAlgorithm { + def computeWithNGram(charArray: Array[Char])(n: Int): Option[Array[Array[Char]]] = + NGramAlgorithm().compute(charArray)(n) + + def computeWithNGram(string: String)(n: Int): Option[Array[String]] = NGramAlgorithm().compute(string)(n) + + def nGram: NGramAlgorithm.type = NGramAlgorithm +} diff --git a/core/source/core/scala/com/rockymadden/stringmetric/ConfigurableStringAlgorithmLike.scala b/core/source/core/scala/com/rockymadden/stringmetric/ConfigurableStringAlgorithmLike.scala index 8087b55..669cbd9 100755 --- a/core/source/core/scala/com/rockymadden/stringmetric/ConfigurableStringAlgorithmLike.scala +++ b/core/source/core/scala/com/rockymadden/stringmetric/ConfigurableStringAlgorithmLike.scala @@ -1,9 +1,5 @@ package com.rockymadden.stringmetric -trait ConfigurableStringAlgorithmLike[R, O] extends ConfigurableAlgorithmLike[String, R, O] { this: StringFilterLike => +trait ConfigurableStringAlgorithmLike[R, O] extends ConfigurableAlgorithmLike[String, R, O] { def compute(charArray: Array[Char])(implicit o: O): Option[Array[_]] - - override def filter(charArray: Array[Char]): Array[Char] = charArray - - override def filter(string: String): String = string } diff --git a/core/source/core/scala/com/rockymadden/stringmetric/ConfigurableStringMetric.scala b/core/source/core/scala/com/rockymadden/stringmetric/ConfigurableStringMetric.scala new file mode 100755 index 0000000..3ee31b7 --- /dev/null +++ b/core/source/core/scala/com/rockymadden/stringmetric/ConfigurableStringMetric.scala @@ -0,0 +1,41 @@ +package com.rockymadden.stringmetric + +import com.rockymadden.stringmetric.similarity.{ DiceSorensenMetric, NGramMetric, WeightedLevenshteinMetric } + +trait ConfigurableStringMetric[R, O] + extends ConfigurableMetric[String, R, O] with ConfigurableStringMetricLike[R, O] with StringFilterLike { + + override def filter(charArray: Array[Char]): Array[Char] = charArray + + override def filter(string: String): String = string +} + +object ConfigurableStringMetric { + def compareWithDiceSorensen(charArray1: Array[Char], charArray2: Array[Char])(n: Int): Option[Double] = + DiceSorensenMetric().compare(charArray1, charArray2)(n) + + def compareWithDiceSorensen(string1: String, string2: String)(n: Int): Option[Double] = + DiceSorensenMetric().compare(string1, string2)(n) + + def compareWithNGram(charArray1: Array[Char], charArray2: Array[Char])(n: Int): Option[Double] = + NGramMetric().compare(charArray1, charArray2)(n) + + def compareWithNGram(string1: String, string2: String)(n: Int): Option[Double] = + NGramMetric().compare(string1, string2)(n) + + def compareWithWeightedLevenshtein(charArray1: Array[Char], charArray2: Array[Char]) + (options: (BigDecimal, BigDecimal, BigDecimal)): Option[Double] = + + WeightedLevenshteinMetric().compare(charArray1, charArray2)(options) + + def compareWithWeightedLevenshtein(string1: String, string2: String) + (options: (BigDecimal, BigDecimal, BigDecimal)): Option[Double] = + + WeightedLevenshteinMetric().compare(string1, string2)(options) + + def diceSorensen: DiceSorensenMetric.type = DiceSorensenMetric + + def nGram: NGramMetric.type = NGramMetric + + def weightedLevenshtein: WeightedLevenshteinMetric.type = WeightedLevenshteinMetric +} diff --git a/core/source/core/scala/com/rockymadden/stringmetric/ConfigurableStringMetricLike.scala b/core/source/core/scala/com/rockymadden/stringmetric/ConfigurableStringMetricLike.scala index 506989f..87c87ce 100755 --- a/core/source/core/scala/com/rockymadden/stringmetric/ConfigurableStringMetricLike.scala +++ b/core/source/core/scala/com/rockymadden/stringmetric/ConfigurableStringMetricLike.scala @@ -1,9 +1,5 @@ package com.rockymadden.stringmetric -trait ConfigurableStringMetricLike[R, O] extends ConfigurableMetricLike[String, R, O] { this: StringFilterLike => +trait ConfigurableStringMetricLike[R, O] extends ConfigurableMetricLike[String, R, O] { def compare(charArray1: Array[Char], charArray2: Array[Char])(implicit o: O): Option[R] - - override def filter(charArray: Array[Char]): Array[Char] = charArray - - override def filter(string: String): String = string } diff --git a/core/source/core/scala/com/rockymadden/stringmetric/Filter.scala b/core/source/core/scala/com/rockymadden/stringmetric/Filter.scala new file mode 100755 index 0000000..17efad9 --- /dev/null +++ b/core/source/core/scala/com/rockymadden/stringmetric/Filter.scala @@ -0,0 +1,3 @@ +package com.rockymadden.stringmetric + +trait Filter[T] extends FilterLike[T] diff --git a/core/source/core/scala/com/rockymadden/stringmetric/Metric.scala b/core/source/core/scala/com/rockymadden/stringmetric/Metric.scala new file mode 100755 index 0000000..b20755e --- /dev/null +++ b/core/source/core/scala/com/rockymadden/stringmetric/Metric.scala @@ -0,0 +1,3 @@ +package com.rockymadden.stringmetric + +trait Metric[T, R] extends MetricLike[T, R] diff --git a/core/source/core/scala/com/rockymadden/stringmetric/StringAlgorithm.scala b/core/source/core/scala/com/rockymadden/stringmetric/StringAlgorithm.scala new file mode 100755 index 0000000..f8e4a50 --- /dev/null +++ b/core/source/core/scala/com/rockymadden/stringmetric/StringAlgorithm.scala @@ -0,0 +1,36 @@ +package com.rockymadden.stringmetric + +import com.rockymadden.stringmetric.phonetic.{ MetaphoneAlgorithm, NysiisAlgorithm, RefinedSoundexAlgorithm, SoundexAlgorithm } + +trait StringAlgorithm[R] extends Algorithm[String, R] with StringAlgorithmLike[R] with StringFilterLike { + override def filter(charArray: Array[Char]): Array[Char] = charArray + + override def filter(string: String): String = string +} + +object StringAlgorithm { + def computeWithMetaphone(charArray: Array[Char]): Option[Array[Char]] = MetaphoneAlgorithm().compute(charArray) + + def computeWithMetaphone(string: String): Option[String] = MetaphoneAlgorithm().compute(string) + + def computeWithNysiis(charArray: Array[Char]): Option[Array[Char]] = NysiisAlgorithm().compute(charArray) + + def computeWithNysiis(string: String): Option[String] = NysiisAlgorithm().compute(string) + + def computeWithRefinedSoundex(charArray: Array[Char]): Option[Array[Char]] = + RefinedSoundexAlgorithm().compute(charArray) + + def computeWithRefinedSoundex(string: String): Option[String] = RefinedSoundexAlgorithm().compute(string) + + def computeWithSoundex(charArray: Array[Char]): Option[Array[Char]] = SoundexAlgorithm().compute(charArray) + + def computeWithSoundex(string: String): Option[String] = SoundexAlgorithm().compute(string) + + def metaphone: MetaphoneAlgorithm.type = MetaphoneAlgorithm + + def nysiis: NysiisAlgorithm.type = NysiisAlgorithm + + def refinedSoundex: RefinedSoundexAlgorithm.type = RefinedSoundexAlgorithm + + def soundex: SoundexAlgorithm.type = SoundexAlgorithm +} diff --git a/core/source/core/scala/com/rockymadden/stringmetric/StringAlgorithmLike.scala b/core/source/core/scala/com/rockymadden/stringmetric/StringAlgorithmLike.scala index d9cf6a7..9b734ac 100755 --- a/core/source/core/scala/com/rockymadden/stringmetric/StringAlgorithmLike.scala +++ b/core/source/core/scala/com/rockymadden/stringmetric/StringAlgorithmLike.scala @@ -1,46 +1,5 @@ package com.rockymadden.stringmetric -import com.rockymadden.stringmetric.phonetic.{ MetaphoneAlgorithm, NysiisAlgorithm, RefinedSoundexAlgorithm, SoundexAlgorithm } -import com.rockymadden.stringmetric.similarity.NGramAlgorithm - -trait StringAlgorithmLike[R] extends AlgorithmLike[String, R] { this: StringFilterLike => +trait StringAlgorithmLike[R] extends AlgorithmLike[String, R] { def compute(charArray: Array[Char]): Option[Array[_]] - - override def filter(charArray: Array[Char]): Array[Char] = charArray - - override def filter(string: String): String = string -} - -object StringAlgorithmLike { - def computeWithMetaphone(charArray: Array[Char]): Option[Array[Char]] = MetaphoneAlgorithm().compute(charArray) - - def computeWithMetaphone(string: String): Option[String] = MetaphoneAlgorithm().compute(string) - - def computeWithNGram(charArray: Array[Char])(n: Int): Option[Array[Array[Char]]] = - NGramAlgorithm().compute(charArray)(n) - - def computeWithNGram(string: String)(n: Int): Option[Array[String]] = NGramAlgorithm().compute(string)(n) - - def computeWithNysiis(charArray: Array[Char]): Option[Array[Char]] = NysiisAlgorithm().compute(charArray) - - def computeWithNysiis(string: String): Option[String] = NysiisAlgorithm().compute(string) - - def computeWithRefinedSoundex(charArray: Array[Char]): Option[Array[Char]] = - RefinedSoundexAlgorithm().compute(charArray) - - def computeWithRefinedSoundex(string: String): Option[String] = RefinedSoundexAlgorithm().compute(string) - - def computeWithSoundex(charArray: Array[Char]): Option[Array[Char]] = SoundexAlgorithm().compute(charArray) - - def computeWithSoundex(string: String): Option[String] = SoundexAlgorithm().compute(string) - - def metaphone: MetaphoneAlgorithm.type = MetaphoneAlgorithm - - def nGram: NGramAlgorithm.type = NGramAlgorithm - - def nysiis: NysiisAlgorithm.type = NysiisAlgorithm - - def refinedSoundex: RefinedSoundexAlgorithm.type = RefinedSoundexAlgorithm - - def soundex: SoundexAlgorithm.type = SoundexAlgorithm } diff --git a/core/source/core/scala/com/rockymadden/stringmetric/StringFilter.scala b/core/source/core/scala/com/rockymadden/stringmetric/StringFilter.scala new file mode 100755 index 0000000..e6895b1 --- /dev/null +++ b/core/source/core/scala/com/rockymadden/stringmetric/StringFilter.scala @@ -0,0 +1,35 @@ +package com.rockymadden.stringmetric + +import com.rockymadden.stringmetric.filter._ + +trait StringFilter extends StringFilterLike { + def filter(charArray: Array[Char]): Array[Char] +} + +object StringFilter { + def asciiControl = new StringFilterDelegate with AsciiControlStringFilter + + def asciiControlOnly = new StringFilterDelegate with AsciiControlOnlyStringFilter + + def asciiLetterCase = new StringFilterDelegate with AsciiLetterCaseStringFilter + + def asciiLetterNumber = new StringFilterDelegate with AsciiLetterNumberStringFilter + + def asciiLetterNumberOnly = new StringFilterDelegate with AsciiLetterNumberOnlyStringFilter + + def asciiLetter = new StringFilterDelegate with AsciiLetterStringFilter + + def asciiLetterOnly = new StringFilterDelegate with AsciiLetterOnlyStringFilter + + def asciiNumber = new StringFilterDelegate with AsciiNumberStringFilter + + def asciiNumberOnly = new StringFilterDelegate with AsciiNumberOnlyStringFilter + + def asciiSpace = new StringFilterDelegate with AsciiSpaceStringFilter + + def asciiSymbol = new StringFilterDelegate with AsciiSymbolStringFilter + + def asciiSymbolOnly = new StringFilterDelegate with AsciiSymbolOnlyStringFilter + + def delegate = new StringFilterDelegate +} diff --git a/core/source/core/scala/com/rockymadden/stringmetric/StringFilterLike.scala b/core/source/core/scala/com/rockymadden/stringmetric/StringFilterLike.scala index c2d604a..e9672e8 100755 --- a/core/source/core/scala/com/rockymadden/stringmetric/StringFilterLike.scala +++ b/core/source/core/scala/com/rockymadden/stringmetric/StringFilterLike.scala @@ -1,35 +1,5 @@ package com.rockymadden.stringmetric -import com.rockymadden.stringmetric.filter._ - trait StringFilterLike extends FilterLike[String] { def filter(charArray: Array[Char]): Array[Char] } - -object StringFilterLike { - def asciiControl = new StringFilterDelegate with AsciiControlStringFilter - - def asciiControlOnly = new StringFilterDelegate with AsciiControlOnlyStringFilter - - def asciiLetterCase = new StringFilterDelegate with AsciiLetterCaseStringFilter - - def asciiLetterNumber = new StringFilterDelegate with AsciiLetterNumberStringFilter - - def asciiLetterNumberOnly = new StringFilterDelegate with AsciiLetterNumberOnlyStringFilter - - def asciiLetter = new StringFilterDelegate with AsciiLetterStringFilter - - def asciiLetterOnly = new StringFilterDelegate with AsciiLetterOnlyStringFilter - - def asciiNumber = new StringFilterDelegate with AsciiNumberStringFilter - - def asciiNumberOnly = new StringFilterDelegate with AsciiNumberOnlyStringFilter - - def asciiSpace = new StringFilterDelegate with AsciiSpaceStringFilter - - def asciiSymbol = new StringFilterDelegate with AsciiSymbolStringFilter - - def asciiSymbolOnly = new StringFilterDelegate with AsciiSymbolOnlyStringFilter - - def delegate = new StringFilterDelegate -} diff --git a/core/source/core/scala/com/rockymadden/stringmetric/StringMetric.scala b/core/source/core/scala/com/rockymadden/stringmetric/StringMetric.scala new file mode 100755 index 0000000..65fcd22 --- /dev/null +++ b/core/source/core/scala/com/rockymadden/stringmetric/StringMetric.scala @@ -0,0 +1,73 @@ +package com.rockymadden.stringmetric + +import com.rockymadden.stringmetric.phonetic.{ MetaphoneMetric, NysiisMetric, RefinedSoundexMetric, SoundexMetric } +import com.rockymadden.stringmetric.similarity._ + +trait StringMetric[R] extends Metric[String, R] with StringMetricLike[R] with StringFilterLike { + override def filter(charArray: Array[Char]): Array[Char] = charArray + + override def filter(string: String): String = string +} + +object StringMetric { + def compareWithHamming(charArray1: Array[Char], charArray2: Array[Char]): Option[Int] = + HammingMetric().compare(charArray1, charArray2) + + def compareWithHamming(string1: String, string2: String): Option[Int] = HammingMetric().compare(string1, string2) + + def compareWithJaro(charArray1: Array[Char], charArray2: Array[Char]): Option[Double] = + JaroMetric().compare(charArray1, charArray2) + + def compareWithJaro(string1: String, string2: String): Option[Double] = JaroMetric().compare(string1, string2) + + def compareWithJaroWinkler(charArray1: Array[Char], charArray2: Array[Char]): Option[Double] = + JaroWinklerMetric().compare(charArray1, charArray2) + + def compareWithJaroWinkler(string1: String, string2: String): Option[Double] = + JaroWinklerMetric().compare(string1, string2) + + def compareWithLevenshtein(charArray1: Array[Char], charArray2: Array[Char]): Option[Int] = + LevenshteinMetric().compare(charArray1, charArray2) + + def compareWithLevenshtein(string1: String, string2: String): Option[Int] = + LevenshteinMetric().compare(string1, string2) + + def compareWithMetaphone(charArray1: Array[Char], charArray2: Array[Char]): Option[Boolean] = + MetaphoneMetric().compare(charArray1, charArray2) + + def compareWithMetaphone(string1: String, string2: String): Option[Boolean] = + MetaphoneMetric().compare(string1, string2) + + def compareWithNysiis(charArray1: Array[Char], charArray2: Array[Char]): Option[Boolean] = + NysiisMetric().compare(charArray1, charArray2) + + def compareWithNysiis(string1: String, string2: String): Option[Boolean] = NysiisMetric().compare(string1, string2) + + def compareWithRefinedSoundex(charArray1: Array[Char], charArray2: Array[Char]): Option[Boolean] = + RefinedSoundexMetric().compare(charArray1, charArray2) + + def compareWithRefinedSoundex(string1: String, string2: String): Option[Boolean] = + RefinedSoundexMetric().compare(string1, string2) + + def compareWithSoundex(charArray1: Array[Char], charArray2: Array[Char]): Option[Boolean] = + SoundexMetric().compare(charArray1, charArray2) + + def compareWithSoundex(string1: String, string2: String): Option[Boolean] = + SoundexMetric().compare(string1, string2) + + def hamming: HammingMetric.type = HammingMetric + + def jaro: JaroMetric.type = JaroMetric + + def jaroWinkler: JaroWinklerMetric.type = JaroWinklerMetric + + def levenshtein: LevenshteinMetric.type = LevenshteinMetric + + def metaphone: MetaphoneMetric.type = MetaphoneMetric + + def nysiis: NysiisMetric.type = NysiisMetric + + def refinedSoundex: RefinedSoundexMetric.type = RefinedSoundexMetric + + def soundex: SoundexMetric.type = SoundexMetric +} diff --git a/core/source/core/scala/com/rockymadden/stringmetric/StringMetricLike.scala b/core/source/core/scala/com/rockymadden/stringmetric/StringMetricLike.scala index a0767e3..4ae93b5 100755 --- a/core/source/core/scala/com/rockymadden/stringmetric/StringMetricLike.scala +++ b/core/source/core/scala/com/rockymadden/stringmetric/StringMetricLike.scala @@ -1,103 +1,5 @@ package com.rockymadden.stringmetric -import com.rockymadden.stringmetric.phonetic.{ MetaphoneMetric, NysiisMetric, RefinedSoundexMetric, SoundexMetric } -import com.rockymadden.stringmetric.similarity._ - -trait StringMetricLike[R] extends MetricLike[String, R] { this: StringFilterLike => +trait StringMetricLike[R] extends MetricLike[String, R] { def compare(charArray1: Array[Char], charArray2: Array[Char]): Option[R] - - override def filter(charArray: Array[Char]): Array[Char] = charArray - - override def filter(string: String): String = string -} - -object StringMetricLike { - def compareWithDiceSorensen(charArray1: Array[Char], charArray2: Array[Char])(n: Int): Option[Double] = - DiceSorensenMetric().compare(charArray1, charArray2)(n) - - def compareWithDiceSorensen(string1: String, string2: String)(n: Int): Option[Double] = - DiceSorensenMetric().compare(string1, string2)(n) - - def compareWithHamming(charArray1: Array[Char], charArray2: Array[Char]): Option[Int] = - HammingMetric().compare(charArray1, charArray2) - - def compareWithHamming(string1: String, string2: String): Option[Int] = HammingMetric().compare(string1, string2) - - def compareWithJaro(charArray1: Array[Char], charArray2: Array[Char]): Option[Double] = - JaroMetric().compare(charArray1, charArray2) - - def compareWithJaro(string1: String, string2: String): Option[Double] = JaroMetric().compare(string1, string2) - - def compareWithJaroWinkler(charArray1: Array[Char], charArray2: Array[Char]): Option[Double] = - JaroWinklerMetric().compare(charArray1, charArray2) - - def compareWithJaroWinkler(string1: String, string2: String): Option[Double] = - JaroWinklerMetric().compare(string1, string2) - - def compareWithLevenshtein(charArray1: Array[Char], charArray2: Array[Char]): Option[Int] = - LevenshteinMetric().compare(charArray1, charArray2) - - def compareWithLevenshtein(string1: String, string2: String): Option[Int] = - LevenshteinMetric().compare(string1, string2) - - def compareWithMetaphone(charArray1: Array[Char], charArray2: Array[Char]): Option[Boolean] = - MetaphoneMetric().compare(charArray1, charArray2) - - def compareWithMetaphone(string1: String, string2: String): Option[Boolean] = - MetaphoneMetric().compare(string1, string2) - - def compareWithNGram(charArray1: Array[Char], charArray2: Array[Char])(n: Int): Option[Double] = - NGramMetric().compare(charArray1, charArray2)(n) - - def compareWithNGram(string1: String, string2: String)(n: Int): Option[Double] = - NGramMetric().compare(string1, string2)(n) - - def compareWithNysiis(charArray1: Array[Char], charArray2: Array[Char]): Option[Boolean] = - NysiisMetric().compare(charArray1, charArray2) - - def compareWithNysiis(string1: String, string2: String): Option[Boolean] = NysiisMetric().compare(string1, string2) - - def compareWithRefinedSoundex(charArray1: Array[Char], charArray2: Array[Char]): Option[Boolean] = - RefinedSoundexMetric().compare(charArray1, charArray2) - - def compareWithRefinedSoundex(string1: String, string2: String): Option[Boolean] = - RefinedSoundexMetric().compare(string1, string2) - - def compareWithSoundex(charArray1: Array[Char], charArray2: Array[Char]): Option[Boolean] = - SoundexMetric().compare(charArray1, charArray2) - - def compareWithSoundex(string1: String, string2: String): Option[Boolean] = - SoundexMetric().compare(string1, string2) - - def compareWithWeightedLevenshtein(charArray1: Array[Char], charArray2: Array[Char]) - (options: (BigDecimal, BigDecimal, BigDecimal)): Option[Double] = - - WeightedLevenshteinMetric().compare(charArray1, charArray2)(options) - - def compareWithWeightedLevenshtein(string1: String, string2: String) - (options: (BigDecimal, BigDecimal, BigDecimal)): Option[Double] = - - WeightedLevenshteinMetric().compare(string1, string2)(options) - - def diceSorensen: DiceSorensenMetric.type = DiceSorensenMetric - - def hamming: HammingMetric.type = HammingMetric - - def jaro: JaroMetric.type = JaroMetric - - def jaroWinkler: JaroWinklerMetric.type = JaroWinklerMetric - - def levenshtein: LevenshteinMetric.type = LevenshteinMetric - - def metaphone: MetaphoneMetric.type = MetaphoneMetric - - def nGram: NGramMetric.type = NGramMetric - - def nysiis: NysiisMetric.type = NysiisMetric - - def refinedSoundex: RefinedSoundexMetric.type = RefinedSoundexMetric - - def soundex: SoundexMetric.type = SoundexMetric - - def weightedLevenshtein: WeightedLevenshteinMetric.type = WeightedLevenshteinMetric } diff --git a/core/source/core/scala/com/rockymadden/stringmetric/filter/AsciiControlOnlyStringFilter.scala b/core/source/core/scala/com/rockymadden/stringmetric/filter/AsciiControlOnlyStringFilter.scala index 7fa05e3..ed39e1f 100755 --- a/core/source/core/scala/com/rockymadden/stringmetric/filter/AsciiControlOnlyStringFilter.scala +++ b/core/source/core/scala/com/rockymadden/stringmetric/filter/AsciiControlOnlyStringFilter.scala @@ -1,9 +1,9 @@ package com.rockymadden.stringmetric.filter -import com.rockymadden.stringmetric.StringFilterLike +import com.rockymadden.stringmetric.StringFilter /** Ensures only ASCII control characters matter. */ -trait AsciiControlOnlyStringFilter extends StringFilterLike { +trait AsciiControlOnlyStringFilter extends StringFilter { abstract override def filter(charArray: Array[Char]): Array[Char] = super.filter(charArray.filter(c => (c <= 31 || c == 127))) diff --git a/core/source/core/scala/com/rockymadden/stringmetric/filter/AsciiControlStringFilter.scala b/core/source/core/scala/com/rockymadden/stringmetric/filter/AsciiControlStringFilter.scala index 382fc43..b1b59f8 100755 --- a/core/source/core/scala/com/rockymadden/stringmetric/filter/AsciiControlStringFilter.scala +++ b/core/source/core/scala/com/rockymadden/stringmetric/filter/AsciiControlStringFilter.scala @@ -1,9 +1,9 @@ package com.rockymadden.stringmetric.filter -import com.rockymadden.stringmetric.StringFilterLike +import com.rockymadden.stringmetric.StringFilter /** Ensures ASCII controls do not matter. */ -trait AsciiControlStringFilter extends StringFilterLike { +trait AsciiControlStringFilter extends StringFilter { abstract override def filter(charArray: Array[Char]): Array[Char] = super.filter(charArray.filter(c => !(c <= 31 || c == 127))) diff --git a/core/source/core/scala/com/rockymadden/stringmetric/filter/AsciiLetterCaseStringFilter.scala b/core/source/core/scala/com/rockymadden/stringmetric/filter/AsciiLetterCaseStringFilter.scala index 68cbd59..f9c3aa4 100755 --- a/core/source/core/scala/com/rockymadden/stringmetric/filter/AsciiLetterCaseStringFilter.scala +++ b/core/source/core/scala/com/rockymadden/stringmetric/filter/AsciiLetterCaseStringFilter.scala @@ -1,9 +1,9 @@ package com.rockymadden.stringmetric.filter -import com.rockymadden.stringmetric.StringFilterLike +import com.rockymadden.stringmetric.StringFilter /** Ensures ASCII letter case-sensitivity does not matter. */ -trait AsciiLetterCaseStringFilter extends StringFilterLike { +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)) diff --git a/core/source/core/scala/com/rockymadden/stringmetric/filter/AsciiLetterNumberOnlyStringFilter.scala b/core/source/core/scala/com/rockymadden/stringmetric/filter/AsciiLetterNumberOnlyStringFilter.scala index c1fcbd4..b613442 100755 --- a/core/source/core/scala/com/rockymadden/stringmetric/filter/AsciiLetterNumberOnlyStringFilter.scala +++ b/core/source/core/scala/com/rockymadden/stringmetric/filter/AsciiLetterNumberOnlyStringFilter.scala @@ -1,9 +1,9 @@ package com.rockymadden.stringmetric.filter -import com.rockymadden.stringmetric.StringFilterLike +import com.rockymadden.stringmetric.StringFilter /** Ensures only ASCII letters and numbers matter. */ -trait AsciiLetterNumberOnlyStringFilter extends StringFilterLike { +trait AsciiLetterNumberOnlyStringFilter extends StringFilter { abstract override def filter(charArray: Array[Char]): Array[Char] = super.filter( charArray.filter(c => diff --git a/core/source/core/scala/com/rockymadden/stringmetric/filter/AsciiLetterNumberStringFilter.scala b/core/source/core/scala/com/rockymadden/stringmetric/filter/AsciiLetterNumberStringFilter.scala index 1c47416..e45d30a 100755 --- a/core/source/core/scala/com/rockymadden/stringmetric/filter/AsciiLetterNumberStringFilter.scala +++ b/core/source/core/scala/com/rockymadden/stringmetric/filter/AsciiLetterNumberStringFilter.scala @@ -1,9 +1,9 @@ package com.rockymadden.stringmetric.filter -import com.rockymadden.stringmetric.StringFilterLike +import com.rockymadden.stringmetric.StringFilter /** Ensures ASCII letters and numbers do not matter. */ -trait AsciiLetterNumberStringFilter extends StringFilterLike { +trait AsciiLetterNumberStringFilter extends StringFilter { abstract override def filter(charArray: Array[Char]): Array[Char] = super.filter( charArray.filter(c => diff --git a/core/source/core/scala/com/rockymadden/stringmetric/filter/AsciiLetterOnlyStringFilter.scala b/core/source/core/scala/com/rockymadden/stringmetric/filter/AsciiLetterOnlyStringFilter.scala index 09c40c5..07422aa 100755 --- a/core/source/core/scala/com/rockymadden/stringmetric/filter/AsciiLetterOnlyStringFilter.scala +++ b/core/source/core/scala/com/rockymadden/stringmetric/filter/AsciiLetterOnlyStringFilter.scala @@ -1,9 +1,9 @@ package com.rockymadden.stringmetric.filter -import com.rockymadden.stringmetric.StringFilterLike +import com.rockymadden.stringmetric.StringFilter /** Ensures only ASCII letters matter. */ -trait AsciiLetterOnlyStringFilter extends StringFilterLike { +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)))) diff --git a/core/source/core/scala/com/rockymadden/stringmetric/filter/AsciiLetterStringFilter.scala b/core/source/core/scala/com/rockymadden/stringmetric/filter/AsciiLetterStringFilter.scala index c9c0890..08a05ee 100755 --- a/core/source/core/scala/com/rockymadden/stringmetric/filter/AsciiLetterStringFilter.scala +++ b/core/source/core/scala/com/rockymadden/stringmetric/filter/AsciiLetterStringFilter.scala @@ -1,9 +1,9 @@ package com.rockymadden.stringmetric.filter -import com.rockymadden.stringmetric.StringFilterLike +import com.rockymadden.stringmetric.StringFilter /** Ensures ASCII letters do not matter. */ -trait AsciiLetterStringFilter extends StringFilterLike { +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)))) diff --git a/core/source/core/scala/com/rockymadden/stringmetric/filter/AsciiNumberOnlyStringFilter.scala b/core/source/core/scala/com/rockymadden/stringmetric/filter/AsciiNumberOnlyStringFilter.scala index e98f871..1a18645 100755 --- a/core/source/core/scala/com/rockymadden/stringmetric/filter/AsciiNumberOnlyStringFilter.scala +++ b/core/source/core/scala/com/rockymadden/stringmetric/filter/AsciiNumberOnlyStringFilter.scala @@ -1,9 +1,9 @@ package com.rockymadden.stringmetric.filter -import com.rockymadden.stringmetric.StringFilterLike +import com.rockymadden.stringmetric.StringFilter /** Ensures only ASCII numbers matter. */ -trait AsciiNumberOnlyStringFilter extends StringFilterLike { +trait AsciiNumberOnlyStringFilter extends StringFilter { abstract override def filter(charArray: Array[Char]): Array[Char] = super.filter(charArray.filter(c => (c >= 48 && c <= 57 ))) diff --git a/core/source/core/scala/com/rockymadden/stringmetric/filter/AsciiNumberStringFilter.scala b/core/source/core/scala/com/rockymadden/stringmetric/filter/AsciiNumberStringFilter.scala index d74b266..860d9d3 100755 --- a/core/source/core/scala/com/rockymadden/stringmetric/filter/AsciiNumberStringFilter.scala +++ b/core/source/core/scala/com/rockymadden/stringmetric/filter/AsciiNumberStringFilter.scala @@ -1,9 +1,9 @@ package com.rockymadden.stringmetric.filter -import com.rockymadden.stringmetric.StringFilterLike +import com.rockymadden.stringmetric.StringFilter /** Ensures ASCII numbers do not matter. */ -trait AsciiNumberStringFilter extends StringFilterLike { +trait AsciiNumberStringFilter extends StringFilter { abstract override def filter(charArray: Array[Char]): Array[Char] = super.filter(charArray.filter(c => !(c >= 48 && c <= 57))) diff --git a/core/source/core/scala/com/rockymadden/stringmetric/filter/AsciiSpaceStringFilter.scala b/core/source/core/scala/com/rockymadden/stringmetric/filter/AsciiSpaceStringFilter.scala index ff3df19..161b9fe 100755 --- a/core/source/core/scala/com/rockymadden/stringmetric/filter/AsciiSpaceStringFilter.scala +++ b/core/source/core/scala/com/rockymadden/stringmetric/filter/AsciiSpaceStringFilter.scala @@ -1,9 +1,9 @@ package com.rockymadden.stringmetric.filter -import com.rockymadden.stringmetric.StringFilterLike +import com.rockymadden.stringmetric.StringFilter /** Ensures ASCII spaces do not matter. */ -trait AsciiSpaceStringFilter extends StringFilterLike { +trait AsciiSpaceStringFilter extends StringFilter { abstract override def filter(charArray: Array[Char]): Array[Char] = super.filter(charArray.filter(_ != ' ')) abstract override def filter(string: String): String = filter(string.toCharArray).mkString diff --git a/core/source/core/scala/com/rockymadden/stringmetric/filter/AsciiSymbolOnlyStringFilter.scala b/core/source/core/scala/com/rockymadden/stringmetric/filter/AsciiSymbolOnlyStringFilter.scala index 605a3c0..2876057 100755 --- a/core/source/core/scala/com/rockymadden/stringmetric/filter/AsciiSymbolOnlyStringFilter.scala +++ b/core/source/core/scala/com/rockymadden/stringmetric/filter/AsciiSymbolOnlyStringFilter.scala @@ -1,9 +1,9 @@ package com.rockymadden.stringmetric.filter -import com.rockymadden.stringmetric.StringFilterLike +import com.rockymadden.stringmetric.StringFilter /** Ensures only ASCII symbols matter. */ -trait AsciiSymbolOnlyStringFilter extends StringFilterLike { +trait AsciiSymbolOnlyStringFilter extends StringFilter { abstract override def filter(charArray: Array[Char]): Array[Char] = super.filter( charArray.filter(c => diff --git a/core/source/core/scala/com/rockymadden/stringmetric/filter/AsciiSymbolStringFilter.scala b/core/source/core/scala/com/rockymadden/stringmetric/filter/AsciiSymbolStringFilter.scala index 6ed85ed..0431f05 100755 --- a/core/source/core/scala/com/rockymadden/stringmetric/filter/AsciiSymbolStringFilter.scala +++ b/core/source/core/scala/com/rockymadden/stringmetric/filter/AsciiSymbolStringFilter.scala @@ -1,9 +1,9 @@ package com.rockymadden.stringmetric.filter -import com.rockymadden.stringmetric.StringFilterLike +import com.rockymadden.stringmetric.StringFilter /** Ensures ASCII symbols do not matter. */ -trait AsciiSymbolStringFilter extends StringFilterLike { +trait AsciiSymbolStringFilter extends StringFilter { abstract override def filter(charArray: Array[Char]): Array[Char] = super.filter( charArray.filter(c => diff --git a/core/source/core/scala/com/rockymadden/stringmetric/filter/StringFilterDelegate.scala b/core/source/core/scala/com/rockymadden/stringmetric/filter/StringFilterDelegate.scala index 3264568..8ece42d 100755 --- a/core/source/core/scala/com/rockymadden/stringmetric/filter/StringFilterDelegate.scala +++ b/core/source/core/scala/com/rockymadden/stringmetric/filter/StringFilterDelegate.scala @@ -1,8 +1,8 @@ package com.rockymadden.stringmetric.filter -import com.rockymadden.stringmetric.StringFilterLike +import com.rockymadden.stringmetric.StringFilter -class StringFilterDelegate extends StringFilterLike { +class StringFilterDelegate extends StringFilter { override def filter(charArray: Array[Char]): Array[Char] = charArray override def filter(string: String): String = string diff --git a/core/source/core/scala/com/rockymadden/stringmetric/phonetic/MetaphoneAlgorithm.scala b/core/source/core/scala/com/rockymadden/stringmetric/phonetic/MetaphoneAlgorithm.scala index 796a922..573d90b 100755 --- a/core/source/core/scala/com/rockymadden/stringmetric/phonetic/MetaphoneAlgorithm.scala +++ b/core/source/core/scala/com/rockymadden/stringmetric/phonetic/MetaphoneAlgorithm.scala @@ -1,11 +1,11 @@ package com.rockymadden.stringmetric.phonetic -import com.rockymadden.stringmetric.{ StringAlgorithmLike, StringFilterLike } +import com.rockymadden.stringmetric.StringAlgorithm import com.rockymadden.stringmetric.phonetic.Alphabet._ import scala.annotation.{ switch, tailrec } /** An implementation of the Metaphone algorithm. */ -class MetaphoneAlgorithm extends StringAlgorithmLike[String] with StringFilterLike { +class MetaphoneAlgorithm extends StringAlgorithm[String] { final override def compute(charArray: Array[Char]): Option[Array[Char]] = { val fca = filter(charArray) diff --git a/core/source/core/scala/com/rockymadden/stringmetric/phonetic/MetaphoneMetric.scala b/core/source/core/scala/com/rockymadden/stringmetric/phonetic/MetaphoneMetric.scala index a9d0a3c..5e5dc70 100755 --- a/core/source/core/scala/com/rockymadden/stringmetric/phonetic/MetaphoneMetric.scala +++ b/core/source/core/scala/com/rockymadden/stringmetric/phonetic/MetaphoneMetric.scala @@ -1,10 +1,10 @@ package com.rockymadden.stringmetric.phonetic -import com.rockymadden.stringmetric.{ StringFilterLike, StringMetricLike } +import com.rockymadden.stringmetric.StringMetric import com.rockymadden.stringmetric.phonetic.Alphabet._ /** A implementation of Metaphone metric. */ -class MetaphoneMetric extends StringMetricLike[Boolean] with StringFilterLike { +class MetaphoneMetric extends StringMetric[Boolean] { final override def compare(charArray1: Array[Char], charArray2: Array[Char]): Option[Boolean] = { val fca1 = filter(charArray1) lazy val fca2 = filter(charArray2) diff --git a/core/source/core/scala/com/rockymadden/stringmetric/phonetic/NysiisAlgorithm.scala b/core/source/core/scala/com/rockymadden/stringmetric/phonetic/NysiisAlgorithm.scala index b92bbcd..b218a9c 100755 --- a/core/source/core/scala/com/rockymadden/stringmetric/phonetic/NysiisAlgorithm.scala +++ b/core/source/core/scala/com/rockymadden/stringmetric/phonetic/NysiisAlgorithm.scala @@ -1,11 +1,11 @@ package com.rockymadden.stringmetric.phonetic -import com.rockymadden.stringmetric.{ StringAlgorithmLike, StringFilterLike } +import com.rockymadden.stringmetric.StringAlgorithm import com.rockymadden.stringmetric.phonetic.Alphabet._ import scala.annotation.{ switch, tailrec } /** An implementation of the NYSIIS algorithm. */ -class NysiisAlgorithm extends StringAlgorithmLike[String] with StringFilterLike { +class NysiisAlgorithm extends StringAlgorithm[String] { final override def compute(charArray: Array[Char]): Option[Array[Char]] = { val fca = filter(charArray) diff --git a/core/source/core/scala/com/rockymadden/stringmetric/phonetic/NysiisMetric.scala b/core/source/core/scala/com/rockymadden/stringmetric/phonetic/NysiisMetric.scala index 52b3e80..2595593 100755 --- a/core/source/core/scala/com/rockymadden/stringmetric/phonetic/NysiisMetric.scala +++ b/core/source/core/scala/com/rockymadden/stringmetric/phonetic/NysiisMetric.scala @@ -1,10 +1,10 @@ package com.rockymadden.stringmetric.phonetic -import com.rockymadden.stringmetric.{ StringFilterLike, StringMetricLike } +import com.rockymadden.stringmetric.StringMetric import com.rockymadden.stringmetric.phonetic.Alphabet._ /** An implementation of the NYSIIS metric. */ -class NysiisMetric extends StringMetricLike[Boolean] with StringFilterLike { +class NysiisMetric extends StringMetric[Boolean] { final override def compare(charArray1: Array[Char], charArray2: Array[Char]): Option[Boolean] = { val unequal = (c1: Char, c2: Char) => { val lc1 = c1.toLower diff --git a/core/source/core/scala/com/rockymadden/stringmetric/phonetic/RefinedNysiisAlgorithm.scala b/core/source/core/scala/com/rockymadden/stringmetric/phonetic/RefinedNysiisAlgorithm.scala index 54ff8be..8f81e6c 100755 --- a/core/source/core/scala/com/rockymadden/stringmetric/phonetic/RefinedNysiisAlgorithm.scala +++ b/core/source/core/scala/com/rockymadden/stringmetric/phonetic/RefinedNysiisAlgorithm.scala @@ -1,11 +1,11 @@ package com.rockymadden.stringmetric.phonetic -import com.rockymadden.stringmetric.{ StringAlgorithmLike, StringFilterLike } +import com.rockymadden.stringmetric.StringAlgorithm import com.rockymadden.stringmetric.phonetic.Alphabet._ import scala.annotation.{ switch, tailrec } /** An implementation of the refined NYSIIS algorithm. */ -class RefinedNysiisAlgorithm extends StringAlgorithmLike[String] with StringFilterLike { +class RefinedNysiisAlgorithm extends StringAlgorithm[String] { final override def compute(charArray: Array[Char]): Option[Array[Char]] = { val fca = filter(charArray) diff --git a/core/source/core/scala/com/rockymadden/stringmetric/phonetic/RefinedNysiisMetric.scala b/core/source/core/scala/com/rockymadden/stringmetric/phonetic/RefinedNysiisMetric.scala index a1ffcdd..290cd15 100755 --- a/core/source/core/scala/com/rockymadden/stringmetric/phonetic/RefinedNysiisMetric.scala +++ b/core/source/core/scala/com/rockymadden/stringmetric/phonetic/RefinedNysiisMetric.scala @@ -1,10 +1,10 @@ package com.rockymadden.stringmetric.phonetic -import com.rockymadden.stringmetric.{ StringFilterLike, StringMetricLike } +import com.rockymadden.stringmetric.StringMetric import com.rockymadden.stringmetric.phonetic.Alphabet._ /** An implementation of the refined NYSIIS metric. */ -class RefinedNysiisMetric extends StringMetricLike[Boolean] with StringFilterLike { +class RefinedNysiisMetric extends StringMetric[Boolean] { final override def compare(charArray1: Array[Char], charArray2: Array[Char]): Option[Boolean] = { val unequal = (c1: Char, c2: Char) => { val lc1 = c1.toLower diff --git a/core/source/core/scala/com/rockymadden/stringmetric/phonetic/RefinedSoundexAlgorithm.scala b/core/source/core/scala/com/rockymadden/stringmetric/phonetic/RefinedSoundexAlgorithm.scala index 3a3deaa..60f2a31 100755 --- a/core/source/core/scala/com/rockymadden/stringmetric/phonetic/RefinedSoundexAlgorithm.scala +++ b/core/source/core/scala/com/rockymadden/stringmetric/phonetic/RefinedSoundexAlgorithm.scala @@ -1,11 +1,11 @@ package com.rockymadden.stringmetric.phonetic -import com.rockymadden.stringmetric.{ StringAlgorithmLike, StringFilterLike } +import com.rockymadden.stringmetric.StringAlgorithm import com.rockymadden.stringmetric.phonetic.Alphabet._ import scala.annotation.{ switch, tailrec } /** An implementation of the refined Soundex algorithm. */ -class RefinedSoundexAlgorithm extends StringAlgorithmLike[String] with StringFilterLike { +class RefinedSoundexAlgorithm extends StringAlgorithm[String] { final override def compute(charArray: Array[Char]): Option[Array[Char]] = { val fca = filter(charArray) diff --git a/core/source/core/scala/com/rockymadden/stringmetric/phonetic/RefinedSoundexMetric.scala b/core/source/core/scala/com/rockymadden/stringmetric/phonetic/RefinedSoundexMetric.scala index dae089a..f65fc4e 100755 --- a/core/source/core/scala/com/rockymadden/stringmetric/phonetic/RefinedSoundexMetric.scala +++ b/core/source/core/scala/com/rockymadden/stringmetric/phonetic/RefinedSoundexMetric.scala @@ -1,10 +1,10 @@ package com.rockymadden.stringmetric.phonetic -import com.rockymadden.stringmetric.{ StringFilterLike, StringMetricLike } +import com.rockymadden.stringmetric.StringMetric import com.rockymadden.stringmetric.phonetic.Alphabet._ /** An implementation of the refined Soundex metric. */ -class RefinedSoundexMetric extends StringMetricLike[Boolean] with StringFilterLike { +class RefinedSoundexMetric extends StringMetric[Boolean] { final override def compare(charArray1: Array[Char], charArray2: Array[Char]): Option[Boolean] = { val fca1 = filter(charArray1) lazy val fca2 = filter(charArray2) diff --git a/core/source/core/scala/com/rockymadden/stringmetric/phonetic/SoundexAlgorithm.scala b/core/source/core/scala/com/rockymadden/stringmetric/phonetic/SoundexAlgorithm.scala index f322225..4b217a2 100755 --- a/core/source/core/scala/com/rockymadden/stringmetric/phonetic/SoundexAlgorithm.scala +++ b/core/source/core/scala/com/rockymadden/stringmetric/phonetic/SoundexAlgorithm.scala @@ -1,11 +1,11 @@ package com.rockymadden.stringmetric.phonetic -import com.rockymadden.stringmetric.{ StringAlgorithmLike, StringFilterLike } +import com.rockymadden.stringmetric.StringAlgorithm import com.rockymadden.stringmetric.phonetic.Alphabet._ import scala.annotation.{ switch, tailrec } /** An implementation of the Soundex algorithm. */ -class SoundexAlgorithm extends StringAlgorithmLike[String] with StringFilterLike { +class SoundexAlgorithm extends StringAlgorithm[String] { final override def compute(charArray: Array[Char]): Option[Array[Char]] = { val fca = filter(charArray) diff --git a/core/source/core/scala/com/rockymadden/stringmetric/phonetic/SoundexMetric.scala b/core/source/core/scala/com/rockymadden/stringmetric/phonetic/SoundexMetric.scala index bfd0dd5..89a26be 100755 --- a/core/source/core/scala/com/rockymadden/stringmetric/phonetic/SoundexMetric.scala +++ b/core/source/core/scala/com/rockymadden/stringmetric/phonetic/SoundexMetric.scala @@ -1,10 +1,10 @@ package com.rockymadden.stringmetric.phonetic -import com.rockymadden.stringmetric.{ StringFilterLike, StringMetricLike } +import com.rockymadden.stringmetric.StringMetric import com.rockymadden.stringmetric.phonetic.Alphabet._ /** An implementation of the Soundex metric. */ -class SoundexMetric extends StringMetricLike[Boolean] with StringFilterLike { +class SoundexMetric extends StringMetric[Boolean] { final override def compare(charArray1: Array[Char], charArray2: Array[Char]): Option[Boolean] = { val fca1 = filter(charArray1) lazy val fca2 = filter(charArray2) diff --git a/core/source/core/scala/com/rockymadden/stringmetric/similarity/DiceSorensenMetric.scala b/core/source/core/scala/com/rockymadden/stringmetric/similarity/DiceSorensenMetric.scala index f5afcb2..9e3e968 100755 --- a/core/source/core/scala/com/rockymadden/stringmetric/similarity/DiceSorensenMetric.scala +++ b/core/source/core/scala/com/rockymadden/stringmetric/similarity/DiceSorensenMetric.scala @@ -1,12 +1,12 @@ package com.rockymadden.stringmetric.similarity -import com.rockymadden.stringmetric.{ ConfigurableStringMetricLike, MatchTuple, StringFilterLike } +import com.rockymadden.stringmetric.{ ConfigurableStringMetric, MatchTuple } /** * An implementation of the Dice/Sorensen metric. This implementation differs in that n-gram size is required. * Traditionally, the algorithm uses bigrams. */ -class DiceSorensenMetric extends ConfigurableStringMetricLike[Double, Int] with StringFilterLike { +class DiceSorensenMetric extends ConfigurableStringMetric[Double, Int] { final override def compare(charArray1: Array[Char], charArray2: Array[Char])(implicit n: Int): Option[Double] = { if (n <= 0) throw new IllegalArgumentException("Expected valid n.") diff --git a/core/source/core/scala/com/rockymadden/stringmetric/similarity/HammingMetric.scala b/core/source/core/scala/com/rockymadden/stringmetric/similarity/HammingMetric.scala index d16554b..8256929 100755 --- a/core/source/core/scala/com/rockymadden/stringmetric/similarity/HammingMetric.scala +++ b/core/source/core/scala/com/rockymadden/stringmetric/similarity/HammingMetric.scala @@ -1,9 +1,9 @@ package com.rockymadden.stringmetric.similarity -import com.rockymadden.stringmetric.{ CompareTuple, StringFilterLike, StringMetricLike } +import com.rockymadden.stringmetric.{ CompareTuple, StringMetric } /** An implementation of the Hamming metric. */ -class HammingMetric extends StringMetricLike[Int] with StringFilterLike { +class HammingMetric extends StringMetric[Int] { final override def compare(charArray1: Array[Char], charArray2: Array[Char]): Option[Int] = { val fca1 = filter(charArray1) lazy val fca2 = filter(charArray2) diff --git a/core/source/core/scala/com/rockymadden/stringmetric/similarity/JaroMetric.scala b/core/source/core/scala/com/rockymadden/stringmetric/similarity/JaroMetric.scala index a21bd6e..c44fde2 100755 --- a/core/source/core/scala/com/rockymadden/stringmetric/similarity/JaroMetric.scala +++ b/core/source/core/scala/com/rockymadden/stringmetric/similarity/JaroMetric.scala @@ -1,13 +1,13 @@ package com.rockymadden.stringmetric.similarity -import com.rockymadden.stringmetric.{ CompareTuple, MatchTuple, StringFilterLike, StringMetricLike } +import com.rockymadden.stringmetric.{ CompareTuple, MatchTuple, StringMetric } import scala.collection.mutable.{ ArrayBuffer, HashSet } /** * An implementation of the Jaro metric. One differing detail in this implementation is that if a character is matched * in string2, it cannot be matched upon again. This results in a more penalized distance in these scenarios. */ -class JaroMetric extends StringMetricLike[Double] with StringFilterLike { +class JaroMetric extends StringMetric[Double] { final override def compare(charArray1: Array[Char], charArray2: Array[Char]): Option[Double] = { val fca1 = filter(charArray1) lazy val fca2 = filter(charArray2) diff --git a/core/source/core/scala/com/rockymadden/stringmetric/similarity/JaroWinklerMetric.scala b/core/source/core/scala/com/rockymadden/stringmetric/similarity/JaroWinklerMetric.scala index 4239ed4..56dfc55 100755 --- a/core/source/core/scala/com/rockymadden/stringmetric/similarity/JaroWinklerMetric.scala +++ b/core/source/core/scala/com/rockymadden/stringmetric/similarity/JaroWinklerMetric.scala @@ -1,13 +1,13 @@ package com.rockymadden.stringmetric.similarity -import com.rockymadden.stringmetric.{ StringFilterLike, StringMetricLike } +import com.rockymadden.stringmetric.StringMetric /** * An implementation of the Jaro-Winkler metric. One differing detail in this implementation is that if a character is * matched in string2, it cannot be matched upon again. This results in a more penalized distance in these scenarios * (e.g. comparing henka and henkan distance is 0.9666 versus the typical 0.9722). */ -class JaroWinklerMetric extends StringMetricLike[Double] with StringFilterLike { +class JaroWinklerMetric extends StringMetric[Double] { final override def compare(charArray1: Array[Char], charArray2: Array[Char]): Option[Double] = { val fca1 = filter(charArray1) val fca2 = filter(charArray2) diff --git a/core/source/core/scala/com/rockymadden/stringmetric/similarity/LevenshteinMetric.scala b/core/source/core/scala/com/rockymadden/stringmetric/similarity/LevenshteinMetric.scala index f7d47b3..7dd1643 100755 --- a/core/source/core/scala/com/rockymadden/stringmetric/similarity/LevenshteinMetric.scala +++ b/core/source/core/scala/com/rockymadden/stringmetric/similarity/LevenshteinMetric.scala @@ -1,9 +1,9 @@ package com.rockymadden.stringmetric.similarity -import com.rockymadden.stringmetric.{ CompareTuple, StringFilterLike, StringMetricLike } +import com.rockymadden.stringmetric.{ CompareTuple, StringMetric } /** An implementation of the Levenshtein metric. */ -class LevenshteinMetric extends StringMetricLike[Int] with StringFilterLike { +class LevenshteinMetric extends StringMetric[Int] { final override def compare(charArray1: Array[Char], charArray2: Array[Char]): Option[Int] = { val fca1 = filter(charArray1) lazy val fca2 = filter(charArray2) diff --git a/core/source/core/scala/com/rockymadden/stringmetric/similarity/NGramAlgorithm.scala b/core/source/core/scala/com/rockymadden/stringmetric/similarity/NGramAlgorithm.scala index 9f96794..b50ed7d 100755 --- a/core/source/core/scala/com/rockymadden/stringmetric/similarity/NGramAlgorithm.scala +++ b/core/source/core/scala/com/rockymadden/stringmetric/similarity/NGramAlgorithm.scala @@ -1,10 +1,10 @@ package com.rockymadden.stringmetric.similarity -import com.rockymadden.stringmetric.{ ConfigurableStringAlgorithmLike, StringFilterLike } +import com.rockymadden.stringmetric.ConfigurableStringAlgorithm import scala.annotation.tailrec /** An implementation of the N-Gram algorithm. */ -class NGramAlgorithm extends ConfigurableStringAlgorithmLike[Array[String], Int] with StringFilterLike { +class NGramAlgorithm extends ConfigurableStringAlgorithm[Array[String], Int] { final override def compute(charArray: Array[Char])(implicit n: Int): Option[Array[Array[Char]]] = { if (n <= 0) throw new IllegalArgumentException("Expected valid n.") diff --git a/core/source/core/scala/com/rockymadden/stringmetric/similarity/NGramMetric.scala b/core/source/core/scala/com/rockymadden/stringmetric/similarity/NGramMetric.scala index 362c06c..c621765 100755 --- a/core/source/core/scala/com/rockymadden/stringmetric/similarity/NGramMetric.scala +++ b/core/source/core/scala/com/rockymadden/stringmetric/similarity/NGramMetric.scala @@ -1,10 +1,10 @@ package com.rockymadden.stringmetric.similarity -import com.rockymadden.stringmetric.{ ConfigurableStringMetricLike, MatchTuple, StringFilterLike } +import com.rockymadden.stringmetric.{ ConfigurableStringMetric, MatchTuple } import scala.math /** An implementation of the N-Gram metric. */ -class NGramMetric extends ConfigurableStringMetricLike[Double, Int] with StringFilterLike { +class NGramMetric extends ConfigurableStringMetric[Double, Int] { final override def compare(charArray1: Array[Char], charArray2: Array[Char])(implicit n: Int): Option[Double] = { if (n <= 0) throw new IllegalArgumentException("Expected valid n.") diff --git a/core/source/core/scala/com/rockymadden/stringmetric/similarity/RatcliffObershelpMetric.scala b/core/source/core/scala/com/rockymadden/stringmetric/similarity/RatcliffObershelpMetric.scala index 23959b8..7d2ef10 100755 --- a/core/source/core/scala/com/rockymadden/stringmetric/similarity/RatcliffObershelpMetric.scala +++ b/core/source/core/scala/com/rockymadden/stringmetric/similarity/RatcliffObershelpMetric.scala @@ -1,9 +1,9 @@ package com.rockymadden.stringmetric.similarity -import com.rockymadden.stringmetric.{ CompareTuple, StringFilterLike, StringMetricLike } +import com.rockymadden.stringmetric.{ CompareTuple, StringMetric } /** An implementation of the Ratcliff/Obershelp metric. */ -class RatcliffObershelpMetric extends StringMetricLike[Double] with StringFilterLike { +class RatcliffObershelpMetric extends StringMetric[Double] { final override def compare(charArray1: Array[Char], charArray2: Array[Char]): Option[Double] = { val fca1 = filter(charArray1) lazy val fca2 = filter(charArray2) diff --git a/core/source/core/scala/com/rockymadden/stringmetric/similarity/WeightedLevenshteinMetric.scala b/core/source/core/scala/com/rockymadden/stringmetric/similarity/WeightedLevenshteinMetric.scala index 05f8c82..cbc9fe5 100755 --- a/core/source/core/scala/com/rockymadden/stringmetric/similarity/WeightedLevenshteinMetric.scala +++ b/core/source/core/scala/com/rockymadden/stringmetric/similarity/WeightedLevenshteinMetric.scala @@ -1,11 +1,11 @@ package com.rockymadden.stringmetric.similarity -import com.rockymadden.stringmetric.{ CompareTuple, ConfigurableStringMetricLike, StringFilterLike } +import com.rockymadden.stringmetric.{ CompareTuple, ConfigurableStringMetric } import scala.math.BigDecimal /** An implementation of a weighted Levenshtein metric. */ class WeightedLevenshteinMetric - extends ConfigurableStringMetricLike[Double, (BigDecimal, BigDecimal, BigDecimal)] with StringFilterLike { + extends ConfigurableStringMetric[Double, (BigDecimal, BigDecimal, BigDecimal)] { /** Options order is delete, insert, then substitute weight. */ final override def compare(charArray1: Array[Char], charArray2: Array[Char]) @@ -23,8 +23,8 @@ Available on the [Maven Central Repository](http://search.maven.org/#search%7Cga * __artifactId__: stringmetric-core * __artifactId__: stringmetric-cli -## Generated Documentation -[Scaladoc](http://rockymadden.com/stringmetric/scaladoc/) is available on the project website. +## Docs +[Scaladoc](http://rockymadden.com/stringmetric/scaladoc/) is available on the project website. ## Similarity package Useful for approximate string matching and measurement of string distance. Most metrics calculate the similarity of two strings as a double with a value between 0 and 1. A value of 0 being completely different and a value of 1 being completely similar. @@ -289,10 +289,10 @@ Basic example with stacked filter. Filters are applied in reverse order: ``` ## Convenience objects -The StringMetricLike, StringAlgorithmLike, and StringFilterLike standalone convenience objects are available to make interactions with the library easier: +The StringMetric, StringAlgorithm, StringFilter, ConfigurableStringAlgorithm, and ConfigurableStringMetric standalone convenience objects are available to make interactions with the library easier: ```scala -StringMetricLike.compareWithJaroWinkler("string1", "string2") -StringAlgorithmLike.computeWithMetaphone("string1", "string2") +StringMetric.compareWithJaroWinkler("string1", "string2") +StringAlgorithm.computeWithMetaphone("string1", "string2") ``` ## Command line interfaces |