diff options
-rw-r--r-- | line-conf-avg/line-conf-avg.go | 70 |
1 files changed, 68 insertions, 2 deletions
diff --git a/line-conf-avg/line-conf-avg.go b/line-conf-avg/line-conf-avg.go index 18421d3..5b7d2a4 100644 --- a/line-conf-avg/line-conf-avg.go +++ b/line-conf-avg/line-conf-avg.go @@ -4,23 +4,52 @@ import ( "bufio" "flag" "fmt" + "io/ioutil" "log" "os" + "path/filepath" + "sort" "strconv" "strings" ) +type LineDetail struct { + Filename string + Avgconf float64 + Filebase string + Basename string + Dirname string + Fulltext string +} + +type LineDetails []LineDetail + +// Used by sort.Sort. +func (l LineDetails) Len() int { return len(l) } + +// Used by sort.Sort. +func (l LineDetails) Less(i, j int) bool { + return l[i].Avgconf < l[j].Avgconf +} + +// Used by sort.Sort. +func (l LineDetails) Swap(i, j int) { l[i], l[j] = l[j], l[i] } + func main() { flag.Usage = func() { - fmt.Fprintf(os.Stderr, "Usage: line-conf-avg prob1 [prob2] [...]\n") + fmt.Fprintf(os.Stderr, "Usage: line-conf-avg [-html] [-nosort] prob1 [prob2] [...]\n") flag.PrintDefaults() } + var usehtml = flag.Bool("html", false, "output html page") + var nosort = flag.Bool("nosort", false, "don't sort lines by confidence") flag.Parse() if flag.NArg() < 1 { flag.Usage() os.Exit(1) } + lines := make(LineDetails, 0) + for _, f := range flag.Args() { file, err := os.Open(f) if err != nil { @@ -51,6 +80,43 @@ func main() { } avg := totalconf / float64(num) - fmt.Printf("%s: %.2f%%\n", f, avg) + if num == 0 || avg == 0 { + continue + } + + var linedetail LineDetail + linedetail.Filename = f + linedetail.Avgconf = avg + linedetail.Filebase = strings.Replace(f, ".prob", "", 1) + linedetail.Basename = filepath.Base(linedetail.Filebase) + linedetail.Dirname = filepath.Dir(linedetail.Filebase) + ft, ferr := ioutil.ReadFile(linedetail.Filebase + ".txt") + if ferr != nil { + log.Fatal(err) + } + linedetail.Fulltext = string(ft) + lines = append(lines, linedetail) + } + + if *nosort == false { + sort.Sort(lines) + } + + if *usehtml == false { + for _, l := range lines { + fmt.Printf("%s: %.2f%%\n", l.Filename, l.Avgconf) + } + } else { + fmt.Printf("<!DOCTYPE html><html><head><meta charset='UTF-8'><title></title><style>td {border: 1px solid #444}</style></head><body>\n") + fmt.Printf("<table>\n") + for _, l := range lines { + fmt.Printf("<tr>\n") + fmt.Printf("<td><h1>%.4f%%</h1></td>\n", l.Avgconf) + fmt.Printf("<td>%s</td>\n", l.Filebase) + fmt.Printf("<td><img src='%s' /><br />%s</td>\n", l.Filebase + ".bin.png", l.Fulltext) + fmt.Printf("</tr>\n") + } + fmt.Printf("</table>\n") + fmt.Printf("</body></html>\n") } } |