Introduction à l'informatique linguistique

Slides:



Advertisements
Présentations similaires
Les présentateurs doivent souvent transmettre des informations techniques à des auditeurs qui connaissent moins bien le sujet et le vocabulaire spécifique.
Advertisements

La boucle for : init7.c et init71.c
L-System et modélisation de plantes…
Le langage Z Pr ZEGOUR DJAMEL EDDINE
Algorithmes et structures de données avancés
Introduction à l’Algorithmique
Algorithmique Résume.
C.
Objectifs Présentation et utilisation du langage PERL
Les outils du TAL Par RIGAUD Anaïs RALLIER Armelle SANTIAGO Gwendoline
Apprentissage initial de la lecture
Chap 1 Grammaires et dérivations.
Nicolas Bourbaki.
Expressions rationnelles
ESIEE Paris © Denis BUREAU I N Initiation à la programmation avec le langage Java.
FLSI602 Génie Informatique et Réseaux
Les sous-programmes Chapitre n° 5: Objectifs : Activité:
Lycée Louis Vincent SEANCE 6 Python Les listes Lundi 25 novembre 2013.
Les bases de l’Algorithmique
IFT313 Introduction aux langages formels
Points importants de la semaine Les commentaires. Les variables. Les instructions conditionnelles. Les instructions itératives (les boucles).
Cours 7 - Les pointeurs, l'allocation dynamique, les listes chaînées
Introduction : Compilation et Traduction
Partie 1 Etude de l'existant
Démarche de résolution de problèmes
Algorithmique et structure de données
Analyse lexicale Généralités Expressions rationnelles Automates finis
Programmation logique Logique des prédicats du premier ordre
Programmation fonctionnelle Le langage LISP
Rappel... Solution itérative de systèmes linéaires (suite et fin).
Python La programmation objet
Les structure d’un programme :
FICHIERS : Définition : Algorithme général:
CHAINE DE CARACTERES : Définition :
SEANCE 10 Python Entrée et sortie de fichiers Lycée Louis Vincent Lundi 20 janvier
Introduction à l’algorithmique
Expressions régulières et hash tables
Semaine #1 INF135 par Frédérick Henri.
1 CSI3525: Concepts des Languages de Programmation Notes # 3: Description Syntaxique des Languages.
Eric Laporte Institut Gaspard-Monge Université de Marne-la-Vallée France Introduction à Perl.
Outils pour le traitement des textes Outils Unix Éric Laporte Université Paris-Est Marne-la- Vallée.
Etiquettes lexicales, grammaires
Outils pour le traitement des textes Commandes Unix pour traiter les ressources linguistiques Éric Laporte Université Paris-Est Marne-la- Vallée.
Outils pour le traitement des textes Commandes Unix pour traiter les ressources linguistiques Éric Laporte Université Paris-Est Marne-la- Vallée.
Chapitre 3 Syntaxe et sémantique.
Programmation non procédurale Le projet ECOLE 2000
PHP 2° PARTIE : FONCTIONS ET FORMULAIRE
Python Fonction et procédure
Animateur : Med HAIJOUBI
TP n°3 Javascript Contrôle de formulaire
Expressions régulières et hash tables
PHP & My SQL.
Paradigmes des Langages de Programmation
Scripts shell intro Un script bash est un fichier contenant une suite de commandes shell, exécutables par l'interpréteur (ici le programme /bin/bash),
Algorithmes et Programmation
Projet Python. ETAPE 1 Installation des packages python. Raccourcie crée automatiquement.
Un survol du language C.
CSI3525: Concepts des Langages de Programmation Notes # 13: Introduction au SmallTalk.
 Syntaxe du langage PHP
420-B63 Programmation Web Avancée Auteur : Frédéric Thériault 1.
D.E ZEGOUR Ecole Supérieure d’Informatique. Problèmes de décision Concepts de base Expressions régulières Notation particulière pour exprimer certaines.
Le langage Racket (Lisp)
Introduction et Généralités sur l’Algorithmique
Fichier=open('monfichier.txt','w') >>> fichier.write('bonjour\n') 8 >>> liste ['le chien', 'le chat', 'le loup'] >>> for s in liste: fichier.write(s+'\n')
Module algorithmique et programmation
Scripts et fonctions Instructions de contrôle
Objets et Actions Élémentaires.
BASE DE L’ALGORITHMIE.  Un système d’instructions.  Pour résoudre d’un problème ou d’une classe de problèmes  Recette de cuisine pour faire un gâteau.
1 Initiation aux bases de données et à la programmation événementielle VBA sous ACCESS Cours N° 4 Support de cours rédigé par Bernard COFFIN Université.
Transcription de la présentation:

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

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

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.

Introduction Niveaux de complexité 1. Tokens $ wc idees.txt extrait.txt 40 149 947 idees.txt 2294 16638 97724 extrait.txt 2334 16787 98671 total Lignes, mots, caractères Connaissances : qu'est-ce qu'un mot ? Découper un texte en éléments simples

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

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

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

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

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é } }

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

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)*

Expressions rationnelles Notations en grep, sed, vi, emacs, flex, perl, python... Détails des conventions différents pour chaque programme [0123456789] 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]* . 1 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 \|\(\)\*\[\?\+\.\^\$\\ |()*[?+.^$\

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

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

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

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 } }

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 

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

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

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

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

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

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

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

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']

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

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

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

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

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', '.']

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