LanguageTool est un correcteur libre de style et de grammaire, développé
initialement pour l'anglais par Daniel Naber et adapté par la suite à
d'autres langues comme l'allemand, le hongrois ou encore le polonais.



Il était à l'origine programmé en python mais a été entièrement réécrit en
java (pour un meilleur support du format XML utilisé notamment pour les
fichiers de règles d'erreurs, comme nous allons le voir pas la suite).


Il est composé de plusieurs modules qui effectuent successivement :

  1. la segmentation du texte à vérifier en phrases
  2. la segmentation des phrases en mots
  3. l'étiquetage morpho-syntaxique des mots : les mots ambigus reçoivent
    plusieurs étiquettes correspondant aux diverses catégories
    morpho-syntaxiques auxquelles ils peuvent appartenir ainsi qu'aux
    différents traits qu'ils peuvent avoir dans une catégorie, et ils les
    conservent toutes car aucune désambiguïsation n'est effectuée. Ainsi
    bête aura les étiquettes <nom féminin singulier>, <adjectif
    masculin singulier> et <adjectif féminin singulier>.
  4. la détection des erreurs de grammaire : elle s'effectue par comparaison
    de chaque segment de phrase avec une base de règles décrivant des erreurs.
    Si un segment correspond à une règle, alors une erreur est détectée.






Les règles d'erreurs sont formalisées en XML et sont composées de plusieurs
éléments :

  • id et name : respectivement l'identifiant et le nom de la règle
  • pattern : modèle de l'erreur
  • message : description de la règle à l'usage de l'utilisateur
  • example  : exemple d'énoncé correspondant à la faute commise. Il y
    a en général au moins deux exemples : un exemple d'énoncé correct et un
    exemple d'énoncé incorrect.


L'élément pattern est le plus important. C'est lui qui décrit le modèle de
l'erreur et avec lui que les phrases sont comparées lors de la détection. Le
modèle se présente généralement sous la forme d'expression(s)
régulière(s).



Voici un exemple de règle en français :


<rule name="ma (m'a)"
id
="MA">

    <pattern mark_to="-1">

      
 <token>ma</token>

        <token postag="V."
postag_regexp="yes"/>

    </pattern>

    <message>Voulez vous
écrire
<suggestion>m'a</suggestion>?</message>

    <example type="incorrect">Il
<marker>ma</marker>répondu.</example>

    <example type="correct">Il
<marker>m'a</marker>répondu.</example>

</rule>


Cette règle détecte une confusion dans l'utilisation des homophones
m'a  et ma. Si le texte à vérifier contient ma
suivi d'un verbe (V), suivi de n'importe quel mot (.
), alors
il y a une erreur.

(Post originally written by Agnes Souque on the old Nuxeo blogs.)