#! /usr/bin/perl -w

use Getopt::Long;
use strict;

#================================================================
# cde
# compare.pl -file lesdiabetiques.ttg -dico Lexique381.txt
#================================================================
sub usage {
    warn "Usage :
   -file      #
   -dico      #
   \n"
}

#================================================================
# traitement des options

my $file = "";
my $dico = "";

#================================================================
unless (&GetOptions(
	     "file=s", \$file,
	     "dico=s", \$dico,
	)) 
{
    warn "Problème d'options\n";
    &usage;
    die;
}

#================================================================
# variables globales

my %corpus = ();
my %dico = ();
#================================================================

# une fonction qui lit le fichier + fait d'autres choses
sub ReadFile {
    # récupérer le nom du fichier
    my $f = $_[0];
    # créer un handle qui permet d'ouvrir le fichier
    open (FILE, $f) || die "no such file '$f'\n";
    # ouverture du fichier avec le handle
    while (<FILE>) {
	# dans ce contexte, la variable par defaut $_ 
	# contient la ligne courante du fichier
	# on crée une variable dédiée $l qui contient une ligne
	my $l = $_;
	# on enleve le dernier caractère (saut à la ligne)
	chop($l);
	# on ne traite pas les lignes qui contiennent ====== ou _____ 
	#  ou commence par <
	next if ($l =~ /==========/);
	next if ($l =~ /____/);
	next if ($l =~ /^</);
	# on segmente la ligne sur le caractère "tabulation" 
	# et on met tout dans un tableau
	my @t = split (/\t/, $l);
	# si le lemme (champs 3) comporte le motif <unknown>
	if ($t[2] =~ /<unknown>/) {
	    # alors on utilise la forme à la place du lemme $t[0]
	    # que l'on met en minuscule avec lc (low case)
	    my $forme = lc($t[0]);
	    $corpus{$forme}++;
	}
	# sinon
	else {
	    # on utilise le lemme $t[2]
	    # que l'on met en minuscule avec lc (low case)
	    my $lemme = lc($t[2]);
	    $corpus{$lemme}++;
	}
    }
}

sub ReadDico {
    # récupérer le nom du fichier
    my $f = $_[0];
    # créer un handle qui permet d'ouvrir le fichier
    open (DICO, $f) || die "no such file '$f'\n";
    # ouverture du fichier avec le handle
    while (<DICO>) {
	# dans ce contexte, la variable par defaut $_ 
	# contient la ligne courante du fichier
	# on crée une variable dédiée $l qui contient une ligne
	my $l = $_;
	# on enleve le dernier caractère (saut à la ligne)
	chop($l);
	# on ne traite pas les lignes qui contiennent ====== ou _____ 
	#  ou commence par <
	next if ($l =~ /==========/);
	next if ($l =~ /____/);
	next if ($l =~ /^</);
	# on segmente la ligne sur le caractère "tabulation" 
	# et on met tout dans un tableau
	my @t = split (/\t/, $l);
	# on met dans le hashage la forme et le lemme
	$dico{$t[0]}++;
	$dico{$t[2]}++;
    }
}

# impression
sub Print {
    # pour chaque mot (type) du corpus
    foreach my $l (keys %corpus) {
	# s'il existe dans le dico
	if (exists ($dico{$l})) {
#	    print "$l -- $corpus{$l}\n";
	}
	# s'il n'existe pas dans le dico
	#  se trouve uniquement dans le corpus
	else {
	    print "$l -- $corpus{$l}\n";
	}
    }
}

sub main {
    # appel de la fonction
    &ReadFile($file);
    &ReadDico($dico);
    &Print;
}

# appel de la fonction principale
&main;
