Langages rationnels et ingénierie linguistique Matthieu Constant Université Paris-Est Marne-la-Vallée, LIGM Introduction Langages Rationnels Langages rationnels et ingénierie linguistique Langages rationnels ◮ Expressions rationnelles ◮ Automates finis Application au Traitement Automatique des Langues (TAL) ◮ En général, pour les tâches présyntaxiques ◮ Exemples : tokenisation, analyse lexicale, chunks Applications Introduction Langages Rationnels Plan Introduction Quelques rappels sur les langages rationnels Langages rationnels Expressions rationnelles Automates finis Transducteurs finis Transducteurs finis Quelques applications à l’ingénierie linguistique Tokenisation Représentation de dictionnaires Reconnaissance d’expressions Indexation de documents d’une collection Applications Introduction Langages Rationnels Applications Langages Rationnels Eléments de base ◮ Un alphabet Σ de "lettres" ◮ Deux opérateurs : union (|) et concaténation (.) ◮ Un langage rationnel est un ensemble de mots générés à partir de l’alphabet et des opérateurs ◮ On peut définir les langages rationnelles récursivement sur le principe de leur stabilité par les opérateurs Exemple : ◮ Σ = {a,b,....,z} ◮ L = b.o.n.(ε|n.e).(ε|s) = {bon,bons,bonne,bonnes} avec ε le symbole vide Introduction Langages Rationnels Expressions rationnelles Définition informelle ◮ Motifs qui permettent de reconnaitre des séquences appartenant à un langage rationnel ◮ Peuvent se définir récursivement comme les langages rationnels Exemple : ◮ Σ = {a,b,....,z} ◮ Regexp = ajout(e|e(s|z|nt)|ons) Applications Introduction Langages Rationnels Applications Expressions rationnelles en Python ◮ [] : spécification de classe de caractères ◮ . : la classe de caractère prédéfinie des caractères graphiques visibles ou blancs ou de contrôle (sauf sut de ligne) ◮ * : quantificateur pour zéro, une ou plusieurs occurrences de ce qui précède ◮ ? : quantificateur pour au plus une occurrence de ce qui précède ◮ | : alternative : soit ce qui précède soit ce qui suit ◮ ( ) : délimiteurs de groupe (avec capture) Introduction Langages Rationnels Applications Expressions rationnelles en Python (suite) ◮ Déspécialisation des symboles spéciaux avec \ ◮ \w : un caractère lettre ou chiffre ◮ \W : un caractère ni lettre, ni chiffre, le complément de \w ◮ \t : tabulation horizontale ◮ \n : saut de ligne Introduction Langages Rationnels Applications Automates finis Définition informelle ◮ Un alphabet ◮ Un ensemble d’états ◮ Des transitions allant d’un état à un autre, étiquetées par une lettre de l’alphabet ◮ Des états "spéciaux" parmi les états : états initiaux et états finaux Reconnaissance ◮ Un automate reconnaît un ensemble de mots qui forme un langage rationnel ◮ Un mot est reconnu par un automate s’il existe un chemin de l’automate allant d’un état initial à un état final, étiqueté par les lettres du mot (dans l’ordre) Introduction Langages Rationnels Applications Exemple d’automate s z e 0 j 1 o 2 u 3 5 t n 7 o 4 n 6 s 8 Introduction Langages Rationnels Applications Automate déterministe minimal Automate déterministe ◮ Un seul état initial ◮ De chaque état, ne sort au plus qu’une seule transition étiquetée par un symbole donné de l’alphabet ◮ Pas de ε-transition Automate déterministe minimal C’est l’automate déterministe reconnaissant un langage rationnel L tel qu’il n’existe pas d’automates finis déterministes avec moins d’états reconnaissant le même langage. Introduction Langages Rationnels Reconnaissance d’une séquence par un automate ◮ Entrées : séquence de lettres (sequence) ; automate fini (dfa) ◮ Sortie : booléen d e f isRecognized ( sequence , d fa ) : s t a t e = d fa . g e t I n i t i a l S t a t e ( ) f o r symb i n sequence : s t a t e = d fa . g e t N e x t S t a t e ( s t a t e , symb ) i f s t a t e i s None : r e t u r n False if state . isFinal ( ) : r e t u r n True r e t u r n False Applications Introduction Langages Rationnels Automates vs. expressions rationnelles Equivalence A partir d’un automate fini, il est possible de construire une expression rationnelle reconnaissant le même langage rationnel (et inversement). En pratique Expression rationnelle -> automate Applications Introduction Langages Rationnels Applications Transducteurs finis ◮ Extension des automates ◮ Mais : deux alphabets (entrée/sortie), et étiquettes sur les transitions de type entrée/sortie. ◮ On reconnaît une séquence avec les entrées, on produit les sorties associées. ◮ Attention : pas toujours les mêmes propriétés que les automates (ex. déterminisme) Introduction Langages Rationnels Tokenisation Principe : ◮ Découper un texte en tokens. ◮ Produire la liste des tokens d’un texte. ◮ La définition d’un token dépend de l’application Utilisation d’expressions rationnelles ◮ Exemple : /\w+/ ◮ En Python, on utilise le module NLTK Applications Introduction Langages Rationnels Exemple de tokenisation en Python # t o k e n i s a t i o n du t e x t e / tmp / t e s t . t x t # encode en u t f −8 import n l t k import codecs f = codecs . open ( ’ / tmp / t e s t . t x t ’ , ’ r ’ , ’ u t f −8 ’ ) t e x t = f . read ( ) . lower ( ) f . close ( ) l = n l t k . r egex p_t ok eniz e ( t e x t , " \w+ " ) print l Applications Introduction Langages Rationnels Applications Exercice : représentation de dictionnaires ◮ Représenter un ensemble de mots du français (solution = automate) ◮ Permettre de donner à ces mots une catégorie grammaticale (solution = transducteur) Introduction Langages Rationnels Exercice : représentation d’expressions ◮ Représenter des expressions de date (solution = automate) ◮ Exemple : Jean a rendez-vous avec Luc le 17 avril 2010 Applications Introduction Langages Rationnels Applications Indexation Indexation simple ◮ But : trouver les documents contenant certains mots ◮ A chaque mot, on associe l’ensemble des documents où il apparaît. Indexation complexe ◮ But : trouver les documents contenant une séquence de mots ◮ A chaque mot, on associe l’ensemble des documents où il apparaît, ainsi que ses positions.