Accueil > Informatique > Emacs > Outils linguistiques et Emacs

Outils linguistiques et Emacs

samedi 21 novembre 2020, par Vincent

Introduction

Grammalecte est un bon correcteur grammatical et typographique open source dédié à la langue française. Il peut être utilisé sous forme de plugin dans libreoffice ou Mozilla firefox par exemple. Il existe également une interface en ligne de commande et un serveur en python.

Ce correcteur peut être utilisé dans emacs grâce au paquetage flycheck-grammalecte

Pour compléter cet outil, il est possible d’utiliser n’importe quel dictionnaire au format stardict depuis emacs grâce à sdcv

Pré-requis et contexte

-* Debian buster sid
-* emacs 26+ (testé avec emacs 27)
-* straight pour la gestion de paquets d’emacs
-* pyenv installé et fonctionnel voir ce billet avec un environnement appelé default

  • wget, unzip installés

flychek-grammalecte

L’installation se fait en deux temps :

  • l’installation de l’interface en ligne de commande de grammalecte
  • quelques paquetages elisp à charger au démarrage d’emacs

Grammalecte CLI

On commence par récupérer l’archive sur le site de grammalecte puis on installe le programme python dans l’environnement default.

wget https://grammalecte.net/grammalecte/zip/Grammalecte-fr-v1.12.2.zip
unzip Grammalecte-fr-v1.12.2.zip -d grammalecte
cd grammalecte
pyenv activate default
python setup.py install

emacs

En utilisant straight, il suffit de ces quelques lignes pour installer pyenv-mode et flycheck-grammalecte. Les options de flycheck-grammalecte sont décrites ici

(use-package pyenv-mode
  :straight t
  :config

:init
(add-to-list 'exec-path "~/.pyenv/bin")
(add-to-list 'exec-path "~/.pyenv/shims")
(pyenv-mode t)
(pyenv-mode-set  "default")
  )

(use-package flycheck
  :straight t
  :init
  (global-flycheck-mode))

(use-package flycheck-tip
  :straight t
  )

(use-package flycheck-grammalecte
  :straight t
  :bind
   (("C-c D" . flycheck-grammalecte-find-synonyms-at-point))
  :after flycheck
  :config
  (setq flycheck-grammalecte-report-spellcheck nil)
  (setq flycheck-grammalecte-report-grammar t)
  (setq flycheck-grammalecte-report-apos nil)
  (setq flycheck-grammalecte-report-nbsp nil)
  (setq flycheck-grammalecte-report-esp nil)
   (setq flycheck-grammalecte-filters-by-mode
        '((latex-mode
           "(?s)\\\\\\[.*?\\\\\\]"
           "\\\\label{.*?}"
           "\\\\href{.*?}"
           "(?s)\\\\begin{tikzpicture}.*?\\\\end{tikzpicture}"
           "(?s)\\\\begin{align}.*?\\\\end{align}"
           "(?s)\\\\begin{align\\*}.*?\\\\end{align\\*}"
           "(?s)\\\\begin{equation\\*}.*?\\\\end{equation\\*}"
           "(?s)\\\\begin{equation}.*?\\\\end{equation}"
            "(?s)\\\\begin{eqnarray\\*}.*?\\\\end{eqnarray\\*}"
           "(?s)\\\\begin{eqnarray}.*?\\\\end{eqnarray}"
           "(?s)\\$.*?\\$"
           "(?s)\\\\\\(.*?\\\\\\)"
           "\\\\(?:title|(?:sub)*section){([^}]+)}"
           "\\\\\\w+(?:\\[[^]]+\\])?(?:{[^}]*})?"
                                            )
          (org-mode "(?ims)^[ \t]*#\\+begin_src.+#\\+end_src"
              "(?im)^[ \t]*#\\+begin[_:].+$"
              "(?im)^[ \t]*#\\+end[_:].+$"
              "(?m)^[ \t]*(?:DEADLINE|SCHEDULED):.+$"
              "(?m)^\\*+ .*[ \t]*(:[\\w:@]+:)[ \t]*$"
              "(?im)^[ \t]*#\\+(?:caption|description|keywords|(?:sub)?title):"
              "(?im)^[ \t]*#\\+(?!caption|description|keywords|(?:sub)?title)\\w+:.*$")))
  (flycheck-grammalecte-setup)

  )

Lors de la compilation de init.el (Byte-compile and load), emacs demande s’il faut télécharger les données de grammalecte :

bien sûr il faut répondre oui !

La partie concernant flycheck-grammalecte-filters-by-mode, permet de filtrer les parties du texte qui n’ont pas à être vérifiée.

Le paquet définit plusieurs commandes dont :

  • flycheck-grammalecte-find-synonyms-at-point
  • flycheck-grammalecte-correct-define-at-point

La première (mappée sur C-c D) cherche un synonyme dans le dictionnaire électronique des synonymes et la seconde la définition dans le « Trésor de la Langue Française informatisé » disponible sur le site web du « Centre National de Ressources Textuelles et Lexicales »

La partie qui suit explique comment installer et utiliser dans emacs des dictionnaires lorsque l’on travaille hors ligne.

sdcv

Nous allons installer deux dictionnaires le Littré et la 8ème édition du dictionnaire de l’Académie Française.

Le dictionnaire Littré est empaqueté dans Debian :

apt-get install stardict sdcv stardict-xmlittre -y

Nous récupérons l’archive du dictionnaire de l’Académie Française sur le site polyglotte

wget http://download.tuxfamily.org/polyglotte/dicos/dict/francais%2Fstardict-academie-francaise-1935_38.xdxf-2.4.2.zip
mkdir -p ~/.stardict/dic
unzip francais\%2Fstardict-academie-francaise-1935_38.xdxf-2.4.2.zip -d ~/.stardict/dic

Normalement, si tout c’est bien déroulé la commande

sdcv -l

Renvoie la liste des dictionnaires installés.

Enfin, configurons emacs grâce à ce paquet elisp.

;; dictionnaire
(use-package sdcv
  :straight t
  :bind
    (("C-c d" . sdcv-search-pointer))
  :config
    (setq sdcv-dictionary-data-dir "~/.stardic/dic")
   (setq sdcv-dictionary-simple-list    ;setup dictionary list for simple search
       '("XMLittre"
         ))
 (setq sdcv-dictionary-complete-list     ;setup dictionary list for complete search
       '(
         "XMLittre"
         "Dictionnaire de l’Académie Française, 8ème édition (1935)."
         ))
)

La commande sdcv-search-pointer est mappée sur C-c d, ainsi à chaque activation de ce raccourci clavier les définitions du mot le plus près du pointeur sont cherchées et le cas échéant affichées dans un tampon nommé *SDCV*.

Conclusion

Ci-joint un fichier init.el qui reprend les différents éléments de configuration développés ici.

configuration d’emacs pour les outils linguistiques

sdcv et flycheck-grammalecte définissent d’autres commandes pour par exemple conjuger un verbe, afficher la définition dans une fenêtre pop-up ,etc. (cf. la documentation de chacun de ces paquets).

Par exemple

M-x flycheck-grammalecte-conjugate-verb
flycheck-grammalecte-conjugate-verb

Enfin, un correcteur d’orthographe n’est pas infaillible (il y a beaucoup de faux positifs) rien ne remplace une relecture attentive !!