diff options
Diffstat (limited to 'core/src/main/scala/com/rockymadden/stringmetric/phonetic/RefinedNysiisMetric.scala')
-rwxr-xr-x | core/src/main/scala/com/rockymadden/stringmetric/phonetic/RefinedNysiisMetric.scala | 24 |
1 files changed, 24 insertions, 0 deletions
diff --git a/core/src/main/scala/com/rockymadden/stringmetric/phonetic/RefinedNysiisMetric.scala b/core/src/main/scala/com/rockymadden/stringmetric/phonetic/RefinedNysiisMetric.scala new file mode 100755 index 0000000..488f261 --- /dev/null +++ b/core/src/main/scala/com/rockymadden/stringmetric/phonetic/RefinedNysiisMetric.scala @@ -0,0 +1,24 @@ +package com.rockymadden.stringmetric.phonetic + +import com.rockymadden.stringmetric.Metric.StringMetric + +case object RefinedNysiisMetric extends StringMetric[Boolean] { + import com.rockymadden.stringmetric.Alphabet.Alpha + + override def compare(a: Array[Char], b: Array[Char]): Option[Boolean] = { + val unequal = (c1: Char, c2: Char) => { + val lc1 = c1.toLower + val lc2 = c2.toLower + + (if (lc1 == 'k') 'c' else lc1) != (if (lc2 == 'k') 'c' else lc2) + } + + if (a.length == 0 || !(Alpha isSuperset a.head) || b.length == 0 || !(Alpha isSuperset b.head)) None + else if (unequal(a.head, b.head)) Some(false) + else RefinedNysiisAlgorithm.compute(a).filter(_.length > 0).flatMap { rny1 => + RefinedNysiisAlgorithm.compute(b).filter(_.length > 0).map(rny1.sameElements(_)) + } + } + + override def compare(a: String, b: String): Option[Boolean] = compare(a.toCharArray, b.toCharArray) +} |