#!/usr/bin/perl

# Programa que calcula concordâncias
# Última alteração: DMS, 3 de Junho de 2003

use locale;
use POSIX qw(locale_h);
setlocale(LC_CTYPE, "pt_PT") or die;
require '/home/morfolimpiadas/programas/biblioteca_mol.pl';

if ($ARGV[0] eq "-a") {
    $analises=1; shift;
} elsif ($ARGV[0] eq "-l") {
    $anlemas=1; shift;

} elsif ($ARGV[0] eq "-b") {
    $solemas=1; shift;
} elsif ($ARGV[0] eq "-d") {
    $dour=1; shift;
    open DOURADA, "/home/morfolimpiadas/construcao_dourada/ListaDourada.prv7" or die "Não consegui abrir /home/morfolimpiadas/construcao_dourada/ListaDourada.prv7!\n";
    @dourada=split /\n\xd7\n/, join "", <DOURADA>;
    close DOURADA;
    @lista=&ObtemColuna(0, @dourada); 
    $tam_dourada=$#lista;
}

($programa=$0)=~s#.+\/##;

while ($fx=$ARGV[0]) {
    $i++; $nome="tokens$i"; $nome_sist="sistema$i"; $alt{$nome_sist}=$ARGV[0];
    if ($fx!~/\./) {
	$fx=&Max((grep /$ARGV[0]\.def/, &DirConteudo(".")));
    }
#    print STDERR "Estou a executar o programa $programa sobre o ficheiro $fx\n";

    open F1, $fx or die "Não consegui abrir o ficheiro $fx!";
    @$nome=split /\n\xd7\n/, join "", grep ! /TEXTO/, <F1>;
    close F1;
    pop @$nome;
#    print "Cardinal de $nome antes de obter análises: $#$nome\n";


# se quisermos analises...
    if ($analises) {
	@$nome= split/\n/, join"\n", @$nome;
#	print "Cardinal de $nome antes de JuntaColunas: $#$nome\n";
	@$nome=&JuntaColunas (0,1,@$nome);
    } elsif ($anlemas) {
	@$nome= split/\n/, join"\n", @$nome;
	@$nome=&JuntaTresColunas (0,1,2,@$nome);
    } elsif ($solemas) {
	@$nome= split/\n/, join"\n", @$nome;
	@$nome=&JuntaColunas (0,2,@$nome);
    } elsif ($dour) {
	@$nome=&FiltraLista($tam_dourada,@lista,@$nome);
    } else {
	@$nome=&ObtemColuna (0,@$nome);
    }

    foreach (@$nome) {
	$$nome_sist{$_}=1;
    }
#    print "Cardinal de $nome: $#$nome\n"; 
    print "$nome: ".(scalar keys %$nome_sist)." diferentes\n";

    shift;
    push (@lista_sist, $nome_sist);
}
#print join (" ",@lista_sist)."\n";

foreach $sist (@lista_sist) {

    foreach $forma (keys %$sist) {
	$sistemas{$forma}.=" $sist" if ($$sist{$forma});
    }
}

print "Nos ".(scalar @lista_sist)." $i sistemas há ". scalar (keys %sistemas)." formas diferentes\n";

foreach $forma (keys %sistemas) {

    $num=split / +/, $sistemas{$forma};
    $num--; # num é o número de sistemas em que a forma aparece
#    print "$forma: $num sistemas\n";
    $todos{$forma}++ if $num eq $i;
    if ($num eq 3) {$tres{$forma}++}
    elsif ($num eq 2) {$dois{$forma}++}
    elsif ($num eq 1) {$unicas{$forma}++}
    elsif ($num eq 4) {$quatro{$forma}++}
    elsif ($num eq 5) {$cinco{$forma}++}
    elsif ($num eq 6) {$seis{$forma}++}

}

print "Formas comuns". scalar (keys %todos)."\n";
print "Seis ".scalar (keys %seis)."; cinco ".scalar (keys %cinco)."; quatro ".scalar (keys %quatro)."; três ". scalar (keys %tres)."; dois ". scalar (keys %dois)."; unicas ". scalar (keys %unicas)."\n"; 

$comuns=scalar (keys %todos);
foreach $sist (@lista_sist) {
    $conc=sprintf "%3.2f", $comuns/scalar (keys %$sist)*100;
    print "$sist: $conc\n";
}

open DEBUG, ">debug.txt" or die "Não consegui abrir o debug.txt!\n";
foreach $fo (keys %unicas) {
    ($id)=($sistemas{$fo}=~s/^ //); 
    print DEBUG "$fo $sistemas{$fo} $alt($id) \n";
}



