summaryrefslogtreecommitdiff
path: root/cli
diff options
context:
space:
mode:
authorRocky Madden <git@rockymadden.com>2013-12-28 11:49:33 -0700
committerRocky Madden <git@rockymadden.com>2013-12-28 11:49:33 -0700
commitef997c15f2ac152b53f05669f1d6bb9aa00aded7 (patch)
tree571f2eb996940b6f39dc7ab073bbc2d20ae9c93c /cli
parent001b756ff5fb88e295b0ff4e4ee89bf326a4f83e (diff)
downloadstringmetric-ef997c15f2ac152b53f05669f1d6bb9aa00aded7.tar.gz
stringmetric-ef997c15f2ac152b53f05669f1d6bb9aa00aded7.tar.bz2
stringmetric-ef997c15f2ac152b53f05669f1d6bb9aa00aded7.zip
A more functional structure.
Diffstat (limited to 'cli')
-rwxr-xr-xcli/source/main/scala/com/rockymadden/stringmetric/cli/OptionMap.scala36
-rwxr-xr-xcli/source/main/scala/com/rockymadden/stringmetric/cli/OptionString.scala30
-rwxr-xr-xcli/source/main/scala/com/rockymadden/stringmetric/cli/package.scala61
-rwxr-xr-xcli/source/main/scala/com/rockymadden/stringmetric/cli/similarity/dicesorensenmetric.scala2
-rwxr-xr-xcli/source/main/scala/com/rockymadden/stringmetric/cli/similarity/jaccardmetric.scala2
-rwxr-xr-xcli/source/main/scala/com/rockymadden/stringmetric/cli/similarity/ngrammetric.scala2
-rwxr-xr-xcli/source/main/scala/com/rockymadden/stringmetric/cli/similarity/overlapmetric.scala2
-rwxr-xr-xcli/source/main/scala/com/rockymadden/stringmetric/cli/similarity/weightedlevenshteinmetric.scala9
-rwxr-xr-xcli/source/main/scala/com/rockymadden/stringmetric/cli/tokenization/ngramtokenizer.scala2
9 files changed, 66 insertions, 80 deletions
diff --git a/cli/source/main/scala/com/rockymadden/stringmetric/cli/OptionMap.scala b/cli/source/main/scala/com/rockymadden/stringmetric/cli/OptionMap.scala
deleted file mode 100755
index 8f9da13..0000000
--- a/cli/source/main/scala/com/rockymadden/stringmetric/cli/OptionMap.scala
+++ /dev/null
@@ -1,36 +0,0 @@
-package com.rockymadden.stringmetric.cli
-
-object OptionMap {
- def apply(args: Array[String]): OptionMap = apply(args: _*)
-
- def apply(varargs: String*): OptionMap = {
- @annotation.tailrec
- def next(om: OptionMap, a: List[String]): OptionMap = {
- val double = """^(--[a-zA-Z0-9]+)(=[a-zA-Z0-9\.\-_]+)?""".r
- val single = """^(-[a-zA-Z0-9]+)(=[a-zA-Z0-9\.\-_]+)?""".r
- val less = """([a-zA-Z0-9/\-_\$\.]+)""".r
-
- a match {
- // Empty, return.
- case Nil => om
- // Double dash options without value.
- case double(k, null) :: t => next(om + (Symbol(k.tail.tail) -> ""), t)
- // Double dash options with value.
- case double(k, v) :: t => next(om + (Symbol(k.tail.tail) -> v.tail), t)
- // Single dash options without value.
- case single(k, null) :: t => next(om + (Symbol(k.tail) -> ""), t)
- // Single dash options with value. Value is discarded.
- case single(k, v) :: t => next(om + (Symbol(k.tail) -> ""), t)
- // Dashless options.
- case less(v) :: t if v.head != '-' =>
- if (om.contains('dashless))
- next((om - 'dashless) + ('dashless -> (om('dashless).self + " " + v.trim)), t)
- else next(om + ('dashless -> v.trim), t)
- // Invalid option, ignore.
- case _ :: t => next(om, t)
- }
- }
-
- next(Map.empty[Symbol, OptionString], varargs.toList)
- }
-}
diff --git a/cli/source/main/scala/com/rockymadden/stringmetric/cli/OptionString.scala b/cli/source/main/scala/com/rockymadden/stringmetric/cli/OptionString.scala
deleted file mode 100755
index 7a1350d..0000000
--- a/cli/source/main/scala/com/rockymadden/stringmetric/cli/OptionString.scala
+++ /dev/null
@@ -1,30 +0,0 @@
-package com.rockymadden.stringmetric.cli
-
-import scala.language.implicitConversions
-
-class OptionString(val self: String)
-
-object OptionString {
- implicit def OptionStringToArray(optionString: OptionString): Array[String] =
- if (optionString.self.length == 0) Array.empty[String] else optionString.self.split(" ")
-
- implicit def OptionStringToBigDecimal(optionString: OptionString): BigDecimal = BigDecimal(optionString.self)
-
- implicit def OptionStringToBigInt(optionString: OptionString): BigInt = BigInt(optionString.self)
-
- implicit def OptionStringToDouble(optionString: OptionString): Double = optionString.self.toDouble
-
- implicit def OptionStringToFloat(optionString: OptionString): Float = optionString.self.toFloat
-
- implicit def OptionStringToInt(optionString: OptionString): Int = optionString.self.toInt
-
- implicit def OptionStringToLong(optionString: OptionString): Long = optionString.self.toLong
-
- implicit def OptionStringToShort(optionString: OptionString): Short = optionString.self.toShort
-
- implicit def OptionStringToString(optionString: OptionString): String = optionString.self
-
- implicit def StringToOptionString(string: String): OptionString = apply(string)
-
- def apply(string: String): OptionString = new OptionString(string)
-}
diff --git a/cli/source/main/scala/com/rockymadden/stringmetric/cli/package.scala b/cli/source/main/scala/com/rockymadden/stringmetric/cli/package.scala
index cbaba97..0b049bb 100755
--- a/cli/source/main/scala/com/rockymadden/stringmetric/cli/package.scala
+++ b/cli/source/main/scala/com/rockymadden/stringmetric/cli/package.scala
@@ -1,13 +1,68 @@
package com.rockymadden.stringmetric
-import scala.language.implicitConversions
-
/**
* Provides core CLI functionality. Note that some things might look sloppy (e.g. access modifiers, broad imports,
* repetitive imports, etc), but are required because of the way scalascript is ultimately compiled.
*/
package object cli {
+ import scala.language.implicitConversions
+
+
+ implicit def optionStringToArray(os: OptionString): Array[String] =
+ if (os.get.length == 0) Array.empty[String] else os.get.split(" ")
+ implicit def optionStringToBigDecimal(os: OptionString): BigDecimal = BigDecimal(os.get)
+ implicit def optionStringToBigInt(os: OptionString): BigInt = BigInt(os.get)
+ implicit def optionStringToDouble(os: OptionString): Double = os.get.toDouble
+ implicit def optionStringToFloat(os: OptionString): Float = os.get.toFloat
+ implicit def optionStringToInt(os: OptionString): Int = os.get.toInt
+ implicit def optionStringToLong(os: OptionString): Long = os.get.toLong
+ implicit def optionStringToShort(os: OptionString): Short = os.get.toShort
+ implicit def optionStringToString(os: OptionString): String = os.get
+ implicit def stringToOptionString(s: String): OptionString = OptionString(s)
+ implicit def arrayOfStringToOptionMap(stringArray: Array[String]): OptionMap = OptionMap(stringArray)
+
+
+ class OptionString(val get: String)
+
+ object OptionString {
+ def apply(s: String): OptionString = new OptionString(s)
+ }
+
+
type OptionMap = Map[Symbol, OptionString]
- implicit def StringArrayToOptionMap(stringArray: Array[String]): OptionMap = OptionMap(stringArray)
+ object OptionMap {
+ def apply(args: Array[String]): OptionMap = apply(args: _*)
+
+ def apply(varargs: String*): OptionMap = {
+ @annotation.tailrec
+ def next(om: OptionMap, a: List[String]): OptionMap = {
+ val double = """^(--[a-zA-Z0-9]+)(=[a-zA-Z0-9\.\-_]+)?""".r
+ val single = """^(-[a-zA-Z0-9]+)(=[a-zA-Z0-9\.\-_]+)?""".r
+ val less = """([a-zA-Z0-9/\-_\$\.]+)""".r
+
+ a match {
+ // Empty, return.
+ case Nil => om
+ // Double dash options without value.
+ case double(k, null) :: t => next(om + (Symbol(k.tail.tail) -> ""), t)
+ // Double dash options with value.
+ case double(k, v) :: t => next(om + (Symbol(k.tail.tail) -> v.tail), t)
+ // Single dash options without value.
+ case single(k, null) :: t => next(om + (Symbol(k.tail) -> ""), t)
+ // Single dash options with value. Value is discarded.
+ case single(k, v) :: t => next(om + (Symbol(k.tail) -> ""), t)
+ // Dashless options.
+ case less(v) :: t if v.head != '-' =>
+ if (om.contains('dashless))
+ next((om - 'dashless) + ('dashless -> (om('dashless).get + " " + v.trim)), t)
+ else next(om + ('dashless -> v.trim), t)
+ // Invalid option, ignore.
+ case _ :: t => next(om, t)
+ }
+ }
+
+ next(Map.empty[Symbol, OptionString], varargs.toList)
+ }
+ }
}
diff --git a/cli/source/main/scala/com/rockymadden/stringmetric/cli/similarity/dicesorensenmetric.scala b/cli/source/main/scala/com/rockymadden/stringmetric/cli/similarity/dicesorensenmetric.scala
index 5d0e234..a166f4f 100755
--- a/cli/source/main/scala/com/rockymadden/stringmetric/cli/similarity/dicesorensenmetric.scala
+++ b/cli/source/main/scala/com/rockymadden/stringmetric/cli/similarity/dicesorensenmetric.scala
@@ -44,6 +44,6 @@ object dicesorensenmetric extends Command {
val strings: Array[String] = opts('dashless)
val n: Int = opts('n)
- println(DiceSorensenMetric.compare(strings(0), strings(1))(n).getOrElse("not comparable"))
+ println(DiceSorensenMetric(n).compare(strings(0), strings(1)).getOrElse("not comparable"))
}
}
diff --git a/cli/source/main/scala/com/rockymadden/stringmetric/cli/similarity/jaccardmetric.scala b/cli/source/main/scala/com/rockymadden/stringmetric/cli/similarity/jaccardmetric.scala
index 1f1e123..5dee606 100755
--- a/cli/source/main/scala/com/rockymadden/stringmetric/cli/similarity/jaccardmetric.scala
+++ b/cli/source/main/scala/com/rockymadden/stringmetric/cli/similarity/jaccardmetric.scala
@@ -44,6 +44,6 @@ object jaccardmetric extends Command {
val strings: Array[String] = opts('dashless)
val n: Int = opts('n)
- println(JaccardMetric.compare(strings(0), strings(1))(n).getOrElse("not comparable"))
+ println(JaccardMetric(n).compare(strings(0), strings(1)).getOrElse("not comparable"))
}
}
diff --git a/cli/source/main/scala/com/rockymadden/stringmetric/cli/similarity/ngrammetric.scala b/cli/source/main/scala/com/rockymadden/stringmetric/cli/similarity/ngrammetric.scala
index af0634f..1e54ec6 100755
--- a/cli/source/main/scala/com/rockymadden/stringmetric/cli/similarity/ngrammetric.scala
+++ b/cli/source/main/scala/com/rockymadden/stringmetric/cli/similarity/ngrammetric.scala
@@ -44,6 +44,6 @@ object ngrammetric extends Command {
val strings: Array[String] = options('dashless)
val n: Int = options('n)
- println(NGramMetric.compare(strings(0), strings(1))(n).getOrElse("not comparable"))
+ println(NGramMetric(n).compare(strings(0), strings(1)).getOrElse("not comparable"))
}
}
diff --git a/cli/source/main/scala/com/rockymadden/stringmetric/cli/similarity/overlapmetric.scala b/cli/source/main/scala/com/rockymadden/stringmetric/cli/similarity/overlapmetric.scala
index 2c670c5..81d3e04 100755
--- a/cli/source/main/scala/com/rockymadden/stringmetric/cli/similarity/overlapmetric.scala
+++ b/cli/source/main/scala/com/rockymadden/stringmetric/cli/similarity/overlapmetric.scala
@@ -44,6 +44,6 @@ object overlapmetric extends Command {
val strings: Array[String] = opts('dashless)
val n: Int = opts('n)
- println(OverlapMetric.compare(strings(0), strings(1))(n).getOrElse("not comparable"))
+ println(OverlapMetric(n).compare(strings(0), strings(1)).getOrElse("not comparable"))
}
}
diff --git a/cli/source/main/scala/com/rockymadden/stringmetric/cli/similarity/weightedlevenshteinmetric.scala b/cli/source/main/scala/com/rockymadden/stringmetric/cli/similarity/weightedlevenshteinmetric.scala
index d675db1..a9ad9b7 100755
--- a/cli/source/main/scala/com/rockymadden/stringmetric/cli/similarity/weightedlevenshteinmetric.scala
+++ b/cli/source/main/scala/com/rockymadden/stringmetric/cli/similarity/weightedlevenshteinmetric.scala
@@ -51,12 +51,9 @@ object weightedlevenshteinmetric extends Command {
override def execute(opts: OptionMap): Unit = {
val strings: Array[String] = opts('dashless)
- val weights = Tuple3[BigDecimal, BigDecimal, BigDecimal](
- opts('deleteWeight),
- opts('insertWeight),
- opts('substituteWeight)
- )
- println(WeightedLevenshteinMetric.compare(strings(0), strings(1))(weights).getOrElse("not comparable"))
+ println(WeightedLevenshteinMetric(
+ opts('deleteWeight), opts('insertWeight), opts('substituteWeight)
+ ).compare(strings(0), strings(1)).getOrElse("not comparable"))
}
}
diff --git a/cli/source/main/scala/com/rockymadden/stringmetric/cli/tokenization/ngramtokenizer.scala b/cli/source/main/scala/com/rockymadden/stringmetric/cli/tokenization/ngramtokenizer.scala
index 99fdbe5..9139e3a 100755
--- a/cli/source/main/scala/com/rockymadden/stringmetric/cli/tokenization/ngramtokenizer.scala
+++ b/cli/source/main/scala/com/rockymadden/stringmetric/cli/tokenization/ngramtokenizer.scala
@@ -41,7 +41,7 @@ object ngramtokenizer extends Command {
}
override def execute(opts: OptionMap): Unit =
- NGramTokenizer.tokenize(opts('dashless))(opts('n)) match {
+ NGramTokenizer(opts('n)).tokenize(opts('dashless)) match {
// Implicits are a pain here.
case Some(c) => {
val sb = new StringBuilder