Terminologie Computationnelle

Travaux Pratiques

Objectif du TP

L'objectif du TP est de manipuler un corpus de textes et d'utiliser des outils de TAL. Les différentes manipulations permettront d'avoir des données pour construire un index hiérarchisé.

NB : Si les outils présentés en cours ne sont pas suffisants, vous pouvez effectuer une partie du travail manuellement (notamment au niveau du nettoyage du corpus, ou du tri et de la validation des résultats).

Installation des logiciels

  • Télécharger l'archive suivante : Termino.tar.gz
  • Extraire tous les fichiers de l'archive dans le répertoire de connexion :
    			  cd $HOME
    			  tar xzvf Termino.tar.gz 
    			  cd Termino
    			  ./install.sh
    			

TP1 (extraction de termes)

Étiqueter le corpus avec TreeTagger

tree-tagger-french $HOME/Termino/Corpus/resumes-article-2012.txt > $HOME/Termino/Corpus/resumes-article-2012.ttg

Effectuez l'extraction des termes avec YaTeA  :

  • à partir du fichier en sortie de TreeTagger
    $HOME/Termino/YaTeA/yatea-ttg-fr.sh $HOME/Termino/Corpus/resumes-article-2012.ttg
  • à partir du fichier en sortie de TreeTagger (sortie incluant les termes simples)
    $HOME/Termino/YaTeA/yatea-ttg-fr-all.sh $HOME/Termino/Corpus/resumes-article-2012.ttg
  • Utilisation de TermoStat
Après avoir effectué les opérations ci-dessus sur l'ensemble des résumés (fichier resumes-article-2012.txt), l'ensemble des articles (fichier articles-2012.txt), chaque résumé et chaque article, analysez et comparez les résultats obtenus.

TP2

Effectuez les traitements suivants :

  1. Acquisition de relations entre termes
    • Approche lexicale : utilisation de l'inclusion lexicale de termes (acquisition de relations d'hyperonymie, en général)
      $HOME/Termino/Logiciels/getTermAndHead.sh $HOME/Termino/Corpus/resumes-article-2012.termList.xml
    • Approche syntaxique : définition et application de patrons lexico-syntaxiques (acquisition de relations d'hyperonymie)
      $HOME/Termino/Logiciels/TreeTagger2Inline.pl < $HOME/Termino/Corpus/resumes-article-2012.ttg | $HOME/Termino/Logiciels/PatronsLS-fr.pl -liste > $HOME/Termino/Corpus/resumes-article-2012.relHyperonymie-liste.txt
      $HOME/Termino/Logiciels/TreeTagger2Inline.pl < $HOME/Termino/Corpus/resumes-article-2012.ttg | $HOME/Termino/Logiciels/PatronsLS-fr.pl > $HOME/Termino/Corpus/resumes-article-2012.relHyperonymie.txt
    • Acquisition de variantes morpho-syntaxiques : Utilisation de Faster en version indexation libre ou contrôlée
      • Acquisition de variantes à partir du fichier texte (indexation libre)
        $HOME/Termino/FasterFreeFR.sh $HOME/Termino/Corpus/resumes-article-2012.txt
      • Acquisition de variantes à partir des termes extraits par YaTeA (indexation libre)
        $HOME/Termino/FasterFreeFR-YaTeA.sh $HOME/Termino/Corpus/resumes-article-2012.termCandidates.ttg
      • Acquisition de variantes de termes issus d'une terminologie, à partir du fichier texte (indexation controlée)
        $HOME/Termino/FasterControlledFR.sh $HOME/Termino/Corpus/resumes-article-2012.txt $HOME/Termino/Corpus/Ressources/motscles2012.termlist.txt
      • Acquisition de variantes de termes issus d'une terminologie, à partir des termes extraits par YaTeA (indexation controlée)
        $HOME/Termino/FasterControlledFR-YaTeA.sh $HOME/Termino/Corpus/resumes-article-2012.termCandidates.ttg $HOME/Termino/Corpus/Ressources/motscles2012.termlist.txt
    • Approche distributionnelle à partir des termes candidats : utilisation des contextes partagés pour regrouper les mots ou les termes
      $HOME/Termino/Logiciels/DistributionalAnalysis.sh --terms $HOME/Termino/Corpus/resumes-article-2012.termList.xml --dependency HM --samepostag --lemma --simplifyterms --semmeasure Jaccard --relations > $HOME/Termino/Corpus/resumes-article-2012.DArel

      Vous pouvez également inclure des options permettant de filtrer les résultats :

      • --threshold gt=0.5 (faire varier la valeur) : seuil minimal permettant de retenir une relation entre deux mots
      • --minimumCtxt 2 (faire varier la valeur) : seuil minimal de contexte communs permettant de retenir une relation entre deux mots
      • --minimumFreq 2 (faire varier la valeur) : seuil minimal permettant de retenir un contexte

    • Analyser et comparer les résultats obtenus.
  2. A partir des différents résultats, constituer une terminologie (partielle) du TALN

Evaluation de la qualité des ressources produites

Le script evalIndex.sh permet d'évaluer la qualité d'une liste de termes ou de mots-clés produite par rapport à une référence en calculant la précision, le rappel et la F-mesure pour chaque texte à indexer puis en moyenne (le script utilise l'outil trec_eval du NIST pour effectuer l'évaluation).

On suppose qu'à chaque texte correspond un fichier contenant les termes ou les mots-clés. Les fichiers de termes ou de mots-clés produits doivent avoir le même nom que le fichier contenant le fichier contenant texte. Tous les fichiers produits doivent être dans un répertoire dédié (par exemple Corpus/Termes).

Le script prend deux arguments :

  1. Le répertoire contenant les fichiers de référence (on supposera alors que tous les fichiers du répertoire doivent être utilisés pour l'évaluation) ou un fichier contenant la liste des chemins absolus des fichiers à utiliser pour l'évaluation.
  2. Le répertoire contenant les fichier correspondant à chaque texte.
Pour utiliser le script, il suffit de taper l'une des commandes suivantes :
			  $HOME/TPTAL/Logiciels/evalIndex.sh $HOME/TPTAL/Corpus/References $HOME/TPTAL//Corpus/Termes
			
ou
			  $HOME/TPTAL/Logiciels/evalIndex.sh $HOME/TPTAL/files.list $HOME/TPTAL//Corpus/Termes
			
et files.list contient, par exemple, les chemins absolus suivants :
			  $HOME/Termino/Corpus/articles/taln-2012-019.txt
			  $HOME/Termino/Corpus/articles/taln-2012-010.txt
			  $HOME/Termino/Corpus/articles/taln-2012-011.txt
			  $HOME/Termino/Corpus/articles/taln-2012-001.txt
			  $HOME/Termino/Corpus/articles/taln-2012-009.txt
			  $HOME/Termino/Corpus/articles/taln-2012-023.txt
			

Génération d'un index

Pour la génération d'un index (sans référence de localisation), il est possible d'utiliser le script makeIndex.pl qui intègre les termes, des relations d'hyperonymie, de synonymie et voir-aussi. Par exemple :


			  $HOME/Termino/Logiciels/makeIndex.pl -S \
			  -i $HOME/Termino/Corpus/Ressources/motscles2012.termlist.txt \
			  -t $HOME/Termino/Corpus/resumes-article-2012.terms -t $HOME/Termino/Corpus/resumes-article-2012-all.termList.txt \
			  -h $HOME/Termino/Corpus/resumes-article-2012.lexinclusion -h $HOME/Termino/Corpus/resumes-article-2012.relHyperonymie-liste.txt \
			  -s $HOME/Termino/Corpus/resumes-article-2012+motscles2012.CI.varTerm -s $HOME/Termino/Corpus/resumes-article-2012.FI.varTerm \
			  -s $HOME/Termino/Corpus/resumes-article-2012+motscles2012.CI-YaTeA.varTerm -s $HOME/Termino/Corpus/resumes-article-2012.FI-YaTeA.varTerm \
			  -a $HOME/Termino/Corpus/resumes-article-2012.DArel
			  
			

Format des fichiers :

  • Terms (option -t) :
    Trois formats peuvent être utilisés :
    • Format 1 colonne : un terme par ligne
    • Format 2 colonnes : format de sortie de TermTagger (identifiant de terme et terme séparés par une tabulation)
    • Format 3 colonnes : format de sortie termList de YaTeA (terme, fréquence et autre mesures de tri séparés par une tabulation)
  • Index (option -i) : un terme par ligne
  • Relations d'hyperonymie (option -h) : format de sortie de l'acquisition de patrons et du calcul d'inclusion lexicale (hyperonyme et hyponymie séparés par une tabulation)
  • Relations de synonymie (option -s) : format de sortie de Faster (terme et son synonyme séparés par une tabulation)
  • Relations de voir-aussi (option -a) : format de sortie du script d'analyse distributionnelle (termes associés séparés par : )

Corpus 

Outils de TAL (documentation complémentaire au TP)

Recherche de termes issus d'une ressource dans un texte

  • Vous pouvez développer vos programmes pour réaliser cette recherche
  • Vous pouvez utiliser ce script
    $HOME/Termino/Logiciels/grepTerms.pl --terms Ressource --corpus Corpus --list
    (recherche basique) se trouvant dans le répertoire $HOME/Termino/Logiciels

    où :

    • Ressource terminologique
    • Corpus : Corpus au format texte

  • Voir l'aide avec
    $HOME/Termino/Logiciels/grepTerms.pl --help

Reconnaissance de termes issus d'une ressource dans un texte

  • Scripts basés sur le module Perl Alvis::TermTagger
    • Reconnaissance de termes avec TermTagger.sh :
      $HOME/Termino/TermTagger.sh Corpus  Ressource 
      se trouvant dans le répertoire $HOME/Termino

      où :

      • Ressource : Liste de termes issus d'une ressource terminologique (un terme par ligne)
      • Corpus : Corpus au format texte

      La sortie est une liste de termes « à plat » et se trouve dans le fichier Corpus.terms (chaque terme est précédé du numéro de la phrase dans lequel il se trouve).

Analyse morpho-syntaxique (pour le français)

  • TreeTagger 

    Remarques :

    • Associe un lemme et une étiquette morpho-syntaxique à chaque mot d'un texte donné en argument
    • Jeu d'étiquette pour le français
    • L'utilsation du script nécessite la modification de la variable PATH. Pour cela, utilisez les commandes suivantes 
      cd $HOME/Termino/TreeTagger
      				  PATH=`pwd`/cmd:`pwd`/bin:$PATH

    Utilisation 

    • tree-tagger-english Corpus : le corpus en argument est segmenté en mot avant d'être étiqueté.
      Le corpus est un fichier texte.
    • tree-tagger lib/english.par -token -lemma -sgml < Corpus : le corpus sur l'entrée standard doit être segmenté en mot
    • tree-tagger-french Corpus : le corpus en argument est segmenté en mot avant d'être étiqueté.
      Le corpus est un fichier texte.
    • tree-tagger lib/french.par -token -lemma -sgml < Corpus : le corpus sur l'entrée standard doit être segmenté en mot

  • GeniaTagger 

    Remarques :

    Utilisation 

    • geniatagger < Corpus > CorpusTagge : le corpus sur l'entrée est segmenté en mot avant d'être étiqueté.
      Le corpus est un fichier texte.
    • geniatagger -nt < Corpus > CorpusTagge : le corpus sur l'entrée est segmenté en mot avant d'être étiqueté.
      Le corpus est un fichier texte segmenté en mot.

Extraction de termes

  • YATEA

    Utilisation :

    • Exemple d'exécution (texte en anglais, étiquetage avec TreeTagger pour l'anglais)  :
      				cd $HOME/Termino/YaTeA
      				PATH=`pwd`:$PATH
      				yatea.sh Config/yatea.rc Corpus
      			      

      Le fichier Corpus doit être au format de sortie du TreeTagger

      Les résultats sont dans le répertoire Corpus créé dans le répertoire courant. Plusieurs fichiers sont disponibles :

      • candidats.xml  : Liste des termes analysés, au format XML
      • termList.txt : Liste des termes
      • termCandidates.ttg : Liste des termes au format de sortie du TreeTagger
      • unparsed et unparsable  Listes de groupes nominaux non analysés

    Configuration :

    Plusieurs fichiers de configuration sont disponibles dans le répertoire YaTeA/Config 

    • yatea.rc : extraction de termes dans des corpus en anglais. Le corpus doit être étiqueté avec TreeTagger pour l'anglais ou GeniaTagger
    • yatea-fr.rc : extraction de termes dans des corpus en français. Le corpus doit être étiqueté avec TreeTagger pour le français (pour l'utilsation de TreeTagger, voir plus haut).

    Autre possibilité d'utilisation (sans le script yatea.sh) :

    			      cd $HOME/Termino/YaTeA/Lingua-YaTeA
    			      PATH=`pwd`/bin:$PATH
    			      export PERL5LIB=`pwd`/lib:$PERL5LIB
    
    			      cd $HOME/Termino/YaTeA/Config-General-2.41/blib
    			      export PERL5LIB=`pwd`/lib:$PERL5LIB
    
    			      cd $HOME/Termino/YaTeA/Parse-Yapp-1.05/blib
    			      export PERL5LIB=`pwd`/lib:$PERL5LIB
    
    			      yatea --rcfile=yatea.rc Corpus
    			    

Acquisition de relations entre termes

  • FASTER

    Utilisation :

    			    cd $HOME/Termino/FASTER-2.03
    			    PATH=`pwd`/cmd:`pwd`/bin:$PATH
    • Indexation libre 
      • Fastr-free-indexing-fr Corpus.txt : calcul des variantes en corpus à partir d'un fichier texte (brut) -- pour le français
        (par exemple, Fastr-free-indexing-fr prise_charge_diabete_latin1.txt)
      • Fastr-free-indexing-fr2 TermsEnCorpus : calcul des variantes en corpus à partir d'une liste de termes extraits par YaTeA et au format de sortie du TreeTagger -- pour le français

        (il s'agit d'éviter d'effectuer une nouvelle extraction de termes qui peut être différente, lorsque vous utilisez Faster)

        • TermsEnCorpus : termCandidates.ttg

        NB : L'indexation ne consiste pas seulement à identifier les termes pertinents ou discriminants dans un texte, mais aussi regrouper les termes similaires (morphologiquement, syntaxiquement ou sémantiquement). Vous réduisez ainsi la taille de l'index (et donc après, le coût de la recherche dans un contexte de recherche d'information). Vous regroupez ainsi les termes synonymes ou similaires dans une même entrée de l'index.

    • Indexation controlée 
      • Fastr-controlled-indexing-fr Corpus ListeDeTermes : calcul des variantes en corpus d'une liste de termes controlés -- pour le français

        (par exemple, Fastr-controlled-indexing-fr prise_charge_diabete_latin1.txt Termes-UMLS-FRE-avecpointfinal.list)

      • Fastr-controlled-indexing-fr2 TermesEnCorpus ListeDeTermes : calcul des variantes d'une liste de termes controlés à partir d'une liste de termes extraits d'un corpus par YaTeA. Les deux fichiers doivent être au format de sortie du TreeTagger -- pour le français

        • TermsEnCorpus : termCandidates.ttg
        • ListeDeTermes : termes issus d'une ressource (Termes-UMLS-FRE-avecpointfinal.list par exemple)

        NB : il est possible que cette partie prenne beaucoup de temps ou que Faster se termine avant la fin. Dans ce cas, il faut découper le fichier ListeDeTermes en plusieurs sous listes (avec split et l'option -l) et lancer l'indexation controlée sur chaque sous liste.

        Pour obtenir la liste des termes contrôlés au format TreeTagger, chaque terme doit se terminer par une point. Vous utilisez ensuite TreeTagger pour étiqueter les termes.

        Programme complémentaire :

        Lex2Faster.pl  Ajout un point à la fin de chaque ligne fournit sur l'entrée standard (supprime également tous les points se trouvant à l'intérieur de chaque ligne).

  • Acquisition de relations à partir de patrons lexicaux syntaxiques
    • PatronsLS.pl < Corpus.txt : propose des relations d'hyperonymie en utilisant des patrons caractéristiques de cette relation (pour des textes en anglais) .
    • PatronsLS-fr.pl < Corpus.ls-in : propose des relations d'hyperonymie en utilisant des patrons caractéristiques de cette relation (pour des textes en français) .
    • L'option -liste permet de n'afficher que les termes en relation

      Les informations en entrée doivent être représentées de la manière suivate : Forme fléchie/Étiquette/Lemme/Clé de hashage

      Exemple : proteins/NNP/protein/0

      Chaque ligne correspond à une phrase.

    • Programme complémentaire :
      • TreeTagger2Inline.pl

        Fichier de règles (pour la correction de jeu d'étiquette pour TreeTagger pour l'anglais - modifiable pour d'autres jeux d'étiquettes)

        Utilisation :

        • TreeTagger2Inline.pl < Corpus.ttg
        • TreeTagger2Inline.pl TreeTagger2Inline.rules < Corpus.ttg

        Le corpus doit être au format de sortie de TreeTagger.

        Le script produit la sortie suivante :

        • Une phrase par ligne et chaque mot est présenté de la manière suivante :

          Forme fléchie/Étiquette/Lemme/Clé de hashage

        • NB : chaque ligne est séparée par plusieurs lignes vides, et une balise
          <FIC NUM=id>
          identifie chaque phrase.
        • Exemple : proteins/NNP/protein/0

  • Acquisition de relations par inclusion lexicale
    • getTermAndHead.pl FichierXML : identifie des relations d'hyperonymie par inclusion lexicale

      Le fichier en argument est le fichier XML en sortie de YaTeA

      En sortie, chaque ligne correspond à une relation entre un terme hyponyme et un terme hyperonyme.

  • Analyse distributionnelle à partir des termes extraits du corpus
    • DistributionalAnalysis.sh [Options] : effectue l'analyse distributionnelle en utilisant les termes extraits du corpus

      Options :

      • --terms fichierXML : fichier de sortie YaTeA au format XML. Il s'agit de l'ensemble des termes sur lequel portera l'analyse distributionnelle
      • --dependency HM : type de relation de dépendance utilisée pour l'analyse distributionnelle (avec HM, les mots pivôts sont les têtes des termes, les contextes sont les modifieurs)
      • --samepostag --lemma : définition de contraintes sur le calcul des relations (même étiquette morpho-syntaxique, même lemme
      • --simplifyterms : génération de termes élémentaires (bitermes non attestés en corpus)
      • --semmeasure Jaccard : spécification de la mesure de similarité utilisée (ici Jaccard)
      • --relations : spécification du format de sortie (chaque ligne correspond à une relation entre deux mots

      En sortie, chaque ligne correspond à une relation entre deux composants de termes (pouvant être un mot ou un terme).

Ressources 

NB : ces ressources sont déjà présentes dans l'archive Termino.tar.gz.

  • Liste de mots-clés ($HOME/Termino/Corpus/Ressources/motscles2012.termlist.txt) des articles publiés dans TALN 2012
  • Liste de mots-clés $HOME/Termino/Corpus/Ressources/motscles-2002-2014.termlist.txt des articles publiés dans TALN de 2002 à 2014