:: Enseignements :: Licence :: L3 :: 2007-2008 :: Introduction à l'informatique linguistique ::
![[LOGO]](http://igm.univ-mlv.fr/ens/resources/mlv.png) | n-grammes |
Dans ce TP, nous allons manipuler la notion de n-grammes.
Ressources
Pour cette séance, nous vous fournissons un certain nombre de ressources :
-
le module ngrams.py contenant la classe ngrams qui permet de représenter un ensemble de n-grammes et de les compter,
-
le module tagging.py qui permet de manipuler des textes étiquetés (classe taggedText),
-
l'archive suzanne.zip de textes étiquetés au format Treetagger qui provient du site ici.
Exercice 1 - n-grammes sur les lettres
Dans cet exercice, l'unité minimale de traitement est le caractère.
-
Écrire une fonction qui prend comme paramètre un nom de fichier texte.
Cette fonction doit stocker et compter les unigrammes de caractères de ce fichier.
Vous vous aiderez notamment de la classe ngrams.
-
Écrire une autre fonction qui stocke et compte les bigrammes de caractères de ce fichier.
-
Écrire encore une autre fonction qui stocke et compte les trigrammes de caractères de ce fichier.
-
Écrire une fonction qui prend comme paramètres une chaîne de caractères prefix et trois éléments de type ngrams représentant les unigrammes, bigrammes et trigrammes calculés dans les trois questions précédentes.
Le paramètre prefix correspond à une séquence de caractères déjà tapée par un utilisateur.
La fonction doit renvoyer le caractère suivant le plus probable étant donné prefix.
-
Adapter l'algorithme de génération aléatoire de textes (séquence de tokens), vu en cours, à la génération caractère par caractère.
Pour cela, vous utiliserez les trigrammes de caractères calculés dans les questions précédentes.
Le principe de l'algorithme est le suivant.
On couvre l'espace de probabilités [0,1] avec tous les trigrammes
(chacun occupe un espace proportionnel à sa probabilité).
On choisit un nombre aléatoirement entre 0 et 1 et on écrit le trigramme qui contient ce nombre.
Pour choisir le caractère suivant, on couvre [0,1] avec tous les trigrammes qui commencent par les deux derniers caractères de la séquence générée précédemment
et on en choisit une aléatoirement, etc.
Note : pour générer aléatoirement un nombre réel entre 0 et 1 en python, utiliser la fonction random du module random.
Exercice 2 - n-grammes sur les étiquettes grammaticales
Dans cet exercice, l'unité minimale de traitement est l'étiquette grammaticale d'un mot.
-
Stocker et compter les unigrammes, bigrammes et trigrammes d'étiquettes grammaticales à partir de quelques textes étiquetés de l'archive suzanne.zip.
Pour charger un texte étiqueté, le constructeur de la classe taggedText devra comporter un argument file qui sera le nom du fichier à charger.
L'argument with_treetagger devra être désactivé (with_treetagger=False, valeur par défaut).
-
Étant donné une séquence de deux étiquettes, prédire l'étiquette suivante la plus probable.
Exercice 3 - Étiquetage morphosyntaxique simple
-
Pour chaque mot de l'archive de textes étiquetés, calculer son étiquette la plus fréquente.
-
Écrire une fonction qui prend un texte en entrée et assigne à chacun de ses mots son étiquette la plus fréquente dans l'archive de textes étiquetés.
-
[BONUS] Évaluer automatiquement votre étiquetage à l'aide de la méthode eval de la classe taggedText.
© Université de Marne-la-Vallée