mirror of
https://github.com/simon-ding/polaris.git
synced 2026-06-04 00:47:43 +08:00
feat: better name parser
This commit is contained in:
@@ -27,7 +27,7 @@ func ParseTv(name string) *Metadata {
|
|||||||
|
|
||||||
func parseEnglishName(name string) *Metadata {
|
func parseEnglishName(name string) *Metadata {
|
||||||
re := regexp.MustCompile(`[^\p{L}\w\s]`)
|
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), " ")
|
splits := strings.Split(strings.TrimSpace(name), " ")
|
||||||
var newSplits []string
|
var newSplits []string
|
||||||
@@ -68,11 +68,6 @@ func parseEnglishName(name string) *Metadata {
|
|||||||
}
|
}
|
||||||
if seasonIndex != -1 {
|
if seasonIndex != -1 {
|
||||||
//season exists
|
//season exists
|
||||||
if seasonIndex != 0 {
|
|
||||||
//name exists
|
|
||||||
names := newSplits[0:seasonIndex]
|
|
||||||
meta.NameEn = strings.Join(names, " ")
|
|
||||||
}
|
|
||||||
ss := seasonRe.FindAllString(newSplits[seasonIndex], -1)
|
ss := seasonRe.FindAllString(newSplits[seasonIndex], -1)
|
||||||
if len(ss) != 0 {
|
if len(ss) != 0 {
|
||||||
//season info
|
//season info
|
||||||
@@ -84,6 +79,24 @@ func parseEnglishName(name string) *Metadata {
|
|||||||
}
|
}
|
||||||
meta.Season = n
|
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 {
|
if episodeIndex != -1 {
|
||||||
ep := episodeRe.FindAllString(newSplits[episodeIndex], -1)
|
ep := episodeRe.FindAllString(newSplits[episodeIndex], -1)
|
||||||
@@ -104,6 +117,15 @@ func parseEnglishName(name string) *Metadata {
|
|||||||
if meta.Episode == -1 {
|
if meta.Episode == -1 {
|
||||||
meta.IsSeasonPack = true
|
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
|
return meta
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -57,10 +57,12 @@ func RandString(n int) string {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func IsNameAcceptable(name1, name2 string) bool {
|
func IsNameAcceptable(name1, name2 string) bool {
|
||||||
|
|
||||||
re := regexp.MustCompile(`[^\p{L}\w\s]`)
|
re := regexp.MustCompile(`[^\p{L}\w\s]`)
|
||||||
name1 = re.ReplaceAllString(strings.ToLower(name1), " ")
|
name1 = re.ReplaceAllString(strings.ToLower(name1), " ")
|
||||||
name2 = re.ReplaceAllString(strings.ToLower(name2), " ")
|
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
|
return strutil.Similarity(name1, name2, metrics.NewHamming()) > 0.4
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user