summaryrefslogtreecommitdiff
path: root/core
diff options
context:
space:
mode:
authorRocky Madden <git@rockymadden.com>2012-11-20 15:24:46 -0700
committerRocky Madden <git@rockymadden.com>2012-11-20 15:24:46 -0700
commit11a858e84ae72be76ce6ebb9d5730bb152fa35f2 (patch)
treebe072bf4c19d50cc4e2d9d91950363e8e27b70e3 /core
parentc92a5365eeb76ffc3d41015650b92e58fde094ce (diff)
downloadstringmetric-11a858e84ae72be76ce6ebb9d5730bb152fa35f2.tar.gz
stringmetric-11a858e84ae72be76ce6ebb9d5730bb152fa35f2.tar.bz2
stringmetric-11a858e84ae72be76ce6ebb9d5730bb152fa35f2.zip
Optimized for tableswitch.
Diffstat (limited to 'core')
-rwxr-xr-xcore/source/core/scala/org/hashtree/stringmetric/phonetic/MetaphoneAlgorithm.scala30
-rwxr-xr-xcore/source/core/scala/org/hashtree/stringmetric/similarity/NGramMetric.scala3
2 files changed, 17 insertions, 16 deletions
diff --git a/core/source/core/scala/org/hashtree/stringmetric/phonetic/MetaphoneAlgorithm.scala b/core/source/core/scala/org/hashtree/stringmetric/phonetic/MetaphoneAlgorithm.scala
index a4fc811..944025c 100755
--- a/core/source/core/scala/org/hashtree/stringmetric/phonetic/MetaphoneAlgorithm.scala
+++ b/core/source/core/scala/org/hashtree/stringmetric/phonetic/MetaphoneAlgorithm.scala
@@ -2,7 +2,7 @@ package org.hashtree.stringmetric.phonetic
import org.hashtree.stringmetric.{ FilterableStringAlgorithm, StringAlgorithm, StringFilter }
import org.hashtree.stringmetric.filter.StringFilterDelegate
-import scala.annotation.tailrec
+import scala.annotation.{ switch, tailrec }
/** An implementation of the Metaphone [[org.hashtree.stringmetric.StringAlgorithm]]. */
object MetaphoneAlgorithm extends StringAlgorithm with FilterableStringAlgorithm {
@@ -97,18 +97,20 @@ object MetaphoneAlgorithm extends StringAlgorithm with FilterableStringAlgorithm
}
private[this] def transcodeHead(ca: Array[Char]) = {
- if (ca.length == 0) ca
- else if (ca.length == 1) if (ca.head == 'x') Array('s') else ca
- else
- ca.head match {
- case 'a' if (ca(1) == 'e') => ca.tail
- case 'g' if (ca(1) == 'n') => ca.tail
- case 'k' if (ca(1) == 'n') => ca.tail
- case 'p' if (ca(1) == 'n') => ca.tail
- case 'w' if (ca(1) == 'r') => ca.tail
- case 'w' if (ca(1) == 'h') => 'w' +: ca.drop(2)
- case 'x' => 's' +: ca.tail
- case _ => ca
- }
+ (ca.length: @switch) match {
+ case 0 => ca
+ case 1 => if (ca.head == 'x') Array('s') else ca
+ case _ =>
+ ca.head match {
+ case 'a' if (ca(1) == 'e') => ca.tail
+ case 'g' if (ca(1) == 'n') => ca.tail
+ case 'k' if (ca(1) == 'n') => ca.tail
+ case 'p' if (ca(1) == 'n') => ca.tail
+ case 'w' if (ca(1) == 'r') => ca.tail
+ case 'w' if (ca(1) == 'h') => 'w' +: ca.drop(2)
+ case 'x' => 's' +: ca.tail
+ case _ => ca
+ }
+ }
}
} \ No newline at end of file
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 0932b0a..586552c 100755
--- a/core/source/core/scala/org/hashtree/stringmetric/similarity/NGramMetric.scala
+++ b/core/source/core/scala/org/hashtree/stringmetric/similarity/NGramMetric.scala
@@ -18,7 +18,7 @@ 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 {
+ else
NGramAlgorithm.compute(ca1)(n).flatMap { ca1bg =>
NGramAlgorithm.compute(ca2)(n).map { ca2bg =>
val ms = scoreMatches((ca1bg.map(_.mkString), ca2bg.map(_.mkString)))
@@ -26,7 +26,6 @@ object NGramMetric extends StringMetric with FilterableConfigurableStringMetric[
ms.toDouble / math.max(ca1bg.length, ca2bg.length)
}
}
- }
}
override def compare(string1: String, string2: String)(n: Int)