diff --git a/cmd/data2json/data2json.go b/cmd/data2json/data2json.go index 3459d7f..07a3a6d 100644 --- a/cmd/data2json/data2json.go +++ b/cmd/data2json/data2json.go @@ -13,17 +13,19 @@ import ( ) type Data struct { - Year int `json:"year"` - Week int `json:"week"` - First string `json:"first"` - Last string `json:"last"` - Period int `json:"period"` - Start string `json:"start"` - Algemeen *Parts `json:"Algemeen"` - Groningen *Parts `json:"Groningen"` - Amsterdam *Parts `json:"Amsterdam"` - Literatuur *Parts `json:"Literatuur"` - Vlaanderen *Parts `json:"Vlaanderen"` + Year int `json:"year"` + Week int `json:"week"` + First string `json:"first"` + Last string `json:"last"` + Period int `json:"period"` + Start string `json:"start"` + Max int `json:"max"` + Sources map[string]int `json:"sources"` + Algemeen *Parts `json:"Algemeen"` + Groningen *Parts `json:"Groningen"` + Amsterdam *Parts `json:"Amsterdam"` + Literatuur *Parts `json:"Literatuur"` + Vlaanderen *Parts `json:"Vlaanderen"` } type Parts struct { @@ -88,8 +90,9 @@ func main() { x(fmt.Errorf("ongeldige week: %d", week)) } - start, first, last := dates() + start, first, last, names := dates() + max, sources := makeCounts(names) data := &Data{ Year: year, Week: week, @@ -97,6 +100,8 @@ func main() { Last: last, Period: size, Start: start, + Max: max, + Sources: sources, Algemeen: makeParts("Algemeen"), Groningen: makeParts("Groningen"), Amsterdam: makeParts("Amsterdam"), @@ -107,7 +112,6 @@ func main() { b, err := json.Marshal(data) x(err) fmt.Println(string(b)) - } func makeParts(source string) *Parts { @@ -163,7 +167,43 @@ func makeValues(source, part string) [][5]any { return v } -func dates() (start, first, last string) { +func makeCounts(names []string) (int, map[string]int) { + max := 0 + counts := make(map[string]int) + x(os.Chdir("/net/corpora/nlnieuws")) + files, err := os.ReadDir(".") + x(err) + for _, file := range files { + if !file.IsDir() { + continue + } + filename := file.Name() + if filename[0] < 'A' || filename[0] > 'Z' { + continue + } + count := 0 + for _, name := range names { + files2, err := os.ReadDir(filename + "/" + name) + if err != nil { + continue + } + for _, f := range files2 { + if n := f.Name(); strings.HasSuffix(n, ".xml") { + count++ + } else if strings.HasSuffix(n, ".skip") { + count-- + } + } + } + counts[filename] = count + if count > max { + max = count + } + } + return max, counts +} + +func dates() (start, first, last string, names []string) { // 1 januari t := time.Date(year, 1, 1, 12, 0, 0, 0, time.UTC) @@ -182,7 +222,20 @@ func dates() (start, first, last string) { t2 := t.AddDate(0, 0, 6) tStart := t.AddDate(0, 0, (1-size)*7) - return makeDate(tStart), makeDate(t), makeDate(t2) + names = make([]string, 0) + t3 := tStart + for range size { + y, w := t3.ISOWeek() + names = append(names, fmt.Sprintf("%d/%02d", y, w)) + t3 = t3.AddDate(0, 0, 7) + } + t3 = tStart + for range 7 * size { + names = append(names, fmt.Sprintf("%d/%02d/%02d", t3.Year(), t3.Month(), t3.Day())) + t3 = t3.AddDate(0, 0, 1) + } + + return makeDate(tStart), makeDate(t), makeDate(t2), names }