feat: better name parser

This commit is contained in:
Simon Ding
2024-07-24 22:15:59 +08:00
parent 5e337871c9
commit 45d2a4fb79
2 changed files with 31 additions and 7 deletions

View File

@@ -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
}

View File

@@ -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
}