28 lines
746 B
Go
28 lines
746 B
Go
package region
|
||
|
||
import (
|
||
"regexp"
|
||
"strings"
|
||
)
|
||
|
||
var spaceRE = regexp.MustCompile(`\s+`)
|
||
var edgePunctRE = regexp.MustCompile(`^[\s\.,!\?;:"'«»\(\)\[\]\{\}]+|[\s\.,!\?;:"'«»\(\)\[\]\{\}]+$`)
|
||
|
||
func Normalize(input string) string {
|
||
s := strings.TrimSpace(strings.ToLower(input))
|
||
s = strings.ReplaceAll(s, "ё", "е")
|
||
s = strings.ReplaceAll(s, "-", " ")
|
||
s = strings.ReplaceAll(s, "г.", "город ")
|
||
s = strings.ReplaceAll(s, "обл.", "обл")
|
||
s = edgePunctRE.ReplaceAllString(s, "")
|
||
s = strings.Map(func(r rune) rune {
|
||
switch r {
|
||
case '.', ',', '!', '?', ';', ':', '"', '\'', '«', '»', '(', ')', '[', ']', '{', '}':
|
||
return ' '
|
||
default:
|
||
return r
|
||
}
|
||
}, s)
|
||
return spaceRE.ReplaceAllString(strings.TrimSpace(s), " ")
|
||
}
|