Format d’un lexique jsRealB

Les informations contenues dans les lexiques de jsRealB ont été converties à l’origine à partir d’un format interne inspiré de Lisp développé au RALI il y a de nombreuses années. Les lexiques JSON ont été créés à l’origine à l’aide d’un script Python, puis manuellement patchés et mis à jour au fil des années avec de nouveaux champs au fur et à mesure que d’autres informations devenaient disponibles.

Les informations de déclinaison ou de conjugaison sont associées à des tables, définies dans les fichiers rule-en.js et rule-fr.js, qui couvrent la plupart des cas d’utilisation en anglais et en français.

Nous donnons maintenant le schéma json-rnc utilisé pour valider les entrées du lexique français. la structure du lexique anglais est similaire, quoique certains champs diffèrent.

Un lexique est un objet JSON unique dont les clés sont le lemme et la valeur est elle-même un autre objet de type lexInfo avec des informations sur les parties du discours autorisées pour ce lemme ; au moins un objet de partie du discours doit être défini. L’objet associé à chaque partie du discours énumère les valeurs autorisées pour les différents champs donnant des informations sur la déclinaison ou la conjugaison.

Schéma (data/lexicon-fr.jsonrnc)

start = {*:lexInfo}

lexInfo={N?:  {tab:/n(I|\d{1,3}a?)/, g?:gender, h?:one, niveau?:niv },
         A?:  {tab:/[an](I|\d{1,3}a?)/,  h?:one, pos?:/pre|post/,niveau?:niv},
         Pro?:{tab:/pn\d{1,2}(-[123][sp]?[mfn]?)?|n27|n28|n75|n76|d[1345]|nI/, 
               g?:gender, n?:num, pe?:oneTwoThree,niveau?:niv},
         V?:  {tab:/v\d{1,3}/, aux?:/av|êt|aê/, h?:one, pat?:[/tdir|tind|intr|réfl|impe/],niveau?:niv}, 
         D?:  {tab:/d\d{1,2}(-\d)?|n(I|23|25|27|28|48|75|76)/, n?:num, value?:number,niveau?:niv},  
         Adv?:{tab:/av|b\d/,h?:one,niveau?:niv}, 
         P?:  {tab:/ppe?/,h?:one,niveau?:niv},
         C?:  {tab:/cj|cje|cji/,niveau?:niv},
         Q?:  {tab:/av/},
         Pc?: {tab:[/pc\d{1,2}/], compl?:string},
         value?:number
    }@(minProperties=1)

one       = number@(minimum=1, maximum=1)
oneTwoThree  = number@(minimum=1, maximum=3)
niv  = number@(minimum=1,maximum=6)
gender = /m|f|x/
num = /s|p/

Interrogation du lexique avec jq

La manière la plus pratique d’interroger le lexique est d’utiliser l’IDE ou la démonstration Evaluation.

Il est aussi possible d’utiiser jq pour interroger ces lexiques. Voici quelques exemples de requêtes:

jq 'to_entries[]|select(.key=="amour")' lexicon-fr.json

jq -c 'to_entries[]|select(.key|test("^amour.*"))' lexicon-fr.json

jq -r 'to_entries[]|select((.key|test("er$")) and (.value|has("N")) and (.value|has("V")) and (.value|has("A")))|.key' lexicon-fr.json

Validation

Utiliser le validateur jsonrnc

.../ValidateJsonRnc.py --slurp lexicon-en.jsonrnc lexicon-en.json
.../ValidateJsonRnc.py --slurp lexicon-fr.jsonrnc lexicon-fr.json

This also creates a standard JSON Schema which can be used in other contexts.

Utiliser le validateur JSON de Visual Studio Code

Ceci est utile pour ajouter de nouvelles entrées au lexique. Ajouter ce qui suit au fichier de configuration settings.json. Ceci utilise le schéma JSON créé par le processus de validation précédent.

"json.schemas": [
        {"fileMatch": ["/Users/lapalme/Documents/GitHub/jsRealB/data/lexicon-en.json"],
         "url": "./data/lexicon-en.jsonrnc.json"},
         {"fileMatch": ["/Users/lapalme/Documents/GitHub/jsRealB/data/lexicon-fr.json"],
         "url": "./data/lexicon-fr.jsonrnc.json"}
   ]

Contact: Guy Lapalme RALI, Université de Montréal, 2024.