Un outil pour la conjugaison

Retour accueil


Cet outil ne dispose pas encore d’un nom. Si vous avez une idée je suis preneur.

Si vous êtes comme moi vous avez du mal avec les terminaisons des verbes en français. Est-ce qu’il y a un s silencieux, où est l’accent circonflexe, est-ce que ça prend un ou deux l ? Puisque je n’ai pas de Bescherelle sous la main (peut-être devrais-je), je cherche “[verbe] conjugaison” dans un moteur de recherche, je clique généralement sur le premier résultat, je refuse les cookies, la newsletter, je cherche le temps et la personne que je veux avec les yeux. C’est assez long et fastidieux, le site le mieux référencé n’est pas toujours le même et je dois soit chercher celui que je préfère dans la liste des résultats ou m’adapter à une interface différente à chaque fois. Bref, c’est compliqué.

Des interfaces alternatives et leurs usages

Quelqu’un du projet Bitreich avait pour projet d’interfacer tout un tas de site web. L’idée est de pouvoir obtenir un service similaire voir équivalent mais à travers des interfaces plus sobres, plus respectueuses de la vie privée, plus performantes, plus accessibles. Un exemple est le site idiotbox qui interface la recherche youtube.

J’ai conscience qu’avec une interface pour alléger et simplifier le cas d’usage décrit précédemment on ne s’attaque ni à un symbole du capitalisme de surveillance ni à un grand émetteur de carbone. Cela dit l’implémentation est relativement simple et m’est personnellement utile. Cela en fait, j’espère, un bon exemple pour écrire un article.

Interface web

Il n’y en a pas.

Interface cli via internet

L’outil est disponible sur le port 2222 du serveur bebou.netlib.re. Si vous vous y connectez avec netcat en faisant nc bebou.netlib.re 2222 vous obtiendrez un prompt depuis lequel vous pouvez lancer la commande conjuguer ou c :

nc bebou.netlib.re 2222
help ou h pour obtenir de l'aide
c manger
Indicatif     Présent           je mange
Indicatif     Présent           tu manges
Indicatif     Présent           il mange
Indicatif     Présent           nous mangeons

Plus de détails dans cet article.

En local

Pour ne pas dépendre de la disponibilité du service ou le modifier à votre sauce il pourrait être souhaitable d’avoir le même usage via en local. Pour cela vous pouvez télécharger les sources qui permettent de faire fonctionner l’interface web

git clone git://bebou.netlib.re/conjugaison-light

Les fichiers contentant les terminaisons sont disponibles dans cette archive (2,2Mo)1.

L’usage de l’outil est détaillé dans le README du projet.

Après avoir modifier le script cgi pour y renseigner l’endroit où se trouvent les fichiers des terminaisons nous pouvons, dans une interface en ligne de commande, écrire :

./cgi [verbe] [mode] [temps] [personne]

et ne récupérer que l’information que l’on souhaite. Aucun clique inutile, pas besoin de scanner un trop plein d’information. Par exemple :

cgi prendre subjonctif présent je
Subjonctif Présent que je prenne

Fonctionnement

Le site conjugaisonfrancaise a été utilisé pour récupérer les données. J’ai scrapé la totalité des verbes. Le format qui en résulte est sous la forme :

Prendre
Indicatif
Présent
je pr{ends}
tu pr{ends}
il pr{end}
...

Ce format a le mérite d’être assez peu redondant. Pour pouvoir le filtrer plus facilement et obtenir un affichage plus lisible le script cgi inclu une fonction qui le tabule :

Indicatif   Présent je pr{ends}
Indicatif   Présent tu pr{ends}
Indicatif   Présent il pr{end}
...

Ce peut être facilement filtré si l’on précise les valeur des champs comme vu précédemment avec les interfaces :

Subjonctif  Présent que nous pr{enions}

Dans la console il est possible d’ajouter une étape pour colorier la terminaison. Chacune de ces étapes est le résultat de l’ingestion de l’étape précédente par un nouveau script. L’outil est donc assez modulaire si vous avez les sources. Vous pouvez ne pas filtrer, conserver la version non tabulée ou faire votre propre script de mise en page.

Sobriété numérique

La taille des pages et la bande passante

Les pages du site que l’on a choisi sont relativement petites pour les standards du web moderne. Elles vont de 150Ko à 200Ko. Le premier format de donnée que l’on génère avec nos scripts pèse entre 1,6Ko et 2,5Ko. Nous sommes donc sur une diminution de la quantité de donnée d’un facteur 100. Le format tabulé tourne autour du double ou du quadruple entre 3,5Ko et 4Ko. Finalement, le format filtré peut descendre jusqu’à quelques octets selon la finesse de la recherche. Si l’on veut servir les données en HTML cela rajoutera environ 1Ko sur un retour non filtré. Pour la console les séquences d’échappement pour colorier les terminaisons ajouteront 1Ko également.

La totalité de la base de donnée stockées sous forme de texte au format précédemment décrit comprend 7370 fichiers (verbes), 935991 lignes pour un total de 16Mo. Sa forme compressée dans un tarball avec gzip prend 2,2Mo. Compressée la totalité des données de ce site prennent donc la place de 10/15 pages HTML de conjugaisonfrancaise.com. Autrement dit en téléchargeant la totalité de la base en local on amorti notre téléchargement en max 15 requêtes.

A noter qu’il est possible de faire beaucoup mieux en utilisant l’idée de verbes “modèles”. Il suffirait de stockers ces modèles et d’appliquer leurs terminaisons aux radicaux des verbes demandés. Cela dit du développement serait nécessaire. Cette approche pourrait être pertinente dans ces contextes où le stockage est extrêmement contraint et les 16Mo de notre base excessifs.

Soutenabilité et maintenance

Je trouve ce point plus intéressant que les calculs comptables d’octets. Je ne vais pas rentrer dans les détails ici, je liste donc simplement les points qui me semble pertinents pour cette discussion :

En l’occurence le script cgi requiert :

Sans me lancer dedans j’imagine aisément que ma solution performe bien mieux sur l’ensemble des critères que les sites de conjugaison habituels. A voir maintenant ce que cela implique pour un exemple aussi trivial.


  1. tar xvzf verbes.tar.gz créera un dossier verbes avec tous les fichiers dedans. Attention ça fait 50Mo et 7370 fichiers.