Certains traitements de texte incluent une fonctionnalité de correction orthographique. Dans sa forme la plus simple, le correcteur vérifie que tout mot du texte est une forme correcte d'un mot de la langue française. Pour décrire cet algorithme, nous allons commencer par préciser nos hypothèses sur le langage et la machine. La première hypothèse porte sur le choix de représentation du texte. Nous allons considérer ici que le texte est une suite de mots. Sachant que le texte est une suite de 0 et de 1 représentant des nombres qui sont les codes des caractères constitutifs du texte, cette hypothèse suppose que des algorithmes sont capables d'identifier des mots à partir de cette suite. Notez que ces algorithmes sont complexes car un mot ne se définit pas simplement comme une suite de lettres délimitées par des symboles qui ne sont pas des lettres (pensez à des mots comme aujourd'hui ou grand-père). La seconde hypothèse est que nous disposons d'un certain nombre d'instructions de base comme : lire le premier mot, lire le mot suivant, repérer la fin du texte, mémoriser un mot, tester si deux mots sont égaux et souligner un mot.
Avec ces hypothèses, un algorithme de correction orthographique va pouvoir parcourir chaque mot du texte. Mais pour vérifier l'orthographe, il est également indispensable de posséder un dictionnaire des mots corrects. C'est, pour le Français, une ressource constituée d'une liste de tous les mots français avec leurs formes conjuguées et accordées. Elle peut aussi inclure des noms propres, des abréviations, des sigles, ... Avec cette ressource à disposition, nous pouvons proposer l'algorithme suivant :
Correcteur orthographique
1. **en entrée** : un texte
2. lire le premier mot et le mémoriser comme mot courant
3. **tant que** ce n'est pas la fin du texte
4. chercher le mot courant dans le dictionnaire
5. **si** il n'existe pas **alors**
6. souligner le mot courant
7. **fin du si**
8. lire le mot suivant et le mémoriser comme mot courant
9. **fin du tant que**
10. **en sortie** : le texte avec des mots soulignés qui
sont considérés comme mal orthographiés
L'instruction chercher le mot courant dans le dictionnaire ne fait pas partie de nos instructions de base. Il est donc nécessaire d'expliquer à notre machine comment réaliser cette opération. On suppose qu'on dispose d'instructions élémentaires pour lire le premier mot du dictionnaire, lire le mot suivant et repérer la fin du dictionnaire. Nous pouvons alors proposer un algorithme qui recherche un mot en parcourant le dictionnaire un mot après l'autre. L'algorithme renvoie une valeur vraie ou fausse selon que le mot à chercher est dans le dictionnaire ou pas. Ce qui donne l'algorithme naïf suivant :
1. **En entrée** : un mot à chercher
2. lire le premier mot du dictionnaire et le mémoriser comme mot courant
3. **tant que** le mot courant n'est pas le mot cherché et qu'on n'a pas atteint la fin du dictionnaire
4. lire le mot suivant du dictionnaire et le mémoriser comme mot courant
5. **fin du tant que**
6. **en sortie** : **si** le mot courant est le mot cherché **alors** existe **sinon** n'existe pas
En combinant ces deux algorithmes, nous avons un algorithme de correction orthographique.
_Cet algorithme est-il efficace en temps de calcul ? _
Le parcours de tous les mots du texte est obligatoire. Pour chaque mot du texte, il faut faire une recherche dans le dictionnaire, ce qui, avec notre algorithme naïf peut amener à parcourir tous les mots du dictionnaire. Ceci peut amener à un temps de calcul assez long car un dictionnaire contient de l'ordre de plusieurs centaines de milliers de mots et il faut le parcourir pour chaque mot du texte. Peut-on faire mieux ? Oui si vous pensez à la façon dont vous cherchez dans un dictionnaire qui est rangé dans un ordre alphabétique. Il existe des algorithmes rapides de recherche dans un dictionnaire et ces algorithmes sont souvent disponibles dans les langages de programmation. Vous pourrez en savoir plus en suivant un cours qui introduit les méthodes de recherche d'information.
Cet algorithme met-il en évidence toutes les fautes d'orthographe ?
Il souligne et donc considère comme mal orthographiés tous les mots du texte qui n'apparaissent pas dans le dictionnaire. Une erreur possible est de souligner à tort un mot parce que les listes sont incomplètes. Des listes de mots les plus complètes et les plus actuelles possibles corrigent ce type d'erreur. Il est par contre incapable de souligner les fautes d'accord ou de conjugaison comme "la vache bleu" ou "je montres". La méthode pour réaliser ce type de correction est bien différente et nécessite d'autres algorithmes. Une première possibilité serait de doter le correcteur de la capacité d'analyser votre phrase pour répondre aux questions telles que : quel est le sujet du verbe ? Avec qui s'accorde cet adjectif ? Ceci afin de lui permettre de vérifier des règles grammaticales. La difficulté est de réaliser ces analyses car elles nécessitent une grammaire numérisée de la langue et des programmes d'analyse. Souvent ces règles de grammaire numérisées sont incomplètes car c'est encore un sujet de recherche actif en (informatique) linguistique d'être capable d'exprimer toutes les règles grammaticales et d'analyser correctement toutes les phrases. Une seconde possibilité serait d'utiliser des méthodes dites "force brute" qui étendent l'approche par dictionnaire utilisée pour l'orthographe. Au lieu de mémoriser des listes de mots, le dictionnaire mémorise des listes de couples de mots, de triplets de mots voire de phrases complètes. La difficulté, dans ce cas, est d'avoir des listes exhaustives, de mémoriser ces listes, de les mettre à jour et de les interroger très rapidement.
Ceci explique que les correcteurs disponibles dans les applications sont des correcteurs orthographiques simples à base de dictionnaires de mots. Parfois, ils font des corrections liées à des règles grammaticales mais il est difficile de savoir exactement quelles corrections ils sont capables de faire. Par conséquent, en pratique , lorsque vous avez rédigé un texte et souhaitez en vérifier l'orthographe, vous procéderez de la façon suivante :