From 45d2a4fb791b8fb8308386a9a99636aeee57a994 Mon Sep 17 00:00:00 2001 From: Simon Ding Date: Wed, 24 Jul 2024 22:15:59 +0800 Subject: [PATCH] feat: better name parser --- pkg/metadata/tv.go | 34 ++++++++++++++++++++++++++++------ pkg/utils/utils.go | 4 +++- 2 files changed, 31 insertions(+), 7 deletions(-) diff --git a/pkg/metadata/tv.go b/pkg/metadata/tv.go index 1667d92..2fcf3c6 100644 --- a/pkg/metadata/tv.go +++ b/pkg/metadata/tv.go @@ -27,7 +27,7 @@ func ParseTv(name string) *Metadata { func parseEnglishName(name string) *Metadata { re := regexp.MustCompile(`[^\p{L}\w\s]`) - name = re.ReplaceAllString(strings.ToLower(name), "") + name = re.ReplaceAllString(strings.ToLower(name), " ") splits := strings.Split(strings.TrimSpace(name), " ") var newSplits []string @@ -68,11 +68,6 @@ func parseEnglishName(name string) *Metadata { } if seasonIndex != -1 { //season exists - if seasonIndex != 0 { - //name exists - names := newSplits[0:seasonIndex] - meta.NameEn = strings.Join(names, " ") - } ss := seasonRe.FindAllString(newSplits[seasonIndex], -1) if len(ss) != 0 { //season info @@ -84,6 +79,24 @@ func parseEnglishName(name string) *Metadata { } meta.Season = n } + } else { //maybe like Season 1? + seasonRe := regexp.MustCompile(`season \d{1,2}`) + matches := seasonRe.FindAllString(name, -1) + if len(matches) > 0 { + for i, s := range newSplits { + if s == "season" { + seasonIndex = i + } + } + numRe := regexp.MustCompile(`\d{1,2}`) + seNum := numRe.FindAllString(matches[0], -1)[0] + n, err := strconv.Atoi(seNum) + if err != nil { + panic(fmt.Sprintf("convert %s error: %v", seNum, err)) + } + meta.Season = n + + } } if episodeIndex != -1 { ep := episodeRe.FindAllString(newSplits[episodeIndex], -1) @@ -104,6 +117,15 @@ func parseEnglishName(name string) *Metadata { if meta.Episode == -1 { meta.IsSeasonPack = true } + + if seasonIndex != 0 { + //name exists + names := newSplits[0:seasonIndex] + meta.NameEn = strings.TrimSpace(strings.Join(names, " ")) + } else { + meta.NameEn = name + } + return meta } diff --git a/pkg/utils/utils.go b/pkg/utils/utils.go index c0dd189..5ee8a0f 100644 --- a/pkg/utils/utils.go +++ b/pkg/utils/utils.go @@ -57,10 +57,12 @@ func RandString(n int) string { } func IsNameAcceptable(name1, name2 string) bool { - re := regexp.MustCompile(`[^\p{L}\w\s]`) name1 = re.ReplaceAllString(strings.ToLower(name1), " ") name2 = re.ReplaceAllString(strings.ToLower(name2), " ") + if strings.Contains(name1, name2) || strings.Contains(name2, name1) { + return true + } return strutil.Similarity(name1, name2, metrics.NewHamming()) > 0.4 }