:: Enseignements :: Licence :: L3 :: 2007-2008 :: Introduction à l'informatique linguistique ::
[LOGO]

Réseaux sémantiques, levée d'ambiguïté et clusters de mots


Dans ce TP, nous allons manipuler Wordnet un réseau sémantique à l'aide de NLTK pour faire de la levée d'ambiguïté. Puis, nous implémenterons un outil pour extraire les différents sens d'un mot.

Exercice 1 - Prise en main de Wordnet avec NLTK

Lire la documentation liée à Wordnet dans NLTK. Essayer les exemples de la documentation.

Exercice 2 - Manipulation de Wordnet

  1. Ecrire un script python pour obtenir l'ensemble des synsets du nom resistance.
  2. Ecrire une fonction qui prend un synset en paramètre et qui renvoie la liste des mots contenus dans le synset.
  3. Ecrire une fonction qui prend un synset en paramètre et qui renvoie la liste de ses hyperonymes (les mots contenus dans les synsets hyperonymes).
  4. Ecrire une fonction qui prend un synset en paramètre et renvoie la liste des hyponymes de ses hyperonymes.
  5. Ecrire une fonction qui prend un synset en paramètre et renvoie la liste des hyponymes des hyponymes de ses hyperonymes.
  6. Ecrire une fonction voisins qui prend un synset en paramètre et renvoie l'union de l'ensemble de ses hyperonymes, de l'ensemble des hyponymes de ses hyperonymes et l'ensemble des hyponymes des hyponymes de ses hyponymes.

Exercice 3 - Levée d'ambiguïté sémantique avec Wordnet

Le nom resistance a 10 sens dans Wordnet. Le but de l'exercice est d'assigner automatiquement le bon sens de resistance à toutes les occurrences dans le texte wsd-data1.txt. Chaque ligne du texte contient un paragraphe comprenant au moins une occurrence de resistance. Chacune de ces lignes est suivie d'un séparateur de paragraphes sur une autre ligne.

Pour chacune des occurrences de resistance, il s'agira d'extraire la liste des noms voisins dans le texte et d'évaluer le recouvrement avec la liste des mots "voisins" dans Wordnet pour chacun des sens (synsets) possibles. Le sens sélectionné sera celui qui a le meilleur recouvrement. Pour cela, vous vous aiderez de la classe wsdData dans wsd.py (cf. exemple d'utilisation td10.py). La classe wsdData permet pour chacun des paragraphes d'un texte d'extraire la liste des noms (méthode getInstances) et le textVector associé (méthode getInstanceVectors). Attention: penser à mettre dans votre répertoire de travail les scripts tagging.py et textSpaceVector.py vus dans les tds précédents.

Nous supposons que les voisins d'un sens d'un mot dans Wordnet est la liste renvoyée par la fonction voisins implémentée ci-dessus.

  1. Ecrire un script python qui permet d'assigner à chaque occurrence de resistance dans le texte un sens (un synset).
  2. Evaluer les résultats.
  3. N'y a-t-il pas moyen d'améliorer ces résultats ? Implémenter vos solutions.