#/usr/bin/perl <new(); # on lance le timer $t->start; #----------------------------------------------------------- my $rep="$ARGV[0]"; my $rubrique ="$ARGV[1]"; # on s'assure que le nom du répertoire ne se termine pas par un "/" $rep=~ s/[\/]$//; open(my $OUT,">:encoding(utf8)","sortie-slurp_$rubrique.txt"); open(my $OUTXML,">:encoding(utf8)","sortiexml-slurp_$rubrique.xml"); open(my $OUTUDPIPE,">:encoding(utf8)","sortieudpipe-slurp_$rubrique.txt"); print $OUTXML "\n"; print $OUTXML "\n"; my %dico_des_titres=(); my $numberItem=0; my $i=0; #---------------------------------------- &parcoursarborescencefichiers($rep); #recurse! #---------------------------------------- print $OUTXML "\n"; close $OUT; close $OUTXML; close $OUTUDPIPE; #---------------------------------------- #---------------------------------------- print "Nb item : $numberItem \n"; # temps écoulé depuis le lancement du programme print "time so far: ", $t->elapsed, " seconds\n"; exit; #---------------------------------------------- sub parcoursarborescencefichiers { my $path = shift(@_); opendir(my $DIR, $path) or die "can't open $path: $!\n"; my @files = readdir($DIR); closedir($DIR); foreach my $file (@files) { next if $file =~ /^\.\.?$/; $file = $path."/".$file; if (-d $file) { &parcoursarborescencefichiers($file); #recurse! } if (-f $file) { if ($file =~/$rubrique.+xml$/) { print $i++," Traitement de : ",$file,"\n"; open(my $FIC,"<:encoding(utf8)",$file); $/=undef; #ou $\="" my $textelu=<$FIC>; close $FIC; my $texte2tag=""; while ($textelu=~/.*?(.+?)<\/title>.+?<description>(.+?)<\/description>/sg) { my $titre=$1; my $description=$2; $numberItem++; if (!(exists $dico_des_titres{$titre})) { $dico_des_titres{$titre}=$description ; # Appel du sous-programme de nettoyage ($titre,$description)=&nettoyage($titre,$description); # Ecriture des résultats en sorties print $OUT $titre,"\n"; print $OUT $description,"\n"; print $OUT "\n"; # pré-étiquetage avant treetagger : tokenization -------------- my ($titre_etiket,$description_etiket)=&preetiquetage($titre,$description); #-------------------------------------- print $OUTXML "<item><titre>\n$titre_etiket\n</titre><description>\n$description_etiket\n</description></item>\n"; &etiquetageUD; &etiquetageTT; } } } } } } #---------------------------------------------- sub nettoyage { #my $titre=shift(@_); autre solution en vidant la liste des arguments du programmes... #my $description=shift(@_); my $titre = $_[0]; my $description = $_[1]; $titre=~s/^<!\[CDATA\[//; $titre=~s/\]\]>$//; $description=~s/^<!\[CDATA\[//; $description=~s/\]\]>$//; $description=~s/<.+?>//g; $description=~s/&#39;/'/g; $description=~s/&#34;/"/g; $titre=~s/<.+?>//g; $titre=~s/&#39;/'/g; $titre=~s/&#34;/"/g; $titre=~s/$/\./g; $titre=~s/\.+$/\./g; $titre=~s/&//g; $titre=~s/ //g; $description=~s/&//g; $description=~s/ //g; return $titre,$description; } #---------------------------------------------- sub preetiquetage { my $titre = $_[0]; my $description = $_[1]; #-----------------etiquetage titre----------------------------- open (my $ETI, ">:encoding(utf8)", "temporaire.txt"); print $ETI $titre; close $ETI; system ("perl -f ./distrib-treetagger/tokenise-utf8.pl temporaire.txt > test.txt.pos"); open (my $TEMP, "<:encoding(utf8)", "test.txt.pos"); $/=undef; my $titre_etik_xml=<$TEMP>; close $TEMP; #-----------------etiquetage description----------------------------- open (my $ETI, ">:encoding(utf8)", "temporaire.txt"); print $ETI $description; close $ETI; system ("perl -f ./distrib-treetagger/tokenise-utf8.pl temporaire.txt > test.txt.pos"); open (my $TEMP, "<:encoding(utf8)", "test.txt.pos"); $/=undef; my $description_etik_xml=<$TEMP>; close $TEMP; return $titre_etik_xml,$description_etik_xml; } #---------------------------------------------- sub etiquetageTT { system ("perl -f ./distrib-treetagger/tokenise-utf8.pl sortiexml-slurp_$rubrique.xml | ./distrib-treetagger/tree-tagger.exe ./distrib-treetagger/french-utf8.par -token -lemma -no-unknown -sgml > sortiexml-slurp_TT_$rubrique.txt"); system ("perl ./distrib-treetagger/treetagger2xml-utf8.pl sortiexml-slurp_TT_$rubrique.txt utf8"); } #----------------------------------------------- sub etiquetageUD { # Etiquetage avec udpipe -------------- # lancer udpipe : distrib-udpipe-1.2.0-bin system("./distrib-udpipe-1.2.0-bin/udpipe-1.2.0-bin/bin-linux64/udpipe --tokenize --tokenizer=presegmented --tag --parse ./distrib-udpipe-1.2.0-bin/modeles/french-gsd-ud-2.5-191206.udpipe sortie-slurp_$rubrique.txt > sortieudpipe-slurp_$rubrique.txt"); system("./distrib-udpipe-1.2.0-bin/udpipe2xml-version-sans-titrevsdescription-v2.pl sortieudpipe-slurp_$rubrique.txt"); }