Début de l'extraction des patrons pour la sortie Cordial

Publié le par Marion et Sophie

On va extraire les patrons à partir du fichier obtenu avec Cordial.

            On va utiliser la ponctuation comme marque de séparation car on considère qu’on ne peut pas trouver un syntagme de part et d’autre d’une marque de ponctuation.

            En entrée, le programme prendra deux fichiers :

-          le fichier étiqueté avec Cordial

-          Les patrons qu’on veut extraire

Extrait de fichier étiqueté avec Cordial :

mot lemme Typegram 
.
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
Les le DETDPIG
syndicats syndicat NCMP
réclament réclamer VINDP3P
des un DETDPIG
psychologues psychologue NCPIG
. . PCTFORTE

Fichier qui contient les patrons :

NCMS ADJMS
NCFS ADJFS
NCMP ADJMP 
NCFP ADJFP

-> ces patrons permettent d'extraire tous les couples NOM + ADJ quelques soient les nombres et les genres de ces derniers

Programme qui extrait les patrons :

#/usr/bin/perl  #c'est le chibong!!
open (FICCORDIAL, "$ARGV[0]");
while (<FICCORDIAL>) { # variable par défaut correspondante : $_
 next if ($_!~/\t/); # on saute les lignes dans lesquelles il n'y a rien
 my $ligne = $_;
 chomp $ligne; # pour enlever le caractère de retour à chaque fin de ligne
 if ($ligne!~/PCT/) { # si la ligne ne contient pas de ponctuation
  # MADE IN J-M DAUBE : $ligne=~/(\w+)\t(\w+)\t(\w+)\t/;
  # ATTENTION cette ligne n'est pas satisfaisante pour les mots qui contiennent des espaces !! exemple : au moment de
  # avec la bibliothèque locale (use locale) 'w' aurait aussi contenu les caractères accentués car on se place en France

  @cutcut=split(/\t/, $ligne); #on utilise le fait que les mots sont séparés par des tabulations
  push (@token, $cutcut[0]);
  push (@lemme, $cutcut[1]);
  push (@pos, $cutcut[2]);
  }
 else {
  print "@token\n";
  print "appuie sur return pour continuer\n";
  my $reponse=<STDIN>;
  open (PATRONS, "$ARGV[1]"); # c'est le fichier des patrons qu'on veut trouver
  while (<PATRONS>) {
   my $patron = $_; # on met dans la variable patron ce qui est contenu dans patrons.txt
   chomp $patron; # pour enlever le caractère de retour à chaque fin de ligne
   $compare=""; # on initialise $compare à vide
   foreach my $element (@pos) { # pour chaque partie du discours
    $compare=$compare."\t".$element; # on met à la suite toutes les parties du discours avec entre deux parties une tabulation
    } # fin de foreach
    # if ($compare =~/$patron/) { # si il y a une correspondance entre le patron et la suite des parties du discours
    while ($compare =~/$patron/g) {
    print "There is a match !\n\n"; # on écrit "There is a match ! "
    } # fin de if
  } # fin de while
  @token=(); #on remet la liste token à zéro
  @lemme=(); #on remet la liste lemme à zéro
  @pos=(); #on remet la liste pos à zéro
  } # fin de else
} # fin de while

Sortie obtenue :



Publicité
Pour être informé des derniers articles, inscrivez vous :
Commenter cet article