pluriTAL – BLOG Master pluriTAL [ParisX, ParisIII, INALCO]

BAO1 : Petit exercice de prog. pour choper toutes les balises

Posted in pluriTAL by pluritaluser on 10 mars 2009

Comme convenu avec certains de nos collègues, voici le bout du code que j’ai réalisé dans le but de choper le contenu des balises description (boite à outil 1) dans le script parcours-arborescence-fichiers.pl . Sont prévus ici les cas de contenus s’étendant sur plusieurs lignes ou ceux -plusieurs- se trouvant sur une même ligne. Il s’agit, en effet, de cas réellement rencontrés dans notre corpus (merci à Nassim !). J’ai fait des tests, et ça a l’air de fonctionner … mais sait-on jamais ! Je garde une oreille attentive (et un oeil vif aussi) sur d’éventuelles  suggestions, en restant bien entendu à votre disposition ^_ ‘

NB. Cette proposition demeure un bon exercice de manipulation de variables et de logique algorithmique. Néanmoins, elle ne présente certainement pas une solution optimale dans le cadre de notre projet. Pour avoir la tête plus tranquille, et comme il existe des gens qui ont déjà pensé à tout ça, il est recommandé par le prof. d’utiliser la bibliothèque RSS, qu’il nous a envoyée dans le mail du 30 janvier (tout y est, le script et le manuel d’installation), et … ça doit être bcp plus pratique...

Voici le morceau que j’ai repris à partir du test du dossier dans le sous-programme (faire attention aux accolades de la fin [certaines sont ouvertes avant cet extrait ]) :

if (-d $file)
{
&parcoursarborescencefichiers($file);   #recurse!
}

if ((-f $file) && ($file=~ /\.xml$/)) # inclure ici le choix de la rubrique
{
open(FICHIER, « $file »);

$DUMPFULL1.= »<fichier nom=\ »$file\ »>\n »;

my %prevlignes=(); # variable pour filtrer les lignes redondantes
my $flag=0;  # variable fonctionnelle pour gérer les contenus multilignes
my $drop=0; # variable fonctionnelle pour gérer plusieurs contenus sur la même ligne
my $contenu= » »;  #variable pour le contenu des balises
my $multi= » »; # variable pour accumuler les contenus multilignes
my $i=1;  # variable d’incrémentation en fonction des contenus extraits

while ($ligne = <FICHIER>)
{
if ($flag!=1) # si la collecte du contenu multiligne n’est pas déclenchée
{
while ($ligne=~/<description>([^<]+)<\/description>/g) # si contenu(s)  sur même la ligne
{
my $var1=$1; # variable de nettoyage d’éventuelles balises internes au contenu
$var1=~s/<(.+)>//g;
next if $var1=~/^Toute l’actu(.+)/; # omission de l’entête redondante
if ($var1=~/.+/)
{
$contenu.= »<extrait num=\ »$i\ »>$var1</extrait>\n »;
$i++;
}
$drop=1;
}
if (($drop!=1) && ($ligne=~/<description>([^<\/d]+)/))  # si uniquement balise ouvrante rencontrée
{
$contenu=$1;
$flag=1;
}
}
else # si contenu sur plusieurs lignes
{
if ($ligne=~ /([^<]*)<\/description>/) # si balise fermante rencontrée
{
$multi.=$1;
$flag=2;
}
else
{
$contenu=$ligne;
}
}
if ($flag==1)
{
chomp($contenu); # suppression du caractère de retour à la ligne (LF).
$multi.=$contenu; # accumuler le contenu multiligne
}
else
{
if ($flag==2) # s’il s’agit de contenu multiligne
{
$recup=$multi;
$multi= » »; # réinitialisation du contenu de la variable
$contenu= » »; # réinitialisation du contenu de la variable
}
else # s’il s’agit d’un contenu monoligne
{
$recup=$contenu;
$contenu= » »;
}
if (not exists ($prevlignes{$ligne})) # si la ligne n’existe pas auparavant
{
# nettoyage du contenu récupéré

$recup=~s/&#39;/\’/g;
$recup=~s/&#34;/\ »/g;
$recup=~s/è/è/g;
$recup=~s/é/é/g;
# suite nettoyage
print FILETXT « $recup \n »;
$DUMPFULL1.= »<extrait num=\ »$i\ »>$recup</extrait>\n »;
$i++;
$prevlignes{$ligne}++;
}
}
}
}
$DUMPFULL1.= »</fichier>\n »;
close(FICHIER);

#———————————————-

…………………………………………….. Jugurtha Aït Hamlat …………………………………………………..

Publicités

Laisser un commentaire

Choisissez une méthode de connexion pour poster votre commentaire:

Logo WordPress.com

Vous commentez à l'aide de votre compte WordPress.com. Déconnexion / Changer )

Image Twitter

Vous commentez à l'aide de votre compte Twitter. Déconnexion / Changer )

Photo Facebook

Vous commentez à l'aide de votre compte Facebook. Déconnexion / Changer )

Photo Google+

Vous commentez à l'aide de votre compte Google+. Déconnexion / Changer )

Connexion à %s

%d blogueurs aiment cette page :