compare with soundex

This commit is contained in:
adrienmalin 2018-12-18 15:25:17 +01:00
parent 2564d1b8fa
commit a6287e1760
2 changed files with 67 additions and 2 deletions

View File

@ -53,10 +53,10 @@ class SttDialog : DialogFragment() {
partialResultsTextView?.text = result
pattern?.apply{
val matcher = matcher(result)
if (matcher.matches()) {
if (matcher.find()) {
val foundName = matcher.group(1)
for (player in players) {
if (foundName.equals(player.name, ignoreCase=true)) {
if (soundex(foundName) == soundex(player.name)) {
dismiss()
updateScore(player)
updateUI()

View File

@ -0,0 +1,65 @@
package adrienmalin.pingpoints
import java.util.regex.*
val yNotPrecededByA:Pattern = Pattern.compile("(?<!A)Y")
val hNotPrecededByCS: Pattern = Pattern.compile("(?<![CS])H")
val aInWord: Pattern = Pattern.compile("(?<!\\b)A")
val silentEndLetter = Pattern.compile("[ADST](?=\\b)")
val notALetter = Pattern.compile("\\W")
val doubleLetter = Pattern.compile("(\\w)\\1+(?!\\1)")
fun soundex(string: String): String {
var s = string
.trim()
.toUpperCase()
.replace('Â', 'A')
.replace('Ä', 'A')
.replace('À', 'A')
.replace('E', 'A')
.replace('È', 'A')
.replace('É', 'A')
.replace('Ê', 'A')
.replace('Ë', 'A')
.replace('Œ', 'A')
.replace('I', 'A')
.replace('Î', 'A')
.replace('Ï', 'A')
.replace('O', 'A')
.replace('Ô', 'A')
.replace('Ö', 'A')
.replace('U', 'A')
.replace('Ù', 'A')
.replace('Û', 'A')
.replace('Ü', 'A')
.replace('Ç', 'S')
.replace("GUI", "KI")
.replace("GUE", "KE")
.replace("GA", "KA")
.replace("GO", "KO")
.replace("GU", "K")
.replace("CA", "KA")
.replace("CO", "KO")
.replace("CU", "KU")
.replace("Q", "K")
.replace("CC", "K")
.replace("CK", "K")
.replace("MAC", "MCC")
.replace("ASA", "AZA")
.replace("KN", "NN")
.replace("PF", "FF")
.replace("SCH", "SSS")
.replace("PH", "FF")
.replace("H", "")
s = yNotPrecededByA.matcher(s).replaceAll("")
s = hNotPrecededByCS.matcher(s).replaceAll("")
s = silentEndLetter.matcher(s).replaceAll("")
s = silentEndLetter.matcher(s).replaceAll("")
s = notALetter.matcher(s).replaceAll("")
s = aInWord.matcher(s).replaceAll("")
s = doubleLetter.matcher(s).replaceAll("$1")
return s
}