L2 - Initiation à l`informatique pour la linguistique

Transcription

L2 - Initiation à l`informatique pour la linguistique
L2 - Initiation à l’informatique pour
la linguistique
Expression régulière
D. Béchet
[email protected]
Université de Nantes
Faculté des Sciences et Techniques
2, rue de la Houssinière BP 92208
44322 Nantes cedex 3, France
http://www.sciences.univ-nantes.fr/info/perso/permanents/bechet
L2 - Initiation au TALN – p. 1/24
Langage formel 6= langage naturel
Grammaire : Description d’un langage formel pour
produire et reconnaître des phrases appartenant à un
langage donné
Expression régulière (dite aussi expression rationnelle
et en anglais “regular expression” ou “regex”) :
Description d’une certaine catégorie de langages
formels pour la recherche d’information dans des
fichiers, sur Internet, dans certains éditeurs de textes...
L2 - Initiation au TALN – p. 2/24
Recherche de motif
Recherche d’un motif dans la variable $line
$line contient chaine
En perl : $line =~ m/chaine/
Exemple : recherche de la chaîne mai
SI $line contient mai ALORS ...
En perl : if ($line =~ m/mai/) { ...
Exemple : recherche avec variations : mai ou Mai
SI $line contient [mM]ai ALORS ...
En perl : if ($line =~ m/[mM]ai/) { ...
L2 - Initiation au TALN – p. 3/24
Exemple d’algorithme
LEXIQUE
Entrée : descripteur du fichier "f.txt"
$lig
: une ligne de ce fichier
DEBUT
OUVRIR Entrée en lecture sur le fichier f.txt
TANT qu’on peut lire $lig depuis Entrée FAIRE
ECRIRE $lig
SI $lig contient "mai" ALORS
ECRIRE "Voici le mois de mai !"
FIN SI
FIN TANT QUE
FERMER Entrée
FIN
L2 - Initiation au TALN – p. 4/24
Exemple de programme Perl
# essai.perl
# Ouverture du fichier fic.txt
open (ENTREE, "fic.txt");
while ($line=<ENTREE>) {
# Ces lignes sont exécutées pour
# toutes les lignes du fichier
print STDOUT "$line";
if ($line =~ m/mai/) {
# Exécutée pour une ligne contenant mai
print STDOUT "Voila le mois de mai !\n"
}
}
close ENTREE;
L2 - Initiation au TALN – p. 5/24
Exemple de programme Perl
Avec le fichier fic.txt suivant :
Un essai sans le mot
Un essai avec le mot mai
Et oui
Le programme affiche :
Un essai sans le mot
Un essai avec le mot mai
Voila le mois de mai !
Et oui
L2 - Initiation au TALN – p. 6/24
Nouveautés
Utilisation d’un fichier (en lecture)
Ouverture :
OUVRIR ID en lecture sur le fichier "NOM "
En perl : open (ID, "NOM ");
Lecture des lignes :
TANT qu’on peut lire $VAR depuis ID FAIRE ...
En perl : while ($VAR=<ID>) {...}
Test de la présence d’un motif dans une variable
SI $VAR contient "MOTIF" ALORS ...
En perl : if ($VAR =˜ m/MOTIF/) {...}
L2 - Initiation au TALN – p. 7/24
Métacaractères
ˆ : début de ligne
$ : fin de ligne
| : alternative
. : n’importe quel caractère
[...] : n’importe quel caractère dans la liste
[ˆ...] : n’importe quel caractère pas dans la liste
- : entre crochets : intervalle de caractères
\b : début ou fin de mot
\s : espace ou tabulation
\n : passage à la ligne
L2 - Initiation au TALN – p. 8/24
Répétitions de motifs
+ : 1 ou plusieurs fois le motif qui précède
* : 0, 1 ou plusieurs fois le motif qui précède
? : 0 ou 1 fois le motif qui précède
{n,m} : entre n et m fois le motif qui précède
Délimitation d’un sous motif : (...)
L2 - Initiation au TALN – p. 9/24
Exemples
mai : la ligne contient mai (mai, mais, maison)
^mai : la ligne débute par mai
^mai\n$ : la ligne ne contient que mai (et un passage
à la ligne)
[A-Z] : la ligne contient au moins une lettre (non
accentuée) en majuscule
[^A-Z] : la ligne contient au moins un caractère qui
n’est pas une lettre (non accentuée) en majuscule
\bmai\b : contient le mot "mai" ("mais" n’est pas bon)
mai|juin : contient "mai" ou "juin"
L2 - Initiation au TALN – p. 10/24
Exemples
\bmai(son)?\b : contient le mot "mai" ou "maison"
\bmai\s+2004 : contient le mot "mai" puis 2004
séparés par 1 ou plusieurs espaces
20*4 : contient un 2 suivi de 0, 1 ou plusieurs zéros
suivi de 4 (24, 204, 2004, 20004, etc)
(20)*4 : contient 20 répété 0, 1 ou plusieurs fois suivi
de 4 (4, 204, 20204, 2020204, etc)
L2 - Initiation au TALN – p. 11/24
Substitution d’un motif
Substitution de la première chaîne correspondant à
MOTIF par la chaîne CHAINE :
REMPLACER le premier "MOTIF" de $VAR par "CHAINE"
En perl : $VAR=~s/MOTIF/CHAINE/;
Substitution de toutes les chaînes correspondant à
MOTIF par la chaîne CHAINE :
REMPLACER tous les "MOTIF" de $VAR par "CHAINE"
En perl : $VAR=~s/MOTIF/CHAINE/g;
L2 - Initiation au TALN – p. 12/24
Exemple d’algorithme
Substitution dans le fichier f.txt de la première
occurrence de mai dans une ligne par MAI :
LEXIQUE
Entrée : descripteur du fichier "f.txt"
$l
: une ligne de ce fichier
DEBUT
OUVRIR Entrée en lecture sur le fichier f.txt
TANT qu’on peut lire $l depuis Entrée FAIRE
REMPLACER le premier "mai" de $l par "MAI"
ECRIRE $l
FIN TANT QUE
FERMER Entrée
FIN
L2 - Initiation au TALN – p. 13/24
Exemple de programme
Substitution dans le fichier f.txt de la première
occurrence de mai dans une ligne par MAI :
open (ENTREE, "f.txt");
while ($line=<ENTREE>) {
$line=~s/mai/MAI/;
print STDOUT "$line";
}
close ENTREE
L2 - Initiation au TALN – p. 14/24
Exemple d’exécution
Avec le fichier f.txt suivant :
Un essai sans le mot
Un essai avec le mot mai
Un essai avec les mots mais et mai
Le programme affiche :
Un essai sans le mot
Un essai avec le mot MAI
Un essai avec les mots MAIs et mai
L2 - Initiation au TALN – p. 15/24
Exemple d’algorithme (bis)
Substitution dans le fichier f.txt de toutes les
occurrences de mai par MAI :
LEXIQUE
Entrée : descripteur du fichier "f.txt"
$l
: une ligne de ce fichier
DEBUT
OUVRIR Entrée en lecture sur le fichier f.txt
TANT qu’on peut lire $l depuis Entrée FAIRE
REMPLACER tous les "mai" de $l par "MAI"
ECRIRE $l
FIN TANT QUE
FERMER Entrée
FIN
L2 - Initiation au TALN – p. 16/24
Exemple de programme (bis)
Substitution dans le fichier f.txt de toutes les
occurrences de mai par MAI :
open (ENTREE, "f.txt");
while ($line=<ENTREE>) {
$line=~s/mai/MAI/g;
print STDOUT "$line";
}
close ENTREE
L2 - Initiation au TALN – p. 17/24
Exemple d’exécution (bis)
Avec le fichier f.txt suivant :
Un essai sans le mot
Un essai avec le mot mai
Un essai avec les mots mais et mai
Le programme affiche :
Un essai sans le mot
Un essai avec le mot MAI
Un essai avec les mots MAIs et MAI
L2 - Initiation au TALN – p. 18/24
Ecriture dans un fichier
Utilisation d’un fichier (en écriture)
Ouverture :
OUVRIR ID en écriture sur le fichier "NOM "
En perl : open (ID, ">NOM ");
Ecriture des lignes :
ECRIRE dans ID : expr1, expr2, ...
En perl : print ID (expr1, expr2, ...);
L2 - Initiation au TALN – p. 19/24
Exemple d’algorithme (ter)
Substitution dans le fichier f1.txt de toutes les
occurrences de mai par MAI. Le résultat est placé dans le
fichier f2.txt :
LEXIQUE
Entrée : descripteur du fichier "f1.txt"
$l
: une ligne de ce fichier
Sortie : descripteur du fichier "f2.txt"
DEBUT
OUVRIR Entrée en lecture sur le fichier f1.txt
OUVRIR Sortie en écriture sur le fichier f2.txt
TANT qu’on peut lire $l depuis Entrée FAIRE
REMPLACER le premier "mai" de $l par "MAI"
ECRIRE dans Sortie : $l
FIN TANT QUE
FERMER Entrée
FERMER Sortie
FIN
L2 - Initiation au TALN – p. 20/24
Exemple de programme (ter)
Substitution dans le fichier f1.txt de toutes les
occurrences de mai par MAI. Le résultat est placé dans le
fichier f2.txt :
open (ENTREE, "f1.txt");
open (SORTIE, ">f2.txt");
while ($line=<ENTREE>) {
$line=~s/mai/MAI/g;
print SORTIE "$line";
}
close SORTIE
close ENTREE
L2 - Initiation au TALN – p. 21/24
Exemple d’exécution (ter)
Avec le fichier f1.txt suivant :
Un essai sans le mot
Un essai avec le mot mai
Un essai avec les mots mais et mai
Cela crée le fichier f2.txt suivant :
Un essai sans le mot
Un essai avec le mot MAI
Un essai avec les mots MAIs et MAI
L2 - Initiation au TALN – p. 22/24
Affectation implicite des variables
Lors d’un test de présence d’un motif ou bien d’un
remplacement les variables $1, $2, $3, etc sont
affectées par le premier, deuxième, troisième, etc
sous-motif (délimité par (...)
Exemple :
$input="Une ligne avec 2 nombres : 12 45";
if ($input=~m/([0-9]+) ([0-9]+)/) {
# $1 vaut 12 et $2 vaut 45
print STDOUT "$1 et $2 \n"
}
Résultat de l’exécution :
12 et 45
L2 - Initiation au TALN – p. 23/24
Affectation implicite des variables
Exemple : modification de l’espace par un "-"
$input="Une ligne avec 2 nombres : 12 45";
$input=~s/([0-9]+) ([0-9]+)/$1-$2/g;
print STDOUT "$input\n";
Résultat de l’exécution :
Une ligne avec 2 nombres : 12-45
L2 - Initiation au TALN – p. 24/24