58 lines
1.5 KiB
Go
58 lines
1.5 KiB
Go
// radarjudgesample exports recent opportunities for human judge calibration (T535).
|
|
package main
|
|
|
|
import (
|
|
"context"
|
|
"encoding/csv"
|
|
"flag"
|
|
"fmt"
|
|
"os"
|
|
"time"
|
|
|
|
"apps/backend/internal/config"
|
|
"apps/backend/internal/module/radar/domain"
|
|
"apps/backend/internal/module/radar/repository"
|
|
|
|
"github.com/zeromicro/go-zero/core/conf"
|
|
)
|
|
|
|
func main() {
|
|
f := flag.String("f", "etc/gateway.yaml", "config")
|
|
owner := flag.Int64("owner", 0, "owner uid")
|
|
out := flag.String("o", "judge-sample.csv", "output csv")
|
|
flag.Parse()
|
|
var c config.Config
|
|
conf.MustLoad(*f, &c)
|
|
c.ApplyEnv()
|
|
repo := repository.NewMonStore(c.Mongo.URI, c.Mongo.Database)
|
|
ctx := context.Background()
|
|
list, _, err := repo.ListOpportunities(ctx, *owner, domain.OpportunityListFilter{Page: 1, PageSize: 100})
|
|
if err != nil {
|
|
fmt.Fprintln(os.Stderr, err)
|
|
os.Exit(1)
|
|
}
|
|
w := csv.NewWriter(os.Stdout)
|
|
if *out != "-" {
|
|
fp, err := os.Create(*out)
|
|
if err != nil {
|
|
panic(err)
|
|
}
|
|
defer fp.Close()
|
|
w = csv.NewWriter(fp)
|
|
}
|
|
_ = w.Write([]string{"id", "status", "intent_score", "intent_band", "region_match", "text", "human_label", "notes"})
|
|
for _, o := range list {
|
|
_ = w.Write([]string{o.ID, o.Status, fmt.Sprintf("%d", o.IntentScore), o.IntentBand, o.RegionMatch, trim(o.Text, 120), "", ""})
|
|
}
|
|
w.Flush()
|
|
fmt.Fprintf(os.Stderr, "exported %d rows at %s\n", len(list), time.Now().UTC().Format(time.RFC3339))
|
|
}
|
|
|
|
func trim(s string, n int) string {
|
|
r := []rune(s)
|
|
if len(r) <= n {
|
|
return s
|
|
}
|
|
return string(r[:n])
|
|
}
|