Langages rationnels et ingénierie linguistique

publicité
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.
Téléchargement