#!usr/bin/perl -w

###############    STATISTIK  #####################################
#                                                                 #
# Project Acronym:     PaGAL                                      #
# Document ID:                                                    #
# Date:                28/06/01                                   #
# Author:              Jutta Jäger                                #
# WP/Task              T                                          #
# Abstract:            modul for printing lists and statistics    #
# Distribution:        public                                     #

# Version      Date     Author  Notes                             #

# 1            30/4/01  G, J                                      #
#                                                                 #
# 2            28/6/01  J       printen mit select, write,
#                               Unterfunktionen zum Header printen#
# 3            07/07/01 J       printf wg. Portablitaet           #
# 
# 4            18/11/01 J       Funktion mistake_control sorgt    #
#                               dafuer, dass nur Fehler erkannt   #
#                               werden, die auch welche sind      #
#                                                                 #
###################################################################

package Statistik;



require Exporter;

@ISA = qw(Exporter);

@EXPORT = qw(print_mistakes print_statistics print_header);

@EXPORT_OK = qw(%statistics);




%statistics = qw(all 0 mist 0 lemma 0 lemma_mist 0 abverz 0 abverz_mist 0 adjektiv 0 adjektiv_mist 0 notpossible 0);

################################ print_header ###################################################

sub print_header {

  my ($version, $mode) = @_;

 print("-----------------------------------------------------------------------\n\n");
  if ($mode eq "F")
    {
      print("                                MISTAKELIST\n");
    }else{
      print("                                   LIST\n");
    }
print scalar(localtime);
print("                                        PT $version\n
-----------------------------------------------------------------------\n\n"); 
}


############################### Print_mistakes #############################
#
#   Jedesmal, wenn print_mistakes aufgerufen wird, wurde eine Langform
#   erledigt. Deshalb wird anfangs erstmal der Statistik-hash weiter-
#   gezählt. Ob dann tatsächlich in die Liste geschrieben wird, darüber
#   entscheidet, die Art der Liste (Fehler oder Alles) und ob es sich
#   tatsächlich um einen Fehler handelt.
#
###########################################################################
sub print_mistakes 
  {
   
    my ($lemma, $generiert, $gefunden, $langform, $art) = @_;
    
    
    $statistics{all} ++;
    $statistics{$art} ++;
    
    if ((!$generiert)||&mistake_control($generiert, $gefunden)||($main::printmode eq "A")) {
      
      print ("$.\tLangform $langform\n\tKurzform $gefunden\n\tGeneriert $generiert\n\tArt $art\tlemma $lemma\n\n");    # $. enthaelt die Zeilennummer der
      # gelesenen Datei, das ist
      # in diesem Fall die Nummer des lexikoneintrags


      if ((!$generiert)||(&mistake_control($generiert, $gefunden))){

	#Beim Statistik-Hash werden die Fehler gezählt
	
	$statistics{mist} ++;
	$statistics{$art."_mist"} ++;
      }
      
    }    
  }

###################################### mistake_control #########################
#
# bekommt generierte und gefundene Abkuerzung und gibt 1 zurueck, wenn
# die generierte Abkuerzung einen Fehler hat.
#
################################################################################


sub mistake_control
  {
    my ($gen, $gef) = @_;
    my ($mistake)=0;
    
   
    $gef =~ s/\<\?Pub Caret>//; #Tag mit Cursorposition wird geloescht

    $gef =~ s/&spvgev;/ /; #verschieden kodierte Leerzeichen werden durch
    #einfache Leerzeichen ersetzt
    $gen =~ s/&spvgev;/ /;
    $gef =~ s/&spfest;/ /;
    $gen =~ s/&spfest;/ /;
    
    if ($gen ne $gef) {$mistake = 1;}
    
    return $mistake;
  }



######################################### print_statistics ####################################


sub print_statistics{

# Header

print("-----------------------------------------------------------------------\n\n                                STATISTIK\n");
print scalar(localtime);
print("                                        PT $main::pagalversion\n
-----------------------------------------------------------------------\n\n");

# Sämtliche Zahlen aus dem Statistik-Hash werden jetzt gedruckt,
# die eval-Anweisungen sind nötig, um die Prozentzahlen ausrechnen
# zu lassen, auch wenn einmal irgendwo eine 0 enthalten ist.


print("Anzahl der Datensätze: $.\n\nAbkuerzungen gesamt:\t$statistics{all}\t davon falsch: $statistics{mist}\t");
eval {printf "%.2f" , $statistics{mist} * 100/$statistics{all}};
print ("%\n\n");
print("Angewendete Abkuerzungsarten:\n\n");
print("Lemma gesamt:     \t$statistics{lemma}\t davon falsch: $statistics{lemma_mist}\t");
eval {printf "%.2f", $statistics{lemma_mist}*100/$statistics{lemma}};
print (" %\n");
print("Verzeichnis gesamt:\t$statistics{abverz}\t davon falsch: $statistics{abverz_mist}\t");
eval {printf "%.2f", $statistics{abverz_mist}*100/$statistics{abverz}};
print (" %\n");
print("Adjektiv gesamt:\t$statistics{adjektiv}\t davon falsch: $statistics{adjektiv_mist}\t");
eval {printf "%.2f" , $statistics{adjektiv_mist}*100/$statistics{adjektiv}};
print (" %\n\n");

print ("Undefinierte Regeln:\t$statistics{notpossible}");
eval {printf " das sind %.2f" , $statistics{notpossible}*100/$statistics{all}};
print("% aller Fehler\n");
}

1;

