Analyse sémantique automatique du langage naturel Année 2012-2013 TP sur la sémantique du temps Date de distribution: 25/09/2012 *** Date de remise: 02/10/2012 *** 1. Sémantique compositionnelle ------------------------------ Dans cette partie vous allez tester l'introduction d'événements dans les représentations sémantiques en NLTK. Pour cela vous reprendrez une grammaire simple, répétée dans le fichier g_temporal0.fcfg. Vous ferez les modifications suivantes, dans cet ordre, en testant à chaque étape que tout se passe bien avec les phrases tests : - ajouter un référent d'événement pour chaque verbe. Le temps grammatical sera pris en compte directement dans la sémantique des verbes. - modifier la sémantique des verbes ("sem") pour séparer l'apport de l'opérateur de temps verbal dans un trait "temps". Le calcul se fera alors au niveau du syntagme verbal. - modifier la grammaire pour qu'elle accepte les adverbiaux temporels "hier" et "demain", en laissant leur sémantique "vide". Les adverbiaux modifieront le groupe verbal. - ajouter la sémantique des adverbiaux. Vous pouvez tester votre grammaire comme suit : > import nltk > mes_phrases = ["Jean ronfle", "un homme aima Marie", "Jean ronfla hier", "un homme aimera Marie demain"] > gram = nltk.data.load('file:./g_temporal0.fcfg') > result=nltk.sem.util.batch_interpret(mes_phrases,gram,semkey="sem") # 1ere analyse, 1ere phrase, sémantique (champ1) > for one in result: print one[0][1].simplify() On demande la grammaire et un script pour la tester, qui contient en particulier une liste de phrases test. [10 points] 2 Extraction d'expressions temporelles --------------------------------------- Dans cette partie, vous allez expérimenter l'extraction d'information par patrons de recherche à partir d'un petit corpus de test. 2.1 Recherche de noms d'événements Le fichier "EP.1M.conll" contient un petit extrait d'un corpus analysé en dépendance (l'Est Républicain), dans lequel on peut expérimenter la recherche de noms d'événements. Le fichier étant au format conll, chaque ligne correspond à un token avec un certain nombre d'informations, cf l'exemple : 8 démonstration démonstration N NC _ 5 obj _ _ Les champs sont dans l'ordre : position dans la phrase, forme, lemme, type syntaxique principal (ici nominal), type syntaxique (ici nom commun ou NC), un champ sans importance, position du gouverneur syntaxique, type de relation syntaxique avec le gouverneur. Ici, "démonstration" est l'objet du verbe en position 5 dans la phrase. Le reste est sans importance. On pourrait faire une analyse complète de ces représentations, mais dans un premier temps quelques manipulations avec "grep" serviront à donner une idée de la démarche. Votre tâche : extraire un certain nombre de noms qui dénotent potentiellement un événement en utilisant des contextes syntaxiques, vous pouvez par exemple commencer avec les contextes du verbe "provoquer". Petit rappel sur grep, avec quelques options bien utiles : (i) -A n / -B n / -C n renvoient n lignes respectivement situées après / avant / autour du contexte. (ii) -w ne renvoie que les lignes ou le patron est un mot, entouré par des blancs. (iii) -v renvoie les lignes ne contenant pas le patron de recherche. Par ailleurs, pour mettre un peu tout ça en forme, les commandes "sort", "uniq", "cut" sont bien utiles. On demande un sh-script qui affiche de façon raisonnablement lisible les noms candidats. Les commentaires éventuels seront donnés sous forme de commentaire dans le sh-script. [10 points]