[Perl] Structure de données complexe

Fermé
knebhi Messages postés 61 Date d'inscription samedi 12 janvier 2008 Statut Membre Dernière intervention 17 juin 2009 - 11 juin 2008 à 21:41
knebhi Messages postés 61 Date d'inscription samedi 12 janvier 2008 Statut Membre Dernière intervention 17 juin 2009 - 8 févr. 2009 à 16:54
Bonjour,

Je tente de parser un fichier texte POUR pouvoir récupérer les informations m'interessant.
Mon fichier est le résultat d'un analyseur syntaxique. Il renvoit pour chaque phrase une analyse compléte, avec les éléments de la phrase et les liens syntaxiques.

Voici comment cela se présente :

001 PH 000
Lionel Jospin remâche son ressentiment et se venge. ///phrase
---
002 pp 001 0000-038 : Lionel Jospin remache son ressentiment ///element phrase
003 fs 002 0000-013 : Lionel Jospin
004 gn 003 0000-013 : Lionel Jospin
005 wd 004 0000-006*: P <Lionel>
006 wd 004 0007-006 : P <Jospin>
007 fv 002 0014-007 : remâche
008 fc 002 0022-016 : son ressentiment
009 gv 007 0014-007 : remache
010 wd 009 0014-007*: vc <remacher>
011 gn 008 0022-016 : son ressentiment
012 wd 011 0022-003 : o <son>
013 wd 011 0026-012*: n <ressentiment>
014 pp 001 0039-011 : et se venge
015 gc 014 0039-002 : et
016 wd 015 0039-002*: sc <et>
017 fv 014 0042-008 : se venge
018 gv 017 0042-008 : se venge
019 wd 018 0042-002 : qp <se>
020 wd 018 0045-005*: vc <venger>
021 wp 018 0050-001 : .
022 ls 010 0100>004 (0000) ///lien syntaxique
023 ls 020 0102>010 (0000)

Pour la ligne 22 par exemple j'ai un lien syntaxique :
022 ls 010 0100>004 (0000)
Je dois récupérer les deux elements mis en relation qui sont la ligne 010 ET la ligne 004 donc :
010 wd 009 0014-007*: vc <remacher>
004 gn 003 0000-013 : Lionel Jospin

Mon fichier comporte plusieurs phrase toute commencant par 001 PH 000

J'ai réalisé un bout de PERL qui permet de distinguer les différents types d'elements et de les stocker dans un tableau.
Cependant je ne sais pas comment réaliser ces liens tout en sachant que j'ai plusieurs phrase dans un meme fichier.

Voici mon code :

#!/usr/bin/perl -w
#####on parse le fichier et on recupere les donnees par type en les stockant
####dans des tableaux

open FICHIER,"< perltest.txt"
    or die "Le fichier n'existe pas ! : $!\n";


###boucle de lecture du fichier

while (my $ligne = <FICHIER>){
$ligne =~ s/\n//g;
#@arbresphrases = ();
@phrases = ();
@elementsphrases = ();
@lienssyntaxiques = ();


###impression du fichier brut
#print $ligne;
####detection des arbres ce qui se trouve entre deux 001 PH 000
if($ligne =~ /001 PH 000/)
{
#@tab = ();
#print $&."\n";
#my $arbre = $1;
#push (@arbresphrases,$arbre);
#print "phrase analysée ==>".$phrase."\n";

}

###detection des phrase analysees
if($ligne =~ /(^[A-ZÀ-Ýa-z"«][a-z].+)/)
{

my $phraseanalysee = $1;
push (@phrases,$phraseanalysee);
#print "phrase analysée ==>".$phraseanalysee."\n";

}
####detection autre type de phrase (avec espace devant ou encore avec apostrophe)
####a completer .....................!!!!!!



###detection des elementphrase
if($ligne =~ /((^[0-9]{3}) ([^l][a-z])(.+))/)
{

my $elementphrase = $1;
push (@elementsphrases,$elementphrase);
#print "elementphrase ==>".$elementphrase."\n";

}

###detection des liens syntaxiques
if($ligne =~ /(^[0-9]{3} (l[a-z]) ([0-9]{3}) ([0-9]{4})>([0-9]{3}))/)
{

my $liensyntaxique = $1;
push (@lienssyntaxiques,$liensyntaxique);
#print "liensyntaxique ==>".$liensyntaxique."\n";

}

###parcours des elements des 3tableaux
foreach $elt (@phrases, @elementsphrases, @lienssyntaxiques)
{
print $elt."\n";

}


}# fin de traitement de fichier
close FICHIER;



Merci de m'aider je bloque depuis un petit moment!!!

2 réponses

knebhi Messages postés 61 Date d'inscription samedi 12 janvier 2008 Statut Membre Dernière intervention 17 juin 2009 2
8 févr. 2009 à 16:54
J'ai réalisé cette structure en Java!!!

Dzolé je ne me suis pas connecté depuis un bail.
1
lami20j Messages postés 21331 Date d'inscription jeudi 4 novembre 2004 Statut Modérateur, Contributeur sécurité Dernière intervention 30 octobre 2019 3 567
11 juin 2008 à 21:54
Salut,

à vrai dire je n'ai pas compris ce que tu veux

ton fichier contient quoi exactement?
et que veux tu obtenir en sortie?
0