Je ne comprends pas d'ou provient mon erreur avec les valeurs de table dans les substitutions
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
 
#!/usr/bin/perl -w
 
use strict;
use warnings;
 
# preprocessing
 
# fonction PoSTag2Xml qui recevra en entrée une chaîne de caractères et modifiera son contenu (sur place).
sub PoSTag2Xml {
        #traitement des balises grammaticales 
 
        $_ =~ s/(\S*)\/(\S*)\b/<$2>$1<\/$2>/g;
 
        $_ =~ s/(\S*)\/``/<XOQT>$1<\/XOQT>/g;
        $_ =~ s/(\S*)\/,/<XCMM>$1<\/XCMM>/g;
        $_ =~ s/(\S*)\/:/<XCLN>$1<\/XCLN>/g;
        $_ =~ s/(\S*)\/\./<XPRD>$1<\/XPRD>/g;
        $_ =~ s/(\S*)\/''/<XCQT>$1<\/XCQT>/g;
        $_ =~ s/(\S*)\/"/<XDQT>$1<\/XDQT>/g;
        $_ =~ s/(\S*)\/\(/<XOPR>$1<\/XOPR>/g;
        $_ =~ s/(\S*)\/\)/<XCPR>$1<\/XCPR>/g;
 
       return $_;
}
my %tagsRE = (
        Noun => 'NN(||P|S|(PS)))|FW',
        Adj => 'JJ',
        Verb => 'VB(|D|G|N|P|Z)',
);
 
#créez ensuite une table associative wordsRE, ayant les mêmes clés que tagsRE, mais associant cette fois l’expression #régulière permettant de reconnaître la balise XML correspondante ainsi que son contenu.
my %wordsRE = (
        Noun => "<$tagsRE{Noun}>(\\S*)</$tagsRE{Noun}>",
        Adj => "<$tagsRE{Adj}>(\\S*)</$tagsRE{Adj}>",
        Verb => "<$tagsRE{Verb}>(\\S*)</$tagsRE{Verb}>",
);
 
my %groupRE = (
#les NounEntity, qui sont définies comme : – un groupe adjectif (Adj) optionnel (zéro ou plusieurs fois) suivi d’un nom
#(Noun), – lequel est précédé d’un groupe optionnel constitué :
#– d’un groupe adjectif (Adj) optionnel (zéro ou plusieurs fois) suivit d’un nom (Noun)
#– possiblement suivit d’un <IN>of</IN> (zéro ou une fois).
        NounEntity => "($wordsRE{Adj}\\s)*$wordsRE{Noun}(($wordsRE{Adj}\\s)*$wordsRE{Noun}\\s)*(<IN>of<\/IN>\\s)?",
        #les VerbEntity sont définies comme un groupe adjectif (Adj) optionnel, zéro ou plusieurs fois, suivi d’un verbe
        VerbEntity =>"($wordsRE{Adj}\\s)*$wordsRE{Verb}",
);
# documents identifiés par des balises <DOCN> et 
# </DOCN> sur une ligne séparée ("m" pour le début de ligne)
 
open(WRITEFILE,">>file.txt");
my %occurences;
while(<>){
       if($_ =~ /^<DOC\d>/m) {
        # ignore this line
       }
       elsif( $_ =~ /<\/DOC\d>/m) {
       # ignore this line
       }else{
        my $newline = &PoSTag2Xml($_);
        &processEntities($newline,\%occurences);
        print WRITEFILE $newline ;
       }
}
close(WRITEFILE);
 
#Écrivez ensuite la fonction processEntities qui recevra en entrée une chaîne de caractères et (en deux, voire une seule, #ligne(s) de Perl) modifiera son contenu (sur place) de sorte à étiqueter (format XML) toutes les expressions de groupeRE #contenue dans cette chaîne de caractères.
 
sub processEntities {
        ($line, $ref)=@_;
        $line =~ s/($groupRE{NounEntity})/<NounEntity>$1<\/NounEntity>/eg;
        $line =~ s/($groupRE{VerbEntity})/<VerbEntity>$1<\/VerbEntity>/eg;
        return $_;
}