La présentation est en train de télécharger. S'il vous plaît, attendez

La présentation est en train de télécharger. S'il vous plaît, attendez

Introduction à l'informatique linguistique

Présentations similaires


Présentation au sujet: "Introduction à l'informatique linguistique"— Transcription de la présentation:

1 Introduction à l'informatique linguistique
Mathieu Constant, Eric Laporte Licence d'informatique 3 Université de Marne-la-Vallée IGM

2 Cours 1 Introduction Tokenisation
Expressions rationnelles et automates finis Introduction au langage Python

3 Introduction Objectifs de l'informatique linguistique
Applications informatiques sur les langues naturelles Génération de textes en langues naturelles (écrits, oraux) Dialogue homme-machine (écrit, oral) Traduction (écrit, oral) Recherche d'information, moteurs de recherche Extraction d'information Vérification et correction orthographique etc.

4 Introduction Niveaux de complexité 1. Tokens
$ wc idees.txt extrait.txt idees.txt extrait.txt total Lignes, mots, caractères Connaissances : qu'est-ce qu'un mot ? Découper un texte en éléments simples

5 Introduction Niveaux de complexité 1. Tokens 2. Morpho-syntaxique
Un robot parlant français doit pouvoir produire Je vais fermer l'autre porte et non * Je vais fermer la autre porte et doit savoir conjuguer Je vais, Il va, Nous allons... Variations de forme et propriétés des mots

6 Introduction Niveaux de complexité 1. Tokens 2. Morpho-syntaxique
3. Syntaxico-sémantique Le robot doit pouvoir distinguer les ordres et les questions Ferme toutes les autres portes Toutes les portes sont-elles fermées ? Il doit savoir que * autre fermer je l'porte vais n'a pas de sens, bien qu'elle contienne les mêmes mots Structure et sens des phrases

7 Introduction Niveaux de complexité 1. Tokens 2. Morpho-syntaxique
3. Syntaxico-sémantique 4. Pragmatique Le robot doit pouvoir répondre Non, je ne peux pas au lieu de Non, je ne fermerai pas les autres portes Non, je ne le ferai pas Comment s'exprimer pour atteindre un objectif

8 Tokenisation Tokens : éléments simples d'un texte écrit
Passer d'une séquence de caractères à une séquence de tokens Je vais fermer l'autre porte /Je/vais/fermer/l/'/autre/porte/ Définition des tokens Les mots délimités par des espaces /l'autre/ /l/'/autre/ /autre,/ /autre/,/ Expressions rationnelles \w+ une séquence d'1 ou plusieurs caractères alphanumériques \d+ une séquence d'1 ou plusieurs chiffres [^\w\s] un symbole de ponctuation

9 Algorithme de tokenisation
Entrées : le texte, séquence de caractères ; une ou plusieurs expressions rationnelles définissant les tokens Sorties : une séquence de tokens tant que le texte n'est pas fini { pour chaque expression rationnelle { appliquer l'expression au texte en allant le plus loin possible marquer dans le texte la position obtenue } si aucune marque alors passer au caractère suivant sinon { conserver seulement la marque la plus à droite copier sur la sortie depuis le caractère courant jusqu'à la marque prendre comme caractère courant le caractère marqué } }

10 Tokenisation Je vais fermer l'autre porte | | ^ Je | ^ vais ...
Variante Les expressions définissent les délimiteurs et non les tokens

11 Expressions rationnelles
Définition mathématique - les symboles de l'alphabet et le mot vide a - les expressions obtenues avec les opérateurs : - concaténation ab - union a|b - itération a* Priorités entre opérateurs le plus prioritaire : itération ; le moins prioritaire : union Exemples 0|1|2|3|4|5|6|7|8|9 (0|1|2|3|4|5|6|7|8|9)(0|1|2|3|4|5|6|7|8|9)*

12 Expressions rationnelles
Notations en grep, sed, vi, emacs, flex, perl, python... Détails des conventions différents pour chaque programme [ ] 0|1|2|3|4|5|6|7|8|9 [0-9] 0|1|2|3|4|5|6|7|8|9 [^a-zA-Z] 1 caractère autre que [a-zA-Z] CLEF? CLE|CLEF [0-9]+ [0-9][0-9]* caractère autre que fin de ligne (\n) ^Le "Le" si placé en début de ligne dernier$ "dernier" si placé en fin de ligne \|\(\)\*\[\?\+\.\^\$\\ |()*[?+.^$\

13 Expressions rationnelles
Notation en python \s 1 espace, fin de ligne ou tabulation \w 1 caractère alphanumérique \d 1 chiffre

14 Automates finis Graphes équivalents aux expressions rationnelles Expression rationnelle brrr*! Automate fini équivalent (reconnaît exactement les mêmes séquences) Etats : Transitions : 0b1 1r2 2r3 3r3 3!4 Etats initiaux : 0 Etats finaux : 4 r b ! r r 4 1 2 3

15 Automates finis r b ! r r 4 1 2 3 r b ! r r 4 1 2 3
Automate déterministe 1 état initial au plus si 2 transitions sortent du même état et sont étiquetées par le même symbole de l'alphabet, alors elles sont égales Un automate non déterministe r b ! r r 4 1 2 3 r b ! r r 4 1 2 3

16 Reconnaissance par automate fini déterministe
Entrées : une séquence de symboles, un automate déterministe Sorties : oui/non curseur = le premier symbole de la séquence état = l'unique état initial de l'automate tant que vrai { si curseur à la fin de la séquence alors si état est final alors renvoyer oui sinon renvoyer non sinon si transition[état, curseur] vide alors renvoyer non sinon { état = transition[état, curseur] curseur = le symbole suivant } }

17 Automates finis non déterministes
Peuvent contenir des transitions étiquetées par le mot vide (interdit dans un automate déterministe) L'algorithme de reconnaissance est plus compliqué b ! r r 4 1 2 3

18 Automates et expressions rationnelles
Pour toute expression rationnelle il existe un automate fini équivalent et inversement Il existe des algorithmes pour construire un automate fini équivalent à un expression donnée et inversement Expressions simples : plus faciles à manipuler que les automates Expressions compliquées : il y a souvent un automate équivalent plus facile à lire Exemple : (1(0|1)*|0)\.((0|1)*1)?|\.((0|1)*1|0) 1 1 . 1 3 5 . 1 4 1 2 7 . 6

19 Automates et expressions rationnelles
Trouver un automate fini équivalent à une expression donnée Union chemins en parallèle a|c Concaténation chemins en série (a|c)d a 1 c a d 2 1 c

20 Automates et expressions rationnelles
Itération cycle (a(ab)*|c)d (a|c)(ab)*d ab a 1 d 3 2 c a ab d 2 1 c

21 Introduction à Python En TP nous utiliserons NLTK, un système écrit en langage Python Python est un langage à objets interprété Utilisation interactive : ipython Utilisation par scripts : python2.4 <fichier_de_script.py> Commentaires # Mon premier script en python

22 Chaînes de caractères message = "Tokenisation..."
print message Tokenisation... print len(message) 15 print message + message Tokenisation...Tokenisation... repeter = 2 print message * repeter Tokenisation...Tokenisation... message = message * repeter print message Tokenisation...Tokenisation... print message[0] T print message[0:5] Token print message[5:] isation...Tokenisation... print message[0], message[1] T o

23 Inspection d'une expression
En mode interactif, quand on écrit une expression, Python répond en donnant la valeur >>> message 'Tokenisation...' >>>

24 Listes >>> compte = ["zero", "un", "deux"]
>>> suite = compte[-1:] + ['trois'] >>> suite ['deux', 'trois'] >>> compte[2] = "2" >>> compte ['zero', 'un', '2'] >>> compte.reverse() >>> compte ['2', 'un', 'zero'] >>> len(compte) 3

25 Méthodes >>> compte.reverse()
>>> compte ['2', 'un', 'zero'] Le nom d'un objet, un point, le nom d'une méthode, les paramètres >>> mots = ["antre", "outre", "autre"] >>> mots.sort() >>> mots ['antre', 'autre', 'outre'] >>> mots.append("pot") >>> mots ['antre, 'autre', 'outre', 'pot']

26 Méthodes >>> a_rebours = " ".join(compte)
>>> a_rebours '2 un zero' >>> phrase = "Je vois l'autre." >>> phrase.split(" ") ['Je', 'vois', "l'autre."]

27 Paramètres en ligne de commande
import sys sys est le module Python qui gère la ligne de commande et autres questions liées au système argv : liste des paramètres passés en ligne de commande argv[0] est le nom du script len(argv) est le nombre de paramètres

28 Itération total = 0 for mot in mots: print mot total += len(mot)
print total La fin du bloc for est indiquée par l'indentation L'indentation est obligatoire autre outre pot 18

29 Expressions rationnelles
>>> import re >>> from nltk_lite.utilities import re_show >>> phrase = "Je vois l'autre." >>> re_show("e", phrase) J{e} vois l'autre. >>> "re" est le module de Python sur les expressions rationnelles

30 Le tokeniseur de NLTK >>> from nltk_lite import tokenize
>>> phrase = "Je vois l'autre." >>> list(tokenize.regexp(phrase, "[^\s]+") ['Je', 'vois', "l'autre."] >>> Pour ne pas mélanger les types de caractères dans un token : >>> list(tokenize.regexp(phrase, "[\w]+|[^\s]") ['Je', 'vois', 'l', "'", 'autre', '.']

31 Fichiers f = open('phrase.txt', 'rU') # ouvre le fichier en lecture
text = f.read() # lit tout le fichier dans une chaîne de caractères f.close() # referme le fichier


Télécharger ppt "Introduction à l'informatique linguistique"

Présentations similaires


Annonces Google