﻿#/usr/bin/perl -w
use feature qw/say/;
use autodie;


<<DOC; 
auteur : Uliana Petrunina
18 juin 2014
usage : perl cord_patron_jmd.pl sortie-CORDIAL patron-080414.txt
DOC

#1 étape: lecture du fichier annoté avec le treetagger et la mise en liste de chaque de cette colonne. On s'arrête au moment qu'on trouve la catégorie.
#sil n'y a pas de tabulation sur la ligne, on la traite.

my $racine= shift @ARGV;
my $patron= shift @ARGV;

print $patron
&recurseTousFics($racine);

########################PARCOURS DES FICHIERS############################################################################
sub recurseTousFics { 

    my $dossier=shift(@_);
	print "Le dossier est ", $dossier, "\n";
    opendir(DOSSIER, $dossier) or die "can't open $dossier: $!\n";#FFFFFF
    my @files=readdir(DOSSIER);
    closedir(DOSSIER);
    #print "liste des fichiers de $dossier : @files\n";
    #print "Le chemin est le suivant : @files\n";
    foreach my $fic_cordial(@files){
		my $fic_patron=$fic_cordial;

		
		next if $fic_cordial =~ /^\.\.?$/; #print "On ne fait rien\n";
		next if $fic_cordial =~ /\.txt$/; #print "On ne fait rien\n";
		
		$fic_patron=~s/2013-extract-txt- *//g;
		$fic_patron=~s/\.cnr *//g;
		$fic_patron="patron-".$fic_patron.".txt";
#Chaque fichier de sortie contenant les suites des mots sera stocké dans le dossier sortie_patrons
#Le STDOUT au moment de l'extraction des patrons sera redirigé dans le fichier $fic_patron
		open(LOG,'>', "sortie-PATRONS/$fic_patron");
		
		my $fic_cordial_atraiter = $dossier."/".$fic_cordial;
		
########################EXTRACTION DES PATRONS############################################################################
		open(TEXT, $fic_cordial_atraiter)or die "can't open $fic_cordial_atraiter: $!\n";
		while(my $ligne=<TEXT>){#lecture de ligne à ligne du fichier
			if ($ligne=~/\t/){#on ne traite que les lignes qui contiennent une tabulation (issue de cordial)
			chomp ($ligne);
			$ligne=~s/\r//;
			my  @LISTE=split(/\t/, $ligne);
		#on découpe la ligne via les tabulations : resultat, une liste de 3 éléments (FORME, LEMME, POS) ==> ex: JE JE PRO
		#$LISTE[0]<-forme, $LISTE[1] <- lemme, $LISTE(2] <-POS

			if ($LISTE[2] !~/PCTF/){
				push(@TOKEN, $LISTE[0]);
				push(@LEMME, $LISTE[1]);
				push(@POS, $LISTE[2]);
				}
			else {
				#print "@TOKEN \n";
				#my $rep1=<STDIN>;
				#print "@LEMME \n";
				#my $rep2=<STDIN>;
				#print "@POS \n";
				#my $rep3=<STDIN>;
				#my $test=join("_", @POS);
				#if ($test!~/_/){

					#print "@POS \n";
					#print "@TOKEN \n";
					my $SUITEDEPOS=join(" ", @POS);#la liste part of speech est transformée en scalaires
					#print $SUITEDEPOS, "\n";
					open(PATRON, $patron); # le fichier patron est la seconde argument du script
					while (my $patron=<PATRON>){
						
						
						chomp($patron);
						$patron=~s/\r//g;
						my $compteur=0;
						while ($SUITEDEPOS=~/$patron/g){

							$compteur++;
							#print "Sur $SUITEDEPOS = : il y a $compteur correspondance(s) \n";
							#my $rep3=<STDIN>; 
							my $avant= $`;
							my $j=0;
							while ($avant =~/ /g){
								$j++;


								}
							#print "Voici la suite avant la correspondance : $avant il y a $j blanc(s)\n";
							#print "Voici la suite de POS : $SUITEDEPOS\n";
							#print "Voici PATRON : $patron\n";
							#print "Return !!!\n";
							#my $rep=<STDIN>;
							my $k=0;
							
							while ($patron =~/ /g){
								$k++;
								}
							select LOG;
							say "@TOKEN[$j..$j+$k]\n";
							
							}
							
						}
					close(PATRON);
					
					

				@TOKEN=();
				@LEMME=();
				@POS=()



			}

	}


}
close(LOG);
}
}



#ulianap@CEL-4GXUW5DNC7:/media/KINGSTON/PARIS3/BAO3$ file -i SORTIE-extract-txt-ALAUNE-iso.cnr 
#SORTIE-extract-txt-ALAUNE-iso.cnr: text/x-c++; charset=iso-8859-1

