add nultie gpouring
This commit is contained in:
@@ -10,46 +10,57 @@ import (
|
||||
)
|
||||
|
||||
type GroupStats struct {
|
||||
Total int
|
||||
YearDistribution map[int]int
|
||||
SourceDistribution map[string]int
|
||||
BitDepthDistribution map[string]int
|
||||
Total int
|
||||
YearDistribution map[int]int
|
||||
SourceDistribution map[string]int
|
||||
BitDepthDistribution map[string]int
|
||||
ResolutionDistribution map[string]int
|
||||
LanguageDistribution map[string]int
|
||||
EditionDistribution map[string]int
|
||||
UnknownTokens []releaseparser.UnknownTokenStats
|
||||
AvgConfidence float64
|
||||
LanguageDistribution map[string]int
|
||||
EditionDistribution map[string]int
|
||||
UnknownTokens []releaseparser.UnknownTokenStats
|
||||
AvgConfidence float64
|
||||
}
|
||||
|
||||
// AnalyzeGroup аналізує релізи з файлового ресурсу (для локальної перевірки довідників).
|
||||
func AnalyzeGroup() (GroupStats, error) {
|
||||
stats := GroupStats{
|
||||
YearDistribution: make(map[int]int),
|
||||
SourceDistribution: make(map[string]int),
|
||||
BitDepthDistribution: make(map[string]int),
|
||||
ResolutionDistribution: make(map[string]int),
|
||||
LanguageDistribution: make(map[string]int),
|
||||
EditionDistribution: make(map[string]int),
|
||||
UnknownTokens: []releaseparser.UnknownTokenStats{},
|
||||
}
|
||||
|
||||
file, err := os.Open("internal/releaseparser/resources/moonblood.txt")
|
||||
file, err := os.Open("../../resources/moonblood.txt")
|
||||
if err != nil {
|
||||
return stats, err
|
||||
return GroupStats{}, err
|
||||
}
|
||||
defer file.Close()
|
||||
|
||||
var titles []string
|
||||
scanner := bufio.NewScanner(file)
|
||||
totalConfidence := 0.0
|
||||
|
||||
unknownMap := make(map[string]*releaseparser.UnknownTokenStats)
|
||||
|
||||
for scanner.Scan() {
|
||||
line := strings.TrimSpace(scanner.Text())
|
||||
if line == "" {
|
||||
continue
|
||||
if line != "" {
|
||||
titles = append(titles, line)
|
||||
}
|
||||
}
|
||||
if err := scanner.Err(); err != nil {
|
||||
return GroupStats{}, err
|
||||
}
|
||||
|
||||
result := Parse(line)
|
||||
return AnalyzeTitles(titles), nil
|
||||
}
|
||||
|
||||
// AnalyzeTitles аналізує набір назв релізів (наприклад, з бази по ключу-групі).
|
||||
func AnalyzeTitles(titles []string) GroupStats {
|
||||
stats := GroupStats{
|
||||
YearDistribution: make(map[int]int),
|
||||
SourceDistribution: make(map[string]int),
|
||||
BitDepthDistribution: make(map[string]int),
|
||||
ResolutionDistribution: make(map[string]int),
|
||||
LanguageDistribution: make(map[string]int),
|
||||
EditionDistribution: make(map[string]int),
|
||||
UnknownTokens: []releaseparser.UnknownTokenStats{},
|
||||
}
|
||||
|
||||
totalConfidence := 0.0
|
||||
unknownMap := make(map[string]*releaseparser.UnknownTokenStats)
|
||||
|
||||
for _, title := range titles {
|
||||
result := Parse(title)
|
||||
stats.Total++
|
||||
|
||||
if result.Year != 0 {
|
||||
@@ -80,7 +91,7 @@ func AnalyzeGroup() (GroupStats, error) {
|
||||
}
|
||||
}
|
||||
unknownMap[unknown].Count++
|
||||
unknownMap[unknown].Releases = append(unknownMap[unknown].Releases, line)
|
||||
unknownMap[unknown].Releases = append(unknownMap[unknown].Releases, title)
|
||||
}
|
||||
|
||||
totalConfidence += result.Confidence
|
||||
@@ -99,5 +110,5 @@ func AnalyzeGroup() (GroupStats, error) {
|
||||
stats.AvgConfidence = totalConfidence / float64(stats.Total)
|
||||
}
|
||||
|
||||
return stats, nil
|
||||
return stats
|
||||
}
|
||||
|
||||
@@ -17,4 +17,4 @@ LIMITED_EDITION_BOXSET
|
||||
REMASTERED_EP
|
||||
10TH_ANNIVERSARY_EDITION
|
||||
OST
|
||||
REISSUE_DEMO
|
||||
REISSUE_DEMO
|
||||
|
||||
@@ -16,3 +16,4 @@ DK
|
||||
AT
|
||||
IS
|
||||
UA
|
||||
JP
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
# {resolution} — частота дискретизації
|
||||
44KHZ
|
||||
44.1KHZ
|
||||
48KHZ
|
||||
88.2KHZ
|
||||
88KHZ
|
||||
96KHZ
|
||||
176KHZ
|
||||
192KHZ
|
||||
@@ -24,11 +24,8 @@ func Parse(raw string) releaseparser.ParsedRelease {
|
||||
return result
|
||||
}
|
||||
|
||||
// Останній токен — група
|
||||
// Останній токен — група. Вона ж — ключ до профілю групи (довідників).
|
||||
result.Group = tokens[len(tokens)-1]
|
||||
if result.Group != "MOONBLOOD" {
|
||||
result.Warnings = append(result.Warnings, "unexpected group")
|
||||
}
|
||||
|
||||
// Передостанній — рік
|
||||
last := len(tokens) - 2
|
||||
@@ -139,7 +136,7 @@ func hasKnownTailToken(tokens []string) bool {
|
||||
|
||||
func score(result *releaseparser.ParsedRelease) {
|
||||
score := 0.0
|
||||
if result.Group == "MOONBLOOD" {
|
||||
if result.Group != "" {
|
||||
score += 0.25
|
||||
}
|
||||
if result.Year != 0 {
|
||||
|
||||
@@ -176,3 +176,26 @@ func TestParseCoreTokensNeverReported(t *testing.T) {
|
||||
t.Errorf("Artist/Title = %q/%q", r.Artist, r.Title)
|
||||
}
|
||||
}
|
||||
|
||||
func TestParseAnyGroupNoWarning(t *testing.T) {
|
||||
cases := []string{
|
||||
"Jetsex-Down_Down_Down-24BIT-WEB-FLAC-2025-FLACCiD",
|
||||
"Sabaton-The_Last_Stand-24BIT-96KHZ-WEB-FLAC-2016-FLACCiD",
|
||||
"Wind_Walkers-What_If_I_Break-16BIT-WEB-FLAC-2023-FLACCiD",
|
||||
}
|
||||
for _, line := range cases {
|
||||
r := Parse(line)
|
||||
if r.Group != "FLACCiD" {
|
||||
t.Errorf("%s: Group = %q, want FLACCiD", line, r.Group)
|
||||
}
|
||||
if len(r.Warnings) != 0 {
|
||||
t.Errorf("%s: Warnings = %v, want empty", line, r.Warnings)
|
||||
}
|
||||
if len(r.UnknownTokens) != 0 {
|
||||
t.Errorf("%s: UnknownTokens = %v, want empty", line, r.UnknownTokens)
|
||||
}
|
||||
if r.Year == 0 || r.Format != "FLAC" || r.Source != "WEB" || r.BitDepth == "" {
|
||||
t.Errorf("%s: tail fields wrong: %+v", line, r)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user