Outils pour utilisateurs

Outils du site


public:palafra_lemmatisation_fro:lemmatisation_avecpos_spec

Spécification de la lemmatisation en ancien français sur un corpus équipé en morphosyntaxe vérifiée

Objectif

Projeter les lemmes d'un lexique d'ancien français (pos, lemme) sur un corpus déjà équipé en morphosyntaxe vérifiée

Méthode

Projeter hors contexte le lemme du lexique pour un couple forme + morphosyntaxe.

Solution

Étape 1 : implémenter la projection

Ajouter une méthode “LemmaProjection” qui prend en argument :

  • Le corpus sélectionné dans la vue Corpus
  • un fichier lexique TreeTagger
  • un nom de propriété de mot du corpus codant la morphosyntaxe
  • un nom de propriété de mot du corpus codant le lemme à mettre à jour (ou créé si inexistant)

La commande affiche les couples forme+morphosyntaxe qui n'ont pas matché dans le lexique.

algorithme de projection :

  • pour chaque texte, on parcours son fichier XML-TXM :
    • pour chaque mot “w”
      • si le lexique contient le couple word+pos du mot
        • on ajoute ou met à jour la propriété du mot qui code le lemme

fichier lexique

Il faut avoir au préalable regroupé les entrées du dictionnaire par couple forme + morphosyntaxe.

Par exemple :

form	pos	lemme	lemme_source
F1	P1	L1	LS1
F1	P1	L2	LS1
F1	P1	L3	LS2

Donne la règle de projection : F1 + P1 -> L1|L2|L3

Cette concaténation correspond à celle qui est faite pour produire le lexique TreeTagger, on peut donc éviter de refaire le développement et utiliser directement le lexique TreeTagger du modèle fro2.par (celui avec lemme)

Étape 2 : Améliorer les performances de la projection

Propositions

À implémenter :

  • lemmes absents :
    • form=“et” et pos=“CON” → no_lemma
  • min/maj :
    la projection neutralise la différence
    • si une forme avec capitale est absente de frolex → utiliser la forme minuscule si disponible sinon si pos = nom_propre → lemme = forme avec capitale sinon lemme = forme minusculisée
    • si une forme avec capitale est absente de frolex et si pos = nom_propre → ajouter forme - pos - forme capitalisée - source BFM_automatique dans frolex (source BFM_manuelle est réservé pour les lemmes créés manuellement)
  • nombres : lemme dmf = majuscules sans point
  • noms propres (lgerm)

À clarifier :

  • sources (de dictionnaire ou de lemme ?): pour lemme DMF absent d'un lien form-pos → propose (si disponible) dans l'ordre : Tobler, Dect, le reste
    • Q: si une source est disponible alors n'y a t-il pas toujours un lemme ?
    • R: Il nous faut des lemmes DMF : si le lemme DMF n'est pas disponible, on va en créer un en assurant un lien avec les autres sources
    • Je constate que frolex.tsv ne contient aucune source “DMF”. Pourtant, le DMF devrait être la source principale des lemmes. Comment est-ce possible ? On s'est trompé dans la fusion ?
  • lien forme-lemme dmf hors frolex
    • Q: frolex ne contient-il pas tous les liens forme-lemme DMF ?
    • R: je ne comprends pas ce qu'on voulait dire par ce point. Mais je constate que dans frolex il manque des liens forme-lemmes qui sont pourtant connus de LGerM, par exemple fu → être1
  • lien forme-pos multiple dans certaines entrées (projection, TT ?)
    • Q: cas du verbe voler1, voler2 ?
    • Q: que fait-on de ça ?
    • R: On n'a pas décidé. J'ai deux propositions :
      1. créer un double lemme voler1|voler2 (à désambigüiser à la main)
      2. créer des lemmes sans chiffres (en conservant les lemmes définis manuellement dans une autre propriété)
  • pour plusieurs lemmes DMF disponibles
    • lgerm att (attesté) : la forme correspond probablement au lemme du DMF (correspondance forme-lemme attestée dans le lexique, mais ça ne veut pas forcément dire qu'elle est correcte)
    • lgerm hyp (hypothétique) : la forme correspond peut-être au lemme du DMF (correspondance forme-lemme établie à base de règles)
    • proj : la forme correspond au lemme de FROLEX
    • Q: que fait-on de ça ? ça concerne le tableau à générer pour Naomi plutôt que la projection ?
    • R: si je comprends bien ce sera le cas des lemmes frolex hors DMF. Il faudra, à mon avis, coller la source du lemme pour pouvoir ensuite créer de nouveaux lemmes “à la DMF”, par exemple “lemme_TL”
  • → liste de règles de priorité
    1. on gère une liste de règles = liste de lemmes du DMF adhoc de priorisation (le premier lemme de la liste est le plus probable)
    2. on propose un calcul basé sur la bfm à base de fréquence → calcul automatique
    • Q: que fait-on de ça ? ça concerne le tableau à générer pour Naomi plutôt que la projection ?
    • R: Cela concernera la projection quand nous aurons assez de données
    • Q: liste connue des sources : TL,DECT,GDF,GDC,TLF,HUG,DEAF,LFA,PVR,VFM,LMG,PKAS,AND specs frolex
    • Q2: où est passé le DMF ???

Implémentation 2.1

On commence par implémenter une partie des propositions :

  • lemmes absents
  • min/maj
  • noms propres, nombres

On améliore la commande LemmaProjection :

Paramètres supplémentaires :

  • ttlexicon → dictionaryTSV : un fichier dictionnaire au format "form msd_cattex_conv lemma source F" (format frolex)
  • extraDictionaryTSV : fichier de règles forme + pos → lemme qui règle le cas de lemmes absents du dictionnaire. Exemple :
    et	CON	et
    • une règle a priorité sur une règle équivalente de dictionaryTSV
  • formAsLemmaPosList : liste des pos pour lesquels le lemme prend la valeur de la forme
  • lemmaSourcePriorityList : liste des sources de lemmes à utiliser et leur priorité (du plus prioritaire au moins prioritaire)

Nouvel algorithme de projection :

  • générer des règles form+pos → lemme à partir de dictionaryTSV
    • ne pas conserver les règles dont le lemme est <no_lemma>
    • ne pas conserver les règles dont la 'source' ne fait pas partie de lemmaSourcePriorityList
  • générer/remplacer des règles form+pos → lemme à partir du fichier extraDictionaryTSV (sans les contraintes ci-dessus)
  • pour chaque texte du corpus, on parcours son fichier XML-TXM :
    • pour chaque mot “w”
      • si pos fait partie de formAsLemmaPosList, alors le lemme est la forme du mot (Noms propres, nombres)
      • sinon si dictionaryTSV contient le couple word+pos du mot
        • on projette le lemme
      • sinon si dictionaryTSV contient le couple minuscule(word)+pos du mot
        • on projette le lemme
      • sinon on lemma ← “!”+word

Recette

Étape 1

  • Mettre à jour TXM avec l'update site Palafra : http://textometrie.ens-lyon.fr/dist/palafra/
    • Menu : Fichier > Ajouter une extension tierce
    • Copier l'URL http://textometrie.ens-lyon.fr/dist/palafra/ dans le champ “Travailler avec”
    • Appuyer sur “Entrée”
    • Décocher la case “Regrouper les éléments par catégorie”
    • Cliquer sur “Sélectionner tout”, puis sur Suivant
    • Accepter les conditions, puis “Terrminer”
    • Cliquer sur “OK” si nécessaire
  • Importer/charger BFMGOLD
  • Sélectionner le corpus
  • Dans le menu principale, sélectionner “TreeTagger > LemmaProjection”
    • ttlexicon : sélectionner le fichier frolex-tt.tsv
    • posproperty : pos
    • targetproperty : plemma
  • puis re-importer le corpus avec la commande “Corpus > Mettre à jour le corpus” du menu principal

Étape 2

Les fichiers de la recette se trouvent dans le disque partagé : dav://sharedocs.huma-num.fr/dav.php/@Shares/(948)%20Cactus/(3791)%20Cactus/Projets/Palafra/recettes/lemmaprojection%20v2 ou webdav://sharedocs.huma-num.fr/dav.php/@Shares/(948) Cactus/(3777) Projets/Palafra/recettes/lemmaprojection v2 (selon les navigateurs)
  • Récupérer les fichiers de la recette (corpus binaire, lexique, etc.)
    • voir les chemins ci-dessus
  • Mettre à jour TXM avec l'update site Palafra : http://textometrie.ens-lyon.fr/dist/palafra/
    • voir l'étape 1 ci-dessus
  • Importer/charger le corpus SBATH lgermé (dans la propriété lemma)
  • Ajouté : Dégrader les étiquettes Cattex pour la compatibilité avec FROLEX
    • lancer le Recodage de la propriété type sur le corpus BFMGOLD (dégradation de cattex) :
      • Sélectionner le corpus SBATH1, puis Corpus > Recoder le corpus
      • table de conversion : conv ctx9 ctx9-dmf.tsv
      • entrée : type
      • sortie : pos
  • Sélectionner à nouveau le corpus SBATH1
  • Dans le menu principal, sélectionner “TreeTagger > LemmaProjection”
    • dictionaryTSV (ou dictionary ??) : le fichier frolex.tsv
    • extraDictionaryTSV (ou extrarules ??) : le fichier extra.tsv (vide pour l'instant)
    • formAsLemmaPosList (ou ce champ vient après posproperty ???) : NOMpro,APD,PON,PONfrt
    • posProperty (ou posproperty ??) : pos
    • targetProperty (ou lemmaproperty ??) : plemma
    • lemmaSourcePriorityList (ou sourcePriorityList ??) : TL,,DECT,GDF,GDC,TLF,HUG,DEAF,LFA,PVR,VFM,LMG,PKAS,AND (“,,” n'est pas une erreur il s'agit des lemmes automatiques des nombres romains)
  • La commande
    • met à jour les fichiers XML-TXM du corpus
    • les mots qui n'ont pas pu être lemmatisés pour chaque texte
    • génère un fichier 'nomatch.txt' avec tous les couples word+pos qui n'ont pas pu être lémmatisés
    • génère le fichier '/tmp/rules' qui contient exactement les règles utilisées par la commande
  • Puis re-importer le corpus avec la commande “Corpus > Mettre à jour le corpus” du menu principal
  • Comparer les valeurs des propriétés plemma et lemma
    • Index de [plemma != lemma]
    • Index de [plemma == lemma]
    • Index de [plemma = "\!.+"] : index des mots qui n'ont pas de lemme
public/palafra_lemmatisation_fro/lemmatisation_avecpos_spec.txt · Dernière modification: 2016/11/19 18:36 par alexei.lavrentev@ens-lyon.fr