Bonsoir !
Problème :
Voilà j'ai un code à faire tourner, que j'ai pas mal de difficulté à comprendre, en particulier à cause d'une inconnue :
En fait j'aurai besoin de savoir à quoi cette chose sert.
Code : Sélectionner tout - Visualiser dans une fenêtre à part $`
Objectif du programme
En substance, le code prend un fichier de patron syntaxique (PREP, NCMS, ...) et un autre fichier texte traité par CORDIAL.
Dans le fichier de patron se trouve la suite que l'on cherche : PREP NCMS. Donc dès qu'il chope dans le fichier CORDIAL une suite syntaxique qui matche, il la conserve.
Aspect du contenu du fichier CORDIAL
Dans le fichier PATRON comme dans le fichier CORDIAL, les éléments sont séparés par une tabulation.
PCT vaut pour Ponctuation.de de PREP
cinéma cinéma NCMS
. . PCT
Le code
Voici le code, le symbole se trouve à la ligne 46
Votre aide serait la bienvenue !
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75 # open (OUT, ">OUT.txt"); open(TERMINO,"$ARGV[0]"); #print $ARGV[0]; while (my $terme=<TERMINO>) { # je lis chq terme de mon fichier PATRON #print $terme; chomp($terme); #on supprime le dernier élément de la string $terme=~s/ +/ /g; # on supprime les + $terme=~s/\r//g; # on supprime les retour chariot print "$terme\n"; # on affiche le patron # CORDIAL open(CORDIAL,"$ARGV[1]"); # on ouvre le fichier CORDIAL while (my $ligne=<CORDIAL>) { # on lit ligne à ligne chomp($ligne); # on supprime le dernier caractère $ligne=~s/\r//g; # on supprime le retour chariot if ($ligne!~/PCT/) { # si la liste n'est pas composé de PCT my @LISTE=split(/\t/,$ligne); #on met le contenu de la ligne de CORDIAL tout ce qui se trouve entre les tabulations dans la LISTE push(@POS,$LISTE[2]); # le PATRON se trouve à l'indice 2 de la liste push(@TOKEN,$LISTE[0]); #le token se trouve à l'indice 0 } # on a : @pos {PREP} et @token {de} else { #print "<@TOKEN>\n"; # print "<@POS>\n"; # print "TERME CHERCHE:$terme \n"; my $a=<STDIN>; my $pos=join("\t", @POS); #il sépare tous les éléments de la liste print "voilà la suite de patrons dans le fichier cordial pour une seule phrase : ".$pos."\n"; my $token=join("\t",@TOKEN); print "voilà les tokens dans le fichier cordial pour une seule phrase : ".$token."\n"; my $cmptdetrouvage=0; while($pos=~/$terme/g) { # tant que dans CORDIAL, il y a un PATRON, alors $cmptdetrouvage++; # on incrémente le compteur print "J'ai trouvé le PATRON \'".$terme."\' de patron.txt dans le fichier CORDIAL"."\n"; #print "TROUVE $cmptdetrouvage fois \n"; print "$terme est bien dans $pos \n"; my $avantcorespondant=$`; my $comptagedeblancdansterme=0; while($terme=~m/\t/g) # tant qu'il y a un espace dans le PATRON { $comptagedeblancdansterme++; # on incrémente print "Il y a : ".$comptagedeblancdansterme." blancs dans termes"."\n"; } my $comptagedeblanc=0; while($avantcorespondant=~m/\t/g) # tant qu'il y a un blanc dans la variable { $comptagedeblanc++; #on incrémente comptage de blanc print "Il y a : ".$comptagedeblanc." blancs dans ?"."\n"; } for(my $i=$comptagedeblanc; $i<=$comptagedeblanc + $comptagedeblancdansterme; $i++) { print OUT $TOKEN[$i]." "; } print OUT "\n"; } @POS=(); @TOKEN=(); } } close(CORDIAL); } close(TERMINO);
Partager