#!/usr/local/bin/perl -w

my ($cols, $firstcol);

foreach my $file (@ARGV) {
  print "Decision tree stats: " . $file . '='x10 . "\n";
  initvars();
  open IN, $file;
  while (<IN>) {
    next unless /^(\s+)((?: ----)+)/;
    my ($a, $b) = ($1, $2);
    $cols = (length $b)/ 5;
    $firstcol = (length $a) + 5;
    last;
  }

  for my $row (1..$cols) {
    chomp(my $line = <IN>);
    for my $col (1..$cols) {
      my $charcol = ($col == 1)? $firstcol: 5;
      my $item = substr $line, 0, $charcol;
      $line = substr $line, $charcol;
      $item =~ s/^\s+//;
      $item = 0 if $item eq "";
      if ($row == 1 && $col == 1) {
	$Aunmarked = $item;
      } elsif ($col == 1) {
	$Bfneg += $item;
      } elsif ($row == 1) {
	$Efpos += $item;
      } elsif ($row == $col) {
	$Ccorrect += $item;
      } else {
	$Dmismarked += $item;
      }
    }
  }
  close IN;

  print "Unmarked: $Aunmarked; Correct: $Ccorrect\n";
  print "Mismarked: $Dmismarked; False pos: $Efpos; False neg: $Bfneg\n";
  print "Precision: ", perc($Ccorrect, $Ccorrect + $Dmismarked + $Efpos),
    "; Recall: ", perc($Ccorrect, $Ccorrect + $Dmismarked + $Bfneg), "\n\n";
}

sub perc {
  my ($num, $denom) = @_;
  return "0%" if $denom == 0;
  my $retval = sprintf "%.2f", $num * 100 / $denom;
  $retval =~ s/\.?0+$//;
  return $retval . "%";
}

sub initvars {
  $Aunmarked = 0;
  $Bfneg = 0;
  $Efpos = 0;
  $Ccorrect = 0;
  $Dmismarked = 0;
}
