24 lines
563 B
Go
24 lines
563 B
Go
package dicttranslate
|
|
|
|
import (
|
|
"github.com/texttheater/golang-levenshtein/levenshtein"
|
|
"strings"
|
|
)
|
|
|
|
func match(query string, opts []string, maxDist int) (string, bool) {
|
|
bestInd := -1
|
|
bestDist := 0
|
|
for i, s := range opts {
|
|
cfg := levenshtein.DefaultOptions
|
|
cfg.SubCost = 1
|
|
dist := levenshtein.DistanceForStrings([]rune(strings.ToLower(s)), []rune(strings.ToLower(query)), cfg)
|
|
if dist <= maxDist && (bestInd == -1 || dist < bestDist) {
|
|
bestInd = i
|
|
bestDist = dist
|
|
}
|
|
}
|
|
if bestInd == -1 {
|
|
return "", false
|
|
}
|
|
return opts[bestInd], true
|
|
}
|