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

Introduction à l'informatique linguistique

  • Upload
    addison

  • View
    66

  • Download
    2

Embed Size (px)

DESCRIPTION

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. - PowerPoint PPT Presentation

Citation preview

Page 1: Introduction à l'informatique linguistique

Introduction à l'informatique linguistique

Mathieu Constant, Eric Laporte

Licence d'informatique 3

Université de Marne-la-Vallée

IGM

Page 2: Introduction à l'informatique linguistique

Cours 1

Introduction

Tokenisation

Expressions rationnelles et automates finis

Introduction au langage Python

Page 3: Introduction à l'informatique linguistique

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.

Page 4: Introduction à l'informatique linguistique

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

Page 5: Introduction à l'informatique linguistique

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

Page 6: Introduction à l'informatique linguistique

IntroductionNiveaux 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

Page 7: Introduction à l'informatique linguistique

IntroductionNiveaux 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

Page 8: Introduction à l'informatique linguistique

TokenisationTokens : é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

Page 9: Introduction à l'informatique linguistique

Algorithme de tokenisationEntré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é } }

Page 10: Introduction à l'informatique linguistique

TokenisationJe vais fermer l'autre porte

|

| ^ Je

|

|

| ^ vais

|

|

...

Variante

Les expressions définissent les délimiteurs et non les tokens

Page 11: Introduction à l'informatique linguistique

Expressions rationnellesDé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)*

Page 12: Introduction à l'informatique linguistique

Expressions rationnellesNotations 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

\|\(\)\*\[\?\+\.\^\$\\ |()*[?+.^$\

Page 13: Introduction à l'informatique linguistique

Expressions rationnellesNotation en python

\s 1 espace, fin de ligne ou tabulation

\w 1 caractère alphanumérique

\d 1 chiffre

Page 14: Introduction à l'informatique linguistique

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 4Transitions : 0b1 1r2 2r3 3r3 3!4Etats initiaux : 0Etats finaux : 4

0 1 2 3 4b r r !

r

Page 15: Introduction à l'informatique linguistique

Automates finis

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

0 1 2 3 4b r r !

r

0 1 2 3 4b r r !

r

Page 16: Introduction à l'informatique linguistique

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

Page 17: Introduction à l'informatique linguistique

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é

0 1 2 3 4b r r !

Page 18: Introduction à l'informatique linguistique

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 automatesExpressions compliquées : il y a souvent un automate équivalent

plus facile à lireExemple : (1(0|1)*|0)\.((0|1)*1)?|\.((0|1)*1|0)

0

1 34 5

0 . 1

26 7

1.

.

0

0 1

0 1

Page 19: Introduction à l'informatique linguistique

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 1 2d

0 1a

c

0

a

c

Page 20: Introduction à l'informatique linguistique

Automates et expressions rationnelles

Itération cycle

(a(ab)*|c)d

(a|c)(ab)*d

0

12 3

a d

c

ab

1 2d

ab

0

a

c

Page 21: Introduction à l'informatique linguistique

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

Page 22: Introduction à l'informatique linguistique

Chaînes de caractèresmessage = "Tokenisation..."print message Tokenisation...

print len(message) 15

print message + message Tokenisation...Tokenisation...

repeter = 2print message * repeter

Tokenisation...Tokenisation...

message = message * repeterprint message

Tokenisation...Tokenisation...

print message[0] T

print message[0:5] Token

print message[5:] isation...Tokenisation...

print message[0], message[1] T o

Page 23: Introduction à l'informatique linguistique

Inspection d'une expression

En mode interactif, quand on écrit une expression, Python répond en donnant la valeur

>>> message'Tokenisation...'

>>>

Page 24: Introduction à l'informatique linguistique

Listes

>>> compte = ["zero", "un", "deux"]

>>> compte[0] 'zero'

>>> compte[0:2] ['zero', 'un']

>>> suite = compte[-1:] + ['trois']

>>> suite ['deux', 'trois']

>>> compte[2] = "2"

>>> compte ['zero', 'un', '2']

>>> compte.reverse()

>>> compte ['2', 'un', 'zero']

>>> len(compte) 3

Page 25: Introduction à l'informatique linguistique

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

Page 26: Introduction à l'informatique linguistique

Méthodes

>>> a_rebours = " ".join(compte)

>>> a_rebours '2 un zero'

>>> phrase = "Je vois l'autre."

>>> phrase.split(" ") ['Je', 'vois', "l'autre."]

Page 27: Introduction à l'informatique linguistique

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

Page 28: Introduction à l'informatique linguistique

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

autreoutrepot18

Page 29: Introduction à l'informatique linguistique

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

Page 30: Introduction à l'informatique linguistique

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

>>>

Page 31: Introduction à l'informatique linguistique

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