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...