Exemple de grammaire


Une grammaire comporte des règles, et se termine la plupart du temps par une règle récapitulative qui reprend, dans l’ordre qu’on souhaite, les règles précédentes.

Les bases d'une grammaire

Nous allons commencer par une grammaire simple : je cherche des noms d’animaux suivis d’un adjectif de couleur. J’ai donc besoin d’une règle animaux, et d’une règle couleur.

Pour l’écrire, il faut d’abord réfléchir aux éléments que vont possiblement comporter mes listes ; du côté des animaux : chat, chien, renard, oiseau, etc. et du côté des couleurs : vert, bleu, gris, rose, etc.

Le plus simple, dans ce cas, est de créer une liste pour chaque série, en utilisant la flexion appropriée à l’époque choisie. Lors de la création de la liste, il est conseillé de cliquer sur le bouton radio flexion, qui vous proposera à chaque fois toutes les formes du même lemme (par exemple : canard/canards ; gris/grise/grises). Vous pouvez cocher et décocher à chaque étape les formes proposées par la flexion.

On peut aussi utiliser des expressions régulières ou CQL : [lemma="rouge"%c] (chercher le lemme rouge sous toutes ses formes) ou encore blanc(he)?s? (chercher les formes blanc, et les formes optionnelles blanche/s et blancs)

Une fois les listes crées et sauvegardées, on attaque ensuite l’écriture de la grammaire à proprement parler en cliquant sur l’onglet Grammaires.

1. Choisir un titre

Il faut d’abord créer la grammaire et lui donner un nom (attention : pas d’espace dans le nom, utilisation du tiret bas recommandée). Il est conseillé de donner un nom explicite à ses grammaires et aux règles qui la composent, pour pouvoir facilement se souvenir de son contenu. On peut aussi en faire une description succincte (facultative). Ici, notre grammaire s’appellera animaux_couleurs.img2.png

2. Écrire les règles

Ensuite, on écrit la première règle sous la forme suivante : le mot règle, suivi du nom de la règle, du signe = (égal) , et du contenu. Ce contenu peut-être une forme, mais aussi une liste, une expression régulière, etc.

règle nom_de_la_règle = contenu

Quand on convoque un élément déjà présent comme une liste ou une règle déjà écrite, on utilise l'esperluette & comme signe introducteur. Puisqu’ici nous avons déjà deux listes prédéfinies, nous écrirons :

règle animaux_en_couleurs = &liste("animaux") &liste("couleurs")
img3.png

Traduction : la règle animaux_en_couleurs cherchera tous les éléments de la liste animaux obligatoirement suivis de tous les noms de la liste couleurs.

3. Utiliser la grammaire

Une fois vos grammaires créées, vous pourrez les appliquer en utilisant la fonction Recherche > Recherche assistée, puis en cliquant sur les deux flèches swap_vert située en haut à droite du bloc intitulé mot1 et en choisissant Utiliser une grammaire dans le menu déroulant. Un clic sur la ligne Grammaire* vous permettra d’accéder à toutes les grammaires disponibles et aux différentes règles dont elles sont composées.

On peut également interroger sa grammaire par une expression CQL dans la Recherche avancée (équivalente au mode Recherche assistée) en saisissant une expression du type :

&règle("id-de-la-grammaire::nom_de_la_règle")

soit dans notre cas :

&règle("animaux-couleurs::animaux_en_couleurs")

Traduction : Nous invoquons la règle nommée animaux_en_couleurs qui se trouve dans la grammaire dont l'identifiant id a pour valeur animaux-couleurs.

grammaire-animaux-couleurs.png

4. Consulter les résultats

On lance la règle animaux_en_couleurs de la grammaire animaux_couleurs, qui ramène, à partir de nos listes, un certain nombre de résultats :

  • J’ai dans mon cœur un oiseau bleu
  • un vieux pauvre avec un chien noir
  • deux petits taureaux noirs
  • de petits canards verts
  • etc.

On aurait pu aussi obtenir le même résultat en saisissant directement &liste("animaux") &liste("couleurs") depuis la recherche avancée ; mais la grammaire va permettre des opérations plus subtiles.

Créer une grammaire

Un exemple est proposé ici : la grammaire dates. Celle-ci permet de recenser toutes les expressions possibles de la date dans un texte : 8 juillet 1977, mardi 1er août 83, octobre 1602, etc.

1. Méthodologie

Pour l’écrire, il faut d’abord réfléchir aux éléments que va possiblement comporter une date. Prenons par exemple la date du dimanche 8 juillet 1977 . Elle comporte :

  • Le jour (lundi, mardi, etc.)
  • Le quantième du mois (1er, 2, 3, 4, etc.)
  • Le mois (janvier, février, mars, etc.)
  • L’année (qui peut être composé de deux ou quatre chiffres).

La meilleure méthode consiste d’abord à créer des listes, en utilisant l'onglet Liste de mots, pour les éléments en nombre fini simples à répertorier : une liste « jours » (avec le nom des jours de la semaine), une liste « mois ». On enregistre ces listes au fur et à mesure pour réutilisation ultérieure. Mais on peut aussi écrire ces listes directement dans la grammaire. Ainsi, la règle jours serait libellée :

règle  jours = "lundi|mardi|mercredi|jeudi|vendredi|samedi|dimanche"

Traduction : la règle jours cherchera les formes lundi ou mardi ou mercredi, etc… La barre verticale | signifie que l’élément trouvé doit remplir soit la première condition, soit la deuxième, soit la troisième, etc.

2. Nom de la grammaire

On attaque ensuite l’écriture de la grammaire à proprement parler. Il faut d’abord la créer et lui donner un nom (attention : pas d’espace dans le nom, utilisation du tiret bas recommandée). Il est conseillé de donner un nom explicite à sa règle de grammaire, pour pouvoir facilement se souvenir de son contenu. On peut aussi en faire une description succincte (facultative).

3. Première règle

Ensuite, on écrit la première règle sous la forme suivante : le mot règle, suivi du nom de la règle, du signe = (égal) , et du contenu. Ce contenu peut-être une forme, mais aussi une liste, une expression régulière, etc.

règle nom_de_la_règle = contenu

Par exemple, pour la règle qui cherchera le quantième du jour dans le mois :

règle quantième = "1er" | "[1-9][0-9]?"

Traduction : la règle quantième cherchera les formes 1er ou bien tous les chiffres de 1 à 9, possiblement suivis d’un deuxième chiffre de 0 à 9. On trouvera ainsi, par exemple 2, 8, 9, 10, 18, 31, 99. Le point d’interrogation signifie que le deuxième élément entre crochets est optionnel – sans quoi la recherche ne ramènerait que des nombres à deux chiffres et oublierait les nombre uniques (1, 2, 3…). La barre verticale | signifie que l’élément trouvé doit remplir soit la première condition, soit la deuxième.

4. Deuxième règle

On écrit ensuite la règle qui correspond aux années. Il faut d’abord réfléchir à la façon dont les années sont exprimées en français : soit sous forme intégrale (exemple : 1996), soit sous forme abrégée (exemple : 96).

règle année = "(1|2)[0-9][0-9][0-9]" | "[0-9][0-9]"

Traduction : la règle année cherchera tous les nombres à quatre chiffres commençant par un ou par deux, ainsi que tous les nombres compris entre 00 et 99. La parenthèse est ici utilisée pour grouper les éléments de la condition qui doit être remplie : (1|2) signifie « soit 1, soit 2 ». Nous aurions aussi pu écrire règle année = "([12][0-9])?[0-9][0-9]".

5. Règles suivantes

Mais une date peut aussi être faite d’intervalles : par exemple 18-19 ou 2018-2019. Et c’est là que la grammaire est intéressante, car on peut recycler des règles déjà écrites : ici, il suffit de réutiliser la règle année, en exigeant la présence de deux éléments séparés par un trait d’union. La syntaxe est la suivante &règle ("nom_de_la_règle"). Il ne faut pas oublier de placer le nom de la règle entre guillemets.

règle année_à_année = &règle("année") "-" &règle("année")

Traduction : la règle année_à_année cherchera une succession de deux nombres à deux chiffres, ou à quatre chiffres et commençant par 1 ou 2, séparés par un trait d’union.

On fait ensuite la même chose pour les mois. Et cette fois, on peut faire réintervenir les listes crées au début du processus. La syntaxe est la suivante &liste ("nom_de_la_liste"). Il ne faut pas oublier de placer le nom de la liste entre guillemets.

règle mois_à_mois = &liste("mois") &règle("année")? "-" &liste("mois") &règle("année")

Traduction :  la règle règle mois_à_mois trouvera les formes janvier-février 99 ou encore mai 1968-mai 1969. Dans le premier élément, l’année est optionnelle – sans quoi la recherche ne pourrait pas détecter janvier-février 99 (elle ne relèverait que les mois obligatoirement suivis d’une année).

règle quantième_à_quantième = &règle("quantième") (&liste("mois") &règle("année")?)? "-" &règle("quantième") &liste("mois") &règle("année")?

Traduction : la règle quantième_à_quantième trouvera les formes 8 août 1772-25 septembre 1873 mais aussi (grâce au premier "année" optionnel) 8 août-25 septembre 1873.

6. Règle récapitulative

Ensuite, on peut écrire une règle récapitulative qui va reprendre toutes les dates à intervalles

règle intervalles = &règle("année_à_année") | &règle("mois_à_mois") | &règle("quantième_à_quantième")

Traduction :  la règle intervalles trouvera les formes 82-85, 1968-1969, mai 2000-août 2005, 14-15 juillet. On notera qu’on force ici les intervalles des quantièmes à être suivis d’un nom de mois, de sorte à éviter les occurrences du type : page 72-73.

7. Règle finale

Enfin, on écrit la règle récapitulative qui reprend toutes les règles antérieures.

règle date = &liste("jours")? &règle("quantième")? &liste("mois") &règle("année")|&règle ("intervalles")

Traduction : cette règle ramènera toutes les possibilités envisagées dans les cas précédents : par exemple mardi 14 juillet 1789. Le fait de rendre les règles jours et quantième optionnelles permettra également de trouver 14 juillet 1789 et même juillet 89.

Les grammaires peuvent produire du bruit, en d’autres termes des résultats formellement corrects, mais non pertinents pour votre recherche. Ainsi, dans certains cas, la règle année_à_année générera des intervalles du type 78-82 qui renverront à des numéros de pages. Il faut donc toujours vérifier dans le concordancier la nature des résultats obtenus ; si le bruit est trop important, il est plus efficace de reformuler sa règle de grammaire en conséquence. Ici, il suffirait de supprimer l’alternative [0-9][0-9] de la règle année pour ne ramener que des intervalles de quatre chiffres.

Modifié par Gilles Toubiana le 2021/07/09 11:55
Frantext - ATILF (CNRS/UL) - 2018-2024

Logo CNRS   Logo ATILF   Logo Université de Lorraine