package filtrage;
use strict;
use warnings;
use diagnostics;
use utf8;
use Exporter;
our @EXPORT = qw(&filtrageXML);
our @ISA = qw(Exporter);
use utf8;
use utile;
use petitParserDom;
use erreur;
# filtrage file,[tag1,tag2...],(fonction),(xml);
sub filtrageXML{
my @arg=@_;
my $file=shift @arg;
my $tags=shift @arg;
my $dernier=pop @arg;
my $xml=0;
my $traitement=\&ecrire;
if (defined($dernier)){
if($dernier eq "xml"){
$xml=1;
$dernier=pop @arg;
if (defined($dernier)){
$traitement=$dernier;
}
}else{
$traitement=$dernier;
}
}
my $texte;
my $t;
my $texteSortie="";
my($info,$commentaire,$arbre)=petitParserDom::parser($file);
foreach my $tag (@$tags){
foreach (petitParserDom::getNoeudsParTag($arbre,$tag)){
($t)=petitParserDom::getTexte($_); #on récupére seulement la première référence de texte (il n'y en a qu'une dans ces documents)
# on déférence pour obtenir le texte
$texte=&$traitement(transformationEntite($$t));
if ($xml){
$texte="\t<passage tag=\"$tag\">\n\t\t".$texte."\n\t</passage>\n";
}else{
$texte=$texte."\n";
}
$texteSortie.=$texte;
}
}
return $texteSortie;
}
sub ecrire{
return (shift @_);
}
sub transformationEntite{
my $texte=shift;
# traite seulement les entités les plus courantes en français
my %entite=(38=>'',39=>"'",34=>'"',224,'à',226,'â',231=>'ç',232,'è',233,'é',234,'ê',235,'ë',238,'î',239,'ï',244,'ô',249,'ù',251,'û',252,'ü',);
while(my($k,$v)=each(%entite)){
$texte =~ s/&?#$k;/$v/g;
}
return $texte;
}
1;