Mardi 7 avril 2009 2 07 /04 /Avr /2009 19:06

#/usr/bin/perl
# use locale; force le \w à prendre les accentués.
open(FICCORDIAL, "$ARGV[0]");
open (OUT, ">sortiepatrons.txt");
#i=0;#new (facultative) car en perl on a pas besoin d'initialiser le compteur, car perl initialise par défaut à =0.****
#$compt=1; #l'initialisation d'un compteur doit toujours être mise au dessus de la while principale. mais l'incrémentation en bas doit être au niveau de ce que on traite***
while ($ligne= <FICCORDIAL>) { #ou my $ligne = $_;
#next if ($ligne=~/\r/); #ne fait aucun traitement si la ligne contient un \r
next if ($ligne!~/\t/); #ne fait aucun traitement si la ligne ne cotient pas un \t donc toutes les lignes sauf celles qui contiennent un \r # ou on met à la place de cette if un "next if ($ligne!~/\t/)"if (($ligne=~/\t/) && ($ligne!~/\./) && ($ligne!~/PCT/)){
chomp $ligne; #enlève LF # ou $ligne=~s/\n//g;#
#print "$ligne\n";
#@tab=<FICCORDIAL>;
#print @tab[0];
if ($ligne !~/PCT/){ #on s"arrete à la ponctuation.
 # ou $ligne =~/(\w+)\t(\w+)\t(\w+)/; # $1, $2, $3; H le \w prend aussi les noms numériques.
 @decoup=split(/\t/, $ligne); # sur la ligne V*3 , une liste @
 #print "@decoup\n";
 push (@token, $decoup[0]); #insérer toute .. ou push (@token, @decoup[0]);
 push (@lemme, $decoup[1]); # push (@token, $1 ..)
 push (@partof, $decoup[2]);
 $i++;#new****
 #print "$i\n";
 #print "@partof\n";
 #print "@token\n"; dans cette if, tous les tableaux sont affichés en trapèzes.
 }
else {
 #print "@token\n";
 #ici le tableau n'est pas le même que celui d'en haut, car seules les ph completes sont reprises.
 #print "@partof\n";
 #print "@token\n";
 #print "ENTREE\n";
 #my $reponse=<STDIN>;
 open(FICPATRONS, "$ARGV[1]");
 while ($patrons=<FICPATRONS>) { #while (<FICPATRONS>)
 #ou# my $ligne1= $_ ; autre méthode pour lire les lignes d'un fichier en utilisant $_ prédéfinie.
  chomp $patrons;
  my $compare="";
#foreach my $element(@partof) { #c'est une autre solution pour mettre le contenu d'un tableau @ dans une scalaire $.
      #                 $compare=$compare."\t".$element; ##$compare.="\t".$element #la concaténation se fait dans un ordre logique de gauche à droite des éléments.
             #         }
        
#print "$compare\n";
  $compare=join("\t", @partof);
  #print "$compare\n";
#print "@partof[8] ";
#print "@partof[9]\n";
#le joineur est mis entre "", le spliteur entre / /.la var $compare
#contient tt les lignes étiquetées de cat gram. le joint recolle en prenant la ligne du tableau et la transforme en une chaine de carac dont les éléments sont séparés par un \t
#print "$compare\n";
  my $j=0; #new
  my $k=0;#new
 
  while ($compare=~/$patrons/g) { # ou if ( / /); mais ne prend pas les répétitions sur un même ligne de pat.txt
   my $avant = $`;#new
   my $apres = $';#new
   #print "$&\n";
   #print "$avant\n";
     #print "$apres\n";
   while ($avant=~/\t/g) {$j++};#new#while et non if , car répète la recherche sur la meme ligne.
   while ($apres=~/\t/g) {$k++};#new
   #print "$i\n";
   #print $j;
   #print $k;
   print OUT "@token[$j..$i-$k-1]\n";  #avec foreach on [$j-1..$i-$k-1]; donc le"-1" est additionnel pour enlever "\t" dans la concaténation : ligne 38 #new
   #print "\n";
   $j=0;#new
 $k=0;#new #peut être mise ici ou dans la while qui compare while / /g;
 
     # $compt++; #*** voir en haut.
#print "@token\n";
#print "$compare\n";
#print "correspondance!\n"
  }

     }
 $i=0;#new #sert à vider cette var. 
 @token=();
 @lemme=();
 @partof=();
     }
        }
 

 

Sortie : 121 patrons

suppression totale
commission Copé
soldat américain
magazine américain
caractère exceptionnel
procédure pénale
football professionnel
esthétique domestique
exposition L'
esthétique médiatique
Orange détenteurs
presse économique
esthétique médiatique
exposition L'
design étonnant
monde entier
site participatif
chaînes thématiques
version initiale
départs volontaires
dérive partisane
chaîne privée

Par Nassim & Marco.
Ecrire un commentaire - Voir les 0 commentaires
Dimanche 29 mars 2009 7 29 /03 /Mars /2009 15:38

Nous avons commencé à extraire le patron NCFS ADJFS à partir de la sortie .cnr étiquetée avec "Cordial".
Nous présentons dans un premier temps la sortie étiquetée. Notons que les trois colonnes de cette sortie sont séparées par un "\t" et que la ponctuation (PCT) a, comme nous allons le voir, un rôle fondamental dans la structure du script Perl. 


Sortie étiquetée :

L' le DETDMS
objectif objectif NCMS
de de PREP
la le DETDFS
commission commission NCFS
Copé Copé NPI
est être VINDP3S
une un DETIFS
suppression suppression NCFS
totale total ADJFS
en en PREP
2011 2011 NCMIN
. . PCTFORTE
\r
Parmi parmi PREP
les le DETDPIG
nouvelles nouveau ADJFP
tendances tendance NCFP
, , PCTFAIB
le le DETDMS
bio bio ADJINV
et et COO
l' le DETDMS
art de vivre art de vivre NCMS
. . PCTFORTE
\r
Script :

#/usr/bin/perl
open(FICCORDIAL, "$ARGV[0]");
while ($ligne= <FICCORDIAL>) {
next if ($ligne!~/\t/);
chomp $ligne;
if ($ligne!~/PCT/){ #traitement initial et passage au "else" dès qu'on rencontre un PCT dans $ARGV[0] (sortcordial.cnr).
@decoup=split(/\t/, $ligne);
push (@token, $decoup[0]);
push (@lemme, $decoup[1]);
push (@partof, $decoup[2]);
}
else { #deuxième traitement qui consiste à lire le fichier de patrons et à le comparer avec ce qui a été stocké dans la variable @partof dans le traitement initial. Cette dernière est d'abord affectée à une variable scalaire (transofrmation d'un tableau @ en une variable scalaire $) et ce grâce à la commande "join". Les éléments de chaque string seront délimités par un "\t" (tabulation). Il est également possible d'utiliser une boucle "foreach" avec comme instruction la concaténation systématique des éléments dans un string composé de catégories grammaticales avec un "\t". La concaténation peut se faire de deux manières (cf. infra ***). 
print "@token\n";
print "ENTREE\n";
my $reponse=<STDIN>;
open(FICPATRONS, "$ARGV[1]");
while ($patrons=<FICPATRONS>) {
chomp $patrons;
$compare=""; #initialiser à vide un variable scalaire qui va contenir les lignes de partof comparées avec le ou les patrons.
$compare=join("\t", @partof); #foreach my $element(@partof) {
                   #     ***$compare=$compare."\t".$element ##$compare.="\t".$element
                   #     }
while ($compare=~/$patrons/g) {  
print "$compare\n"; # imprime au fur et à mesure la ligne (string) de $compare où la correspondance est positive.
print "correspondance!\n"
}
}
@token=(); # vider les tableaux.
@lemme=();
@partof=();
}
}

Ligne de commande : perl etikcordial.pl (script) sortcordial.cnr (premier argument ou $ARGV[0]) patrons.txt (deuxième argument ou $ARGV[1]) > resultatpatrons2.txt

Résultats : 

L' objectif de la commission Copé est une suppression totale en 2011
ENTREE
DETDMS NCMS PREP DETDFS NCFS NPI VINDP3S DETIFS NCFS ADJFS PREP NCMIN
correspondance!
Parmi les nouvelles tendances
ENTREE
le bio et l' art de vivre
ENTREE
Les deux consoles trustent les jeux classés dans le top 100 des ventes
ENTREE
Cinq nouveaux titres sont en gestation
ENTREE
Le Britannique Tim Hetherington a remporté le grand prix du World Press de la photographie d' actualité
ENTREE
Sacré Photo de l' année 2007
ENTREE
son cliché d' un soldat américain épuisé dans un bunker en Afghanistan a été publié dans le magazine américain Vanity Fair
ENTREE
La direction de l' hebdomadaire souligne le caractère exceptionnel
ENTREE
voire inédit
ENTREE
de la procédure pénale pour faux
ENTREE
PREP DETDFS NCFS ADJFS PREP NCMIN
correspondance!

Par Nassim & Marco.
Ecrire un commentaire - Voir les 0 commentaires
Mardi 24 mars 2009 2 24 /03 /Mars /2009 19:35

Voici la feuille de style xsl pour afficher l'extraction de patrons sur FIREFOX :

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="2.0">
<xsl:output method="html"/>
<xsl:template match="/">
<html>
<body  bgcolor="white">
<p align="justify"><xsl:apply-templates select="//element"/></p>
</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(),'ADJ')]])">
  <br />
    <br />
 <font color="blue">
<strong>
  <xsl:value-of select="./data[3]" />
&#160;
</strong>
  </font>

  <xsl:text />

  </xsl:when>

 <xsl:when test="(./data[contains(text(),'ADJ')]) and (preceding-sibling::element[1][./data[contains(text(),'NOM')]])">

 <font color="red">
<strong>
  <xsl:value-of select="./data[3]" />
</strong>
  </font> <br/>

 
  </xsl:when>

  </xsl:choose>

  </xsl:template>

  </xsl:stylesheet>

Par Nassim & Marco.
Ecrire un commentaire - Voir les 0 commentaires
Lundi 23 mars 2009 1 23 /03 /Mars /2009 16:38
Pour avoir plus de patrons "NOM ADJ", nous avons ajouté la rubrique Médias ou 0,2-3236,1-0,0.xml. Et voici le résultat avec Cooktop :

commission   Copé

suppression   totale

Tim   Hetherington

World   Press

soldat   américain

magazine   américain

caractère   exceptionnel

procédure   pénale

football   professionnel

esthétique   domestique

esthétique   médiatique

presse   économique

esthétique   médiatique

design   étonnant

monde   entier

site   participatif

chaînes   thématiques

version   initiale

départs   volontaires

dérive   partisane

recettes   publicitaires

affaires   étrangères

sites   Internet

groupe   imaginaire

chaîne   cryptée

site   nouvelobs

journalistes   français

histoires   croisées

difficulté   croissante

mixage   digital

musique   classique

Jason   Bonham

formation   britannique

festival   musical

chaîne   cryptée

service   public

données   personnelles

géant   informatique

ligne   norvégien

groupe   japonais

standard   Blu-ray

service   public

Laurence   Parisot

conseil   général

fibre   optique

autorités   nigériennes

autorisation   officielle

série   documentaire

Salon   électronique

chauffeur   nigérien

chaîne   publique

groupe   Le

Neuilly   Bondy

journaliste   suisse

équipe   locale

convivialité   américains

société   Le

juge   nigérien

géant   américain

position   dominante

électronique   grand

télévision   mobile

audiovisuel   public

site   Internet

source   proche

site   communautaire

internaute   blonde

téléphonie   mobile

appareil   rudimentaire

stations   musicales

journalistes   français

suppression   inopinée

ressources   publicitaires

chaînes   publiques

box   ADSL

football   professionnel

romans   autobiographiques

portrait   intime

chaîne   thématique

bouquet   numérique

chaîne   unique

coupes   budgétaires

Côte   ouest

site   Internet

directrice   générale

Street   Journal

Syndicat   national

édition   phonographique

groupe   américain

estimations   inférieures

chaînes   privées

télévision   publique

site   Internet

journal   économique

Groupe   Le

Syndicat   national

tennis   mondial

documentaires   libanais

clichés   habituels

mouvements   capitalistiques

quotidiens   régionaux

Groupe   Le

plates-formes   musicales

président   français

Films   Animaliers

succès   commerciaux

festivals   internationaux

pays   émergents

série   policière

critique   acerbe

téléviseurs   prêts

administrateur   judiciaire

quotidien   israélien

communauté   arabe

téléphone   mobile

jeux   portable

jeux   portable

évolutions   technologiques

modèle   traditionnel

part   entière

niveau   mondial

marché   grand

public   occidental

liste   exhaustive

terroristes   potentiels

groupe   japonais

vin   américain
Par Nassim & Marco.
Ecrire un commentaire - Voir les 0 commentaires
Jeudi 19 mars 2009 4 19 /03 /Mars /2009 23:39


Voici notre feuille de style xsl:

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="2.0">

 <xsl:template match="element">

 <xsl:choose>

 <xsl:when test="(./data[contains(text(),'NOM')]) and (following-sibling::element[1][./data[contains(text(),'ADJ')]])">
  <br />
    <br />
 <font color="blue">
<strong>
  <xsl:value-of select="./data[3]" />
&#160;
</strong>
  </font>

  <xsl:text />

  </xsl:when>

 <xsl:when test="(./data[contains(text(),'ADJ')]) and (preceding-sibling::element[1][./data[contains(text(),'NOM')]])">

 <font color="red">
<strong>
  <xsl:value-of select="./data[3]" />
</strong>
  </font>

 
  </xsl:when>

  </xsl:choose>

  </xsl:template>

  </xsl:stylesheet>

 

Par Nassim & Marco.
Ecrire un commentaire - Voir les 0 commentaires

Présentation

Créer un Blog

Recherche

Calendrier

Février 2012
L M M J V S D
    1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29        
<< < > >>
Créer un blog gratuit sur over-blog.com - Contact - C.G.U. - Rémunération en droits d'auteur - Signaler un abus