La route a été plus longue que prévu, mais voici enfin Grammalecte pour Firefox.

https://addons.mozilla.org/fr/firefox/addon/grammalecte-fr/

Pour la mise à jour la plus récente, allez ici :

https://addons.mozilla.org/fr/firefox/addon/grammalecte-fr/versions/

(Je voulais attendre que Mozilla ait vérifié l’extension avant de publier l’annonce, mais comme certains m’ont devancé, je suis le mouvement.)

Pour l’instant, attendu que Mozilla n’a toujours pas implémenté l’interface de programmation qui permettra de souligner en bleu les erreurs directement dans les zones de texte, la correction se fait dans un panneau annexe. Mais dès que cette interface sera disponible, c’est bien sûr ainsi que les corrections se feront.

A priori, Grammalecte pour Firefox peut et doit signaler les mêmes erreurs que la version pour LibreOffice. Les tests de qualité confirment ce point, mais ces tests ne sont pas encore complets. Il est donc possible qu’il y ait encore quelques divergences de comportement entre les deux correcteurs.

Implémenter la version en JavaScript du correcteur n’a pas toujours été facile, d’où mon retard, ça a même été parfois assez cauchemardesque, mais l’hydre semble à peu près sous contrôle à présent.

Il reste sans doute encore pas mal de rugosités à polir. Mais ici la question est plus culturelle que technique. Avant l’existence de l’extension pour Firefox, avec le correcteur, je faisais surtout des tests avec des documents plutôt littéraires et pas trop mal écrits. Mais le Web est vaste et chaotique: le type de textes qu’on y trouve est extrêmement variable et ceux-ci présentent de nombreux cas de figure différents. Ces derniers jours, j’ai fait passer au correcteur des centaines de textes tirés de blogs et de journaux. J’ai corrigé des tas de faux positifs et j’ai ajouté des centaines de mots dans le dictionnaire. Le Web fourmille de sigles, de néologismes, d’anglicismes, de termes et d’écritures techniques plus ou moins cohérents. Pour éviter que le correcteur ne voit trop rouge, je vais devoir assouplir l’éligibilité de certains mots dans le dictionnaire. J’ai aussi désactivé le signalement des sigles non reconnus, revu la tokenisation pour éviter le signalement des hashtags et des hyperliens. La version 0.5.4, résultat de ces nombreux tests, diffère donc déjà pas mal de la version 0.5.1. (Je vous conseille donc la version 0.5.4, même si Mozilla n’a pas encore vérifié le code.)

Bien sûr, le correcteur a aussi été amélioré. De nouvelles règles de contrôle ont été implémentées, le moteur de suggestion est plus efficace, le désambiguïsateur aide à s’y retrouver et il y a moins de faux positifs.

Propos techniques (les non-geeks peuvent passer les paragraphes en italique)

Pour ceux que la mécanique intéresse, je suis passé d’un moteur multi-passes avec des règles mono-action à un moteur bi-passes avec des règles multi-actions. Mais c’est un point dont je parlerai quand j’aurai le temps d’écrire un billet récapitulatif du développement fait.

Le correcteur grammatical en JavaScript est environ 12 fois plus lent que celui en Python si on l’exécute dans le thread principal de Firefox (ce qui m’a donné des sueurs froides), mais environ 33 % plus rapide que celui en Python si on l’exécute dans un thread séparé (ce qui fut un soulagement). Donc, tout est exécuté dans un thread séparé de manière asynchrone (environ 20 fois plus rapide que dans le thread principal… ne me demandez pas pourquoi…).

Le moteur d’expressions régulières de JavaScript est très déficient (restons poli), nettement en retrait par rapport à celui de Python. Il manque les assertions “lookbehind”, un support commode de l’Unicode (lamentable) et surtout il n’y a rien pour récupérer les index de position des groupes (ça m’avait échappé quand j’ai lancé la campagne de financement), ce qui a été problématique. Il a donc fallu suppléer ces déficiences (et disons même pas mal magouiller). Ce qui m’a fait perdre pas mal de temps et rendu le processus de build assez délicat (disons même bordélique), mais ça ne concerne que le dév après tout.

J’ai décidé d’utiliser autant que possible toutes les nouveautés syntaxiques d’ES6 : let, const, les classes, les générateurs, Map, Set, les fonctions fléchées, for … of, la déstructuration, les paramètres par défaut, les paramètres du reste, les gabarits de chaînes de caractères, les array comprehensions (ES7), les promesses, à peu près tout ce qui se fait en ES6. Sauf les tableaux typés, qui se sont révélés plus lents qu’un simple Array, et import/export, pas encore implémentés dans Firefox.

Le serveur

J’en ai un peu marre de JavaScript en ce moment. Alors d’ici quelques jours, je sors une version du serveur. Comme je l’ai déjà dit, désimbriquer Grammalecte de LibreOffice, c’est avoir accompli la plus grande partie du boulot pour le serveur. Donc, il n’y a donc a priori plus grand-chose à faire.

Je vais le baser sur Bottle (http://bottlepy.org/docs/0.12/index.html) qui présente l’avantage de tenir dans un seul fichier, qu’il suffit d’inclure dans Grammalecte. Le correcteur n’aura ainsi besoin d’aucune dépendance.

Thunderbird

Je n’ai pas encore commencé le travail sur ce point. En théorie, puisque Thunderbird intègre le moteur de JavaScript de Firefox, le cœur du correcteur n’a pas à être modifié. En revanche, tout ce qui concerne l’interface est probablement à revoir. Comme Thunderbird est abandonné par Mozilla et survit entre deux eaux (il est probable que Thunderbird passe sous une autre bannière: celle de TDF peut-être), sa documentation est en pleine décrépitude, le désordre règne, je ne sais pas encore ce qui est faisable, et j’ignore combien de temps ça va me prendre.

Les contreparties

La liste de ces mots inclus dans les dictionnaires est consultable par ce lien. Merci de me signaler les éventuelles erreurs et les oublis.

Bon nombre de ces mots (beaucoup des noms communs et quelques-uns des noms propres) sont éligibles pour être intégrés dans le dictionnaire commun. Ils y seront donc transférés dans quelque temps, au fur et à mesure, quand j’aurai le temps de faire les vérifications nécessaires. Voici par exemple certains des noms propres qui sont éligibles : Clothilde, Andrei, Joakim, Léopoldine, Euphrasie, Mouhammad, Fantine, Florestan, Florie, Terence, Hypnos, etc.

À noter que certains mots proposés étaient déjà présents dans le dictionnaire. En voici la liste : fada, Arthur, Marilou, jardin, vélo, grammatologie, Léopold, Héloïse, héraldique, Terry, Marcia, Narcisse, Lionel, Théo, Florence, plussoyer, Freud, schmilblick, Richard, Val d'Isère, Fernando, Grenoble, Buenos Aires, bépo, nuoc mam (sous la forme nuoc-mâm), yiddish, apostolicité, adamantin, Occitanie, occitant (mais il n’y a pas de “t” final), Gascogne, gascon-ne-s, OK, gouterreau (mais ça s’écrit avec deux “t”), email (sous la forme e-mail), escagasser, esquicher, esclaffer, emboucaner, µmole (sous la forme µmol), Min (le symbole des minutes s’écrit min, sans majuscule).

Certains des mots proposés n’ont pas été ajoutés au dictionnaire et certains ne le seront probablement pas (la décision est en suspens). En voici la liste : Southern blot, Northern blot, Zea Invent, Apex Agri, Agro Bio, The Document Foundation, Apache Software Foundation, Free Software Foundation, Golden Show, Lovely Rita, Mix Bizarre, Scred TV, Las Gastios, Hero Corp, Texas Instruments, Standard de Liège, Creative Commons, Madame&Services.

La raison, c’est que le dictionnaire ne peut accepter que des mots entiers (pas d’espace et pas de caractères spéciaux comme “&”). Il faudrait donc ajouter ces mots séparément. Mais certains d’entre eux sont susceptibles de créer des confusions (Creative, The, etc.). Parfois, ces mots existent déjà dans le dictionnaire (Rita, apache, software, document, bizarre, mix, golden, show, etc.). Bon, ça reste encore à voir. N’hésitez pas à m’écrire si je tarde…