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