func NormalizeTitle(title string) string { normalizedTitle := title normalizedTitle = strings.ToLower(normalizedTitle) normalizedTitle = RomanizeHepburn(title) normalizedTitle = strings.ToLower(normalizedTitle) normalizedTitle = RemoveTrailingApostrophe(normalizedTitle) normalizedTitle, _, _ = transform.String(transform.Chain( norm.NFD, transform.RemoveFunc(func(r rune) bool { return unicode.Is(unicode.Mn, r) }), norm.NFC), normalizedTitle) normalizedTitle = strings.ToLower(normalizedTitle) normalizedTitle = regexp.MustCompile(`\(\d+\)`).ReplaceAllString(normalizedTitle, " ") normalizedTitle = strings.Map(func(r rune) rune { if !unicode.IsLetter(r) && !unicode.IsDigit(r) && r != '.' { return ' ' } return r }, normalizedTitle) normalizedTitle = regexp.MustCompile(`\s+`).ReplaceAllString(normalizedTitle, " ") normalizedTitle = strings.TrimSpace(normalizedTitle) return normalizedTitle }
func ExampleRemoveFunc() { input := []byte(`tschüß; до свидания`) b := make([]byte, len(input)) t := transform.RemoveFunc(unicode.IsSpace) n, _, _ := t.Transform(b, input, true) fmt.Println(string(b[:n])) t = transform.RemoveFunc(func(r rune) bool { return !unicode.Is(unicode.Latin, r) }) n, _, _ = t.Transform(b, input, true) fmt.Println(string(b[:n])) n, _, _ = t.Transform(b, norm.NFD.Bytes(input), true) fmt.Println(string(b[:n])) // Output: // tschüß;досвидания // tschüß // tschuß }