open(FILE,"$ARGV[0]"); my @lignes=
; close(FILE); while (my $ligne=shift(@lignes)) { chomp $ligne; my $sequence=""; my $longueur=0; if ( $ligne =~ / NOM<\/data>[^<]+<\/data>([^<]+)<\/data><\/element>/) { my $forme=$1; $sequence.=$forme; $longueur=1; my $nextligne=$lignes[1]; #saut de ligne dans nos scripts if ( $nextligne =~ / ADJ<\/data>[^<]+<\/data>([^<]+)<\/data><\/element>/) { my $forme=$1; $sequence.=" ".$forme; $longueur=2; } } if ($longueur == 2) { print $sequence,"\n"; } }
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="2.0"> <xsl:output method="html"/> <xsl:template match="/"> <html> <body bgcolor="#FF5500"> <table align="center" width="50%" bgcolor="173653" bordercolor="#bad0d1" border="1"> <tr bgcolor="#FF8A9A"> <td> <font color="#c86755" align="center"> <h1> Extraction de patron <font color="#f0b156"> <b>NOM</b> </font> <font color="#bad0d1"> <b>ADJ</b> </font> </h1> </font> </td> </tr> <tr> <td> <blockquote> <xsl:apply-templates select="//article"/> </blockquote> </td> </tr> </table> </body> </html> </xsl:template> <xsl:template match="element"> <xsl:choose> <xsl:when test="(./data[contains(text(),'NOM')]) and (following-sibling::element[1][./data[contains(text(),'NOM')]])"> <font color="#f0b156"> <xsl:value-of select="./data[3]"/> </font> <xsl:text></xsl:text> </xsl:when> <xsl:when test="(./data[contains(text(),'ADJ')]) and (preceding-sibling::element[1][./data[contains(text(),'ADJ')]])"> <font color="#bad0d1"> <xsl:value-of select="./data[3]"/> </font> <br/> </xsl:when> </xsl:choose> </xsl:template> </xsl:stylesheet>A.2] Voici un aperçue de la sortie au format HTML une fois que la feuille de style est appliquée à un fichier XML:
HTML
#!/usr/bin/perl #------------------------------------------------- # PROGRAMME PRINCIPAL #------------------------------------------------- my @LISTETOKEN=(); my @LISTELEMME=(); my @LISTEETIQUETTE=(); #-------------------------------------------------- # lecture du fichier PATRON open(PATRON,"$ARGV[1]"); my @LISTEPATRON=<PATRON>; # lecture globale du fichier dans une liste close(PATRON); #-------------------------------------------------- # le fichier cordial est le premier argument du programme open(CORDIAL,"$ARGV[0]"); # visiblement pas de pb d'encodage... while (my $ligne=<CORDIAL>) { $ligne=~s/\r//; chomp($ligne); if ($ligne=~/^([^\t]+)\t([^\t]+)\t([^\t]+)$/) { my ($token,$lemme,$etiquette)=($1,$2,$3); if ($etiquette!~/PCTF/) { push(@LISTETOKEN,$token); push(@LISTELEMME,$lemme); push(@LISTEETIQUETTE,$etiquette); } else { &compare(\@LISTETOKEN,\@LISTEETIQUETTE); # creation d'un reference vers une liste @LISTETOKEN=(); @LISTEETIQUETTE=(); @LISTELEMME=(); } } } # ----------------------------------------------------- # SOUS - PROGRAMMES #------------------------------------------------------ sub compare { # TRAITEMENT... my ($first,$second)=@_; my @LISTETOKEN=@$first; my @LISTEETIQUETTE=@$second; foreach my $patron (@LISTEPATRON) { $patron=~s/\r//; chomp $patron; #print "$patron\n"; my $texte_des_pos=join(" ",@LISTEETIQUETTE); while ($texte_des_pos=~/$patron/g) { my $contextebefore=$`; my $compteurblanc=0; while ($contextebefore=~/ /g) { $compteurblanc++; } my @MONPATRONENCOURS=split(/ /, $patron); my $longueurpatron=$#MONPATRONENCOURS; my $bornesup = $compteurblanc + $longueurpatron; print "@LISTETOKEN[$compteurblanc..$bornesup] \n"; } } }B.2] Voici un aperçu de ce que produit ce script:
système de qualifications élimination progressive système de qualifications Prix d' ouverture est en ouest manière curieuse Danse sur glace titre mondial programme libre titre mondial patinage artistique nageur français pilote espagnol discrimination salariale fédération pour discrimination monde américaines équipe nationale justice civile paires de chaussures star argentine vague d' indignation vie désastreuses ouvriers immigrés conditions de vie