Journal Améliorer la correction orthographique et grammaticale sous Emacs

Posté par  . Licence CC By‑SA.
15
19
août
2015

Sommaire

Comme je suis en train de continuer la traduction de la seconde édition de Progit et qu'en même temps, des lecteurs me remontent de nombreuses fautes dans ce qui existe déjà, il est grand temps de mettre en route les aides à la rédaction sous mon éditeur favori.

Correction orthographique

Sous Emacs, la solution la plus directe pour la correction et d'utiliser M-x ispell, en ayant au préalable correctement paramétré le module, c'est-à-dire

  • en ayant installé les paquets hunspell et hunspell-fr
  • en ayant paramétré le module ispell pour utiliser hunspell

Pour éliminer les sections inintéressantes de la vérification dans le cas d'un document asciidoc, on peut ajouter au ~/.emacs

(add-to-list 'ispell-skip-region-alist
             '("^\\[source" . "^----\n\n") ;; source exerpts
         '("\\[\\[" . "\\]\\]")        ;; links
         )

hunspell a l'avantage de connaître comment décliner les formes nominales ou verbales. Mais il ne connaît pas tout. Pour Git, par exemple, on utilise à tour de bras les termes commit, rebaser, etc qui ne sont pas dans le dictionnaire par défaut. Et justement, quand on veut ajouter ces nouveaux mots on ne veut sûrement pas avoir à en saisir toutes les formes.

C'est là où hunspell dans emacs offre vraiment la possibilité de renseigner ces nouveaux mots sous forme intelligente. Supposons que nous ayons saisi le texte :

Dans Git, il y a deux façons d'intégrer les commits d'une branche dans une autre : en fusionnant (`merge`) et en rebasant (`rebase`).

Le lancement de M-x ispell bloque en premier sur Git. C'est un mot à ajouter au dictionnaire. Dans les propositions, on peut appuyer sur i, pour simplement insérer le mot tel quel dans mon dictionnaire personnel.

Ensuite, il bloque sur commits, qu'on pourrait tout à fait intégrer comme tel, mais pour lequel on a intérêt à ajouter la forme au singulier. Qu'à cela ne tienne ! Au lieu de presser i, pressons m, ce qui permet de saisir la forme sous laquelle on veut entrer le nouveau mot dans le dictionnaire. Ici, c'est avec hunspell qu'il faut s'arranger. Dans le dictionnaire personnel, on peut saisir une entrée en utilisant la forme <mot racine>\<mot modèle du dictionnaire>.

Dans hunspell tel que renseigné par dicollecte,

  • les noms communs sont intégrés sous leur forme féminine singulière si elle existe,
  • sous leur forme masculin singulier sinon,
  • les verbes sont intégrés sous la forme infinitive.

Ici, on a donc intérêt à saisir commit/stage, ce qui signifie que le mot commit peut être décliné comme stage, donc au pluriel commits comme dans notre texte. On fait d'une pierre deux coups pour le vocabulaire. En plus, si on demande à hunspell d'analyser ce mot, il sera correctement étiqueté comme un nom masculin pluriel, ce qui peut être utilisé pour une vérification grammaticale.

Un peu plus loin, hunspell bloque sur merge, et là, on ne veut pas le faire entrer dans le dictionnaire, mais juste l'ignorer. On appuie sur si on veut l'ignorer juste cette fois, ou sur a, pour l'autoriser pour tout le reste de la session de correction.

Enfin, on s'arrête sur rebasant, et comme on a pigé le truc, on appuie sur m et on propose rebaser/recaser, ce qui autorise la forme participe présent en cours. Cette correction autorise de même la forme rebase en fin de texte, ainsi que toutes les autres formes conjuguées

Un petit hunspell -m sur le fichier montre bien comment les mots ont été intégrés :

—
Git  st:Git
—
commits  st:commit is:pl
—
rebasant  st:rebaser po:ppre

Correction grammaticale

La correction orthographique, c'est bien, mais ça ne corrige pas les erreurs d'accord ou d'homonymes. Pour cela, il faut passer à la version correction grammaticale.

Sous Emacs, je n'ai pas trouvé beaucoup de choix. Il y a LanguageTool qu'on peut coupler à langtool.el.

(add-to-list 'load-path "~/.emacs.d/lisp/")
(require 'langtool)
(setq langtool-language-tool-jar "/chemin/vers/LanguageTool-3.0/languagetool-commandline.jar")
(setq langtool-default-language "fr")
(setq langtool-java-bin "/usr/bin/java")
(setq langtool-mother-tongue "fr")

Maintenant on peut démarrer la session de correction avec M-x langtool-check. LanguageTool analyse le buffer et surligne les erreurs qu'il trouve. Même vocabulaire, mêmes effets. Les mots inconnus sont marqués comme faute de frappe.

L'ennui est qu'on ne peut pas tirer parti du travail déjà réalisé pour hunspell. Il faut tout reprendre du début, et LanguageTool ne simplifie pas la vie.

Pour faire accepter et correctement étiqueter les nouveaux mots, il faut à la fois

  • les ajouter dans le vocabulaire connu. À la différence de hunspell, il faut fournir toutes les formes des mots qu'on entre. Ça se passe, dans le fichier LanguageTool-3.0/org/languagetool/resource/fr/hunspell/spelling.txt : # Words that extend the spell checker. See ignore.txt for words that should be # completely ignored (i.e. not used to create suggestions). commit commits Git rebase rebasage rebaser rebasons rebasez rebasé rebasés rebasées rebasée rebasant
  • Ensuite, il faut leur donner une signification grammaticale, en renseignant les formes grammaticales dans LanguageTool-3.0/org/languagetool/resource/fr/added.txt # A part-of-speech dictionary that's used additionally to the binary dictionary (*.dict) # File Encoding: UTF-8 # Format: three tab-separated fields: fullform baseform postags Git Git Z Perforce Perforce Z e sp commit commit N m s commits commit N m p rebasage rebasage N m s rebasages rebasage N m p rebasant rebaser V ppr rebase rebaser V ind pres 1 s rebase rebaser V ind pres 3 s rebaser rebaser V inf rebasons rebaser V ind pres 1 p rebasons rebaser V imp pres 1 p rebasez rebaser V imp pres 2 p rebasez rebaser V ind pres 2 p

Les formes grammaticales sont assez explicites. Pour référence, on les retrouve dans LanguageTool-3.0/org/languagetool/resource/fr/tagset.txt

C'est clairement plus lourd que hunspell (éditer d'autres fichiers à côté) et c'est dommage que l'effort déjà consenti ne puisse pas repayer. Les gains sont aussi plus importants, surtout pour les têtes-en-l'air.

  • # Pas de grammaire donc

    Posté par  (site web personnel) . Évalué à 5.

    Personnellement, vu comment c'est galère, je considère que la grammaire n'est pas corrigée sous Emacs.

    aspell ou hunspell sont bien, mais je n'ajoute jamais de nouveaux mots : je me contente de les ignorer.

    Par contre, quand tu changes de dictionnaire, c'est vraiment pas bien fait, car tu dois choisir entre :

    • français7 ;
    • français-tex ;
    • français ;
    • fr_LU ;
    • fr_CA ;
    • fr_CH ;
    • fr_BE ;
    • fr_FR.

    Et avec aspell, c'est pire :

    • français-40 ;
    • français-60 ;
    • français-80 ;
    • français-lrg ;
    • français-med ;
    • français-sml ;
    • français ;
    • français7 ;
    • français-tex ;
    • french* (les mêmes en anglais) ;
    • fr_* (les initiales de pays pour chaque valeur ci-dessus aussi).

    Bref, c'est mal foutu, et on y comprends rien (pour moi, on choisit entre français-moderne, français-classique ou français-réforme, mais non, pas sous Emacs…)

    • [^] # Re: Pas de grammaire donc

      Posté par  . Évalué à -8.

      En même temps, emacs c'est pas vraiment un traîtement de texte, j'ai du mal à voir l'utilité d'un correcteur orthographique et grammatical dans un outil qui n'est pas vraiment prévu pour créer des documents, à la base.

      • [^] # Re: Pas de grammaire donc

        Posté par  . Évalué à 3.

        C'est pas trolldi aujourd'hui ?

        Sérieusement, pour saisir du texte au kilomètre (mode traitement de texte) en LaTeX, ou tout système de markup, je ne vois pas mieux qu'un éditeur de texte bien configuré.

      • [^] # Re: Pas de grammaire donc

        Posté par  . Évalué à 1.

        Emacs est un éditeur de texte qui ne peut pas traiter du texte ?

        HEIN ?!

        "Quand certains râlent contre systemd, d'autres s'attaquent aux vrais problèmes." (merci Sinma !)

        • [^] # Re: Pas de grammaire donc

          Posté par  . Évalué à 2.

          tu sais ce qu'on dit emacs est un bon OS, il ne lui manque qu'un bon éditeur de texte ;)

          Mais voila… c'est fait on a le correcteur grammatical; sur quoi on va troller maintenant…

          Il ne faut pas décorner les boeufs avant d'avoir semé le vent

      • [^] # Re: Pas de grammaire donc

        Posté par  . Évalué à 2.

        Il n'est pas plus mal adapté que d'autres; et certains de ses outils sont bien pratique, notamment la pseudo complétion, la complétion via ispell, le bookmark, le split de buffer, l'absence de marges monstrueuses, pas de bandeau inutile… Bref pour taper du texte il répond amplement au besoin.

        La mise en forme est une autre histoire, mais tu peux toujours ouvrir le fichier dans un Office quelconque, ou faire du latex.

        De plus, il peut arriver que tu ais des zones de textes (si tu fais du HTML), ou sinon lorsque tu codes, ne pas faire de grosse fautes d'accords dans les messages de ton appli, qui sont dans des fichier séparés; Va lancer un *Office sur ton fichier messagesFR_fr.dic, tu risques d'avoir des surprises (conversion en UTF-8, ou en iso, fin de lignes, caractère non imprimables mais qui va foutre la zone…

        Il ne faut pas décorner les boeufs avant d'avoir semé le vent

      • [^] # Re: Pas de grammaire donc

        Posté par  . Évalué à 3.

        Pourtant c'est bien utile quand tu édite du LaTeX, du markdown (voir du HTML), que tu utilise org-mod voir quand tu écris tes mails,… Tu peut aussi t'en servir pour éditer des fichiers de traduction par exemple.

        Tous les contenus que j'écris ici sont sous licence CC0 (j'abandonne autant que possible mes droits d'auteur sur mes écrits)

        • [^] # Re: Pas de grammaire donc

          Posté par  . Évalué à 1.

          Certes, mais dans ces cas-là j'imagine que le markup vient un peu perturber le fonctionnement d'un correcteur orthographique ou grammatical, sauf à les customiser lourdement.

          • [^] # Re: Pas de grammaire donc

            Posté par  . Évalué à 4.

            Non emacs sait présenter au dictionnaire uniquement le texte sans les balises.

            Tous les contenus que j'écris ici sont sous licence CC0 (j'abandonne autant que possible mes droits d'auteur sur mes écrits)

          • [^] # Re: Pas de grammaire donc

            Posté par  . Évalué à 1.

            Pour l'orthographe, comme noté dans le journal, on peut aussi indiquer à emacs les sections de texte qu'il ne faut pas passer au correcteur. Comme c'est une liste de regexp qui peut matcher sur plusieurs lignes, c'est suffisamment puissant pour la plupart des markup.

            Pour la grammaire, c'est un peu ce qui manque à langtool, parce qu'il fait beaucoup de faux positifs sur les blocs de code.

  • # flyspell

    Posté par  (site web personnel) . Évalué à 3.

    Pour l'orthographe j'utilise flyspell qui met les mots mal orthographiés en évidence au fur et à mesure de la frappe. Je ne sais pas si on peu lui faire utiliser hunspell pour profiter des déclinaisons ; quelqu'un a-t-il déjà essayé ?

    • [^] # Re: flyspell

      Posté par  . Évalué à 2.

      Si tu utilises hunspell pour la correction de bases, flyspell l'utilises aussi ;)

      Il ne faut pas décorner les boeufs avant d'avoir semé le vent

    • [^] # Re: flyspell

      Posté par  . Évalué à 2.

      j'ajouterai que pour profiter de l'utf-8 j'ai du ajouter

      (eval-after-load "ispell"
        '(progn (defun ispell-get-coding-system () 'utf-8)))

      dans mon .emacs, si des gens ont un truc plus end-user (genre par les menus de customisation), je suis preneur.

      Il ne faut pas décorner les boeufs avant d'avoir semé le vent

      • [^] # Re: flyspell

        Posté par  . Évalué à 1.

        Bizarre.

        Cela fait bien longtemps que j'ai retiré toutes les configurations UTF-8 de mon .emacs. C'est fait par défaut.

        • [^] # Re: flyspell

          Posté par  . Évalué à 3.

          j'ai, au boulot, une vieille distrib, (centOS 6)

          Il ne faut pas décorner les boeufs avant d'avoir semé le vent

          • [^] # Re: flyspell

            Posté par  . Évalué à 3.

            Sur quasiment toutes les machines auxquelles j'ai accès, je recompile emacs moi même.
            Cela prend un petit quart d'heure et cela m'assure que mon .emacs fonctionnera partout.

            • [^] # Re: flyspell

              Posté par  . Évalué à 0.

              Tu peux expliquer quelles avantages tu tires à recompiler ton propre emacs ?
              Qu'est ce que tu as "en plus" ?

              • [^] # Re: flyspell

                Posté par  (site web personnel) . Évalué à 2.

                Qu'est ce que tu as "en plus" ?

                Sûrement que la version installée est vieille, et que sa configuration marche pour une version pas trop ancienne. Ici, les version sont de 2008 sur nos machines, ce qui n'est pas récent du tout.

  • # Futur…

    Posté par  (site web personnel) . Évalué à 2.

    Je viens de me rappeler la campagne de financement qui avait réussi en mai à propos de Grammalecte, et l'une des entrée est une application serveur !

    Ça pourrait sûrement s'interfacer avec Gnu/Emacs facilement, et ainsi fournir une correction grammaticale pas trop mauvaise.

    D'ailleurs, on a plus de nouvelles quant au projet. On sait ce qu'il se passe du côté de chez Grammalecte et de l'état d'avancement du projet ?

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.