Blog ENI : Toute la veille numérique !
Accès illimité 24h/24 à tous nos livres & vidéos ! 
Découvrez la Bibliothèque Numérique ENI. Cliquez ici
Accès illimité 24h/24 à tous nos livres & vidéos ! 
Découvrez la Bibliothèque Numérique ENI. Cliquez ici

Correction orthographique/syntaxique et pipelines

Introduction

1. Correction orthographique et syntaxique

La correction d’erreurs orthographiques et syntaxiques en traitement automatique du langage naturel (TALN) représente un processus essentiel visant à améliorer la qualité et la compréhensibilité des données textuelles. L’objectif principal est de rectifier les fautes d’orthographe et les erreurs grammaticales dans un texte, augmentant ainsi la précision de l’analyse linguistique automatisée. Cette pratique trouve son utilité dans diverses situations où une communication textuelle claire et correcte est importante, par exemple pour la correction et la suggestion automatique dans l’échange de messages courts (SMS), ou comme fonctionnalité d’un logiciel de traitement de texte.

La correction orthographique dans le cadre du NLP implique l’identification et la rectification des mots mal orthographiés dans un texte. Les techniques de correction orthographique vont au-delà de la simple vérification des erreurs évidentes, en tenant compte du contexte linguistique pour suggérer des corrections plus précises. Ceci est particulièrement utile dans les applications NLP telles que les moteurs de recherche, les systèmes de recommandation et les assistants virtuels.

La correction syntaxique concerne la rectification des erreurs grammaticales et structurelles...

Première approche de la correction orthographique

1. SpellChecker

Une bibliothèque particulièrement intéressante pour la correction en NLP, en termes de spécialisation et d’efficacité, est SpellChecker. Ce module est installable avec l’outil pip. Vous trouverez la page de documentation du module à l’adresse https://pypi.org/project/pyspellchecker/.

2. Exemple avec SpellChecker/NLTK

On cherche à corriger automatiquement les erreurs d’orthographe des mots de la liste suivante :

"caffé byciclette militère orenge solucion aindustryel consomation volontères phrontière" 

Nous allons utiliser NLTK uniquement pour la tokenisation même si, dans cet exemple, elle n’est pas spécialement nécessaire.

On utilise SpellChecker, en précisant uniquement la langue source (ici le français).

Voici le code Python utilisé :

import nltk 
from nltk.tokenize import word_tokenize 
from nltk.corpus import stopwords 
from nltk import RegexpParser 
from spellchecker import SpellChecker 
 
 
def spell_check_french(text): 
    # Charger le correcteur orthographique 
    spell = SpellChecker(language='fr')  # Specify the language 
 
    # Tokeniser le texte 
    tokens = word_tokenize(text) ...

Notion de pipeline dans spaCy

1. Présentation

Cette disposition du pipeline en spaCy permet de configurer la séquence souhaitée, sachant que le pipeline spaCy n’est pas vide par défaut, comme nous le verrons dans l’exemple qui suit.

2. Composantes du pipeline

a. Comment connaître le contenu par défaut du pipeline ?

import spacy 
 
# Charger le modèle spaCy en anglais 
nlp = spacy.load("en_core_web_sm", exclude=["lookups"]) 
 
 
# Afficher les composants actuels  
print("Composants actuels du pipeline : ", nlp.pipe_names) 

On obtient :

Composants actuels du pipeline : ['tok2vec', 'tagger', 'parser', 
'attribute_ruler', 'lemmatizer', 'ner'] 

À chaque composant listé correspond un traitement de type NLP.

b. Clés principales utilisables dans le pipeline

Détaillons les clés principales éligibles au pipeline :

  • Tokenizer (’tok2vec’) : il s’agit du composant responsable de la segmentation du texte en tokens (mots ou sous-unités) pour le traitement ultérieur.

  • Part-of-Speech Tagger (’tagger’) : il attribue des parties du discours (noms, verbes, adjectifs, etc.) à chaque token du texte.

  • Dependency Parser (’parser’) : il analyse la structure grammaticale du texte...

Correction orthographique et syntaxique avec spaCy

1. Contextual Spell Check

Nous allons utiliser un module dédié à la problématique de la correction, conçu de manière à être spécialement utilisé avec spaCy : contextualSpellCheck.

Vous trouverez la page de documentation du module à l’adresse : https://pypi.org/project/contextualSpellCheck/

La page dans la documentation spaCy se trouve ici https://spacy.io/universe/project/contextualSpellCheck.

2. Utilisation avec pipeline

Dans l’hypothèse de l’utilisation du pipeline, on peut facilement utiliser ce code, très court, et intégrer la correction dans ledit pipeline :

import contextualSpellCheck 
import spacy 
nlp = spacy.load("en_core_web_sm") 
 
# L'état du pipeline 
nlp.pipe_names 
# ['tok2vec', 'tagger', 'parser', 'ner', 'attribute_ruler',  
'lemmatizer'] 
 
# On ajoute le SpellCheck au pipeline 
contextualSpellCheck.add_to_pipe(nlp) 
 
# L'état du pipeline 
nlp.pipe_names 
# ['tok2vec', 'tagger', 'parser', 'ner', 'attribute_ruler',  
'lemmatizer', 'contextual spellchecker'] 
 
doc = nlp('Apple is looking at buying a Frenc startp based  
in Lyon...

Quelques éléments théoriques

Les algorithmes que nous venons d’utiliser se basent sur plusieurs outils dont nous allons dire un mot dans la présente section.

1. Distance de Levenshtein

La distance de Levenshtein, également connue sous le nom de distance d’édition, mesure la similarité entre deux chaînes de caractères en comptant le nombre minimum d’opérations nécessaires pour les aligner, c’est-à-dire pour les rendre identiques. Les opérations autorisées sont l’insertion, la suppression et la substitution d’un caractère. La distance de Levenshtein est souvent utilisée pour évaluer la proximité entre deux mots et est largement employée dans des applications telles que la correction orthographique, la recherche de mots similaires et la reconnaissance de motifs. Plus la distance de Levenshtein entre le mot écrit et la suggestion possible est faible, plus la suggestion a des chances d’être pertinente.

2. Distance de Damerau-Levenshtein

C’est une extension de la distance de Levenshtein qui inclut également l’opération de transposition (échange de positions de deux caractères adjacents). Cette distance est particulièrement utile pour traiter les erreurs typographiques telles que les fautes de frappe.

3. N-grammes et modèles de Markov

Comme...