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 lexpression #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 dun nom
#(Noun), lequel est précédé dun groupe optionnel constitué :
# dun groupe adjectif (Adj) optionnel (zéro ou plusieurs fois) suivit dun nom (Noun)
# possiblement suivit dun <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 dun 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 $_;
} |
Partager