Contenu du cours
Introduction au NLP
Introduction au NLP
Tokenisation à l'Aide d'Expressions Régulières
Pourquoi les expressions régulières ?
Bien que les fonctions word_tokenize()
et sent_tokenize()
de la bibliothèque NLTK offrent des moyens pratiques de tokeniser le texte en mots et en phrases, elles ne conviennent pas toujours aux besoins spécifiques de traitement de texte. Explorons donc une approche alternative : la tokenisation à l'aide des expressions régulières (regex).
Dans le contexte de la tokenisation, les regex permettent de définir des modèles personnalisés qui peuvent identifier des tokens, offrant plus de contrôle sur le processus de tokenisation que les fonctions préconstruites.
Utilisation de regexp_tokenize()
Heureusement, la bibliothèque NLTK inclut la fonction regexp_tokenize()
dans le module tokenize
, qui segmente une chaîne en sous-chaînes en utilisant une expression régulière. Cette fonction est particulièrement utile lorsque vous devez segmenter du texte en fonction de motifs qui ne sont pas bien gérés par les tokenizeurs standard.
Les paramètres les plus importants de regexp_tokenize()
sont ses deux premiers paramètres : text
(la chaîne à segmenter) et pattern
(le motif d'expression régulière).
Voyons un exemple :
from nltk.tokenize import regexp_tokenize text = "Let's try, regex tokenization. Does it work? Yes, it does!" text = text.lower() # Tokenize a sentence tokens = regexp_tokenize(text, r'\w+') print(tokens)
Comme vous pouvez le voir, le processus est similaire à l'utilisation de la fonction word_tokenize()
, cependant, les résultats peuvent varier en fonction du motif. Dans notre exemple, le motif '\w+'
est utilisé pour correspondre à des séquences de caractères alphanumériques (lettres et chiffres), spécifiquement un ou plusieurs caractères alphanumériques.
Cela donne une liste de mots sans signes de ponctuation, ce qui diffère de word_tokenize()
en ce que ce dernier inclut généralement la ponctuation comme des jetons séparés. Ainsi, le résultat de notre exemple regexp_tokenize
serait une liste de mots de la phrase.
Utilisation de RegexpTokenizer
Une approche alternative pour la tokenisation personnalisée consiste à utiliser la classe RegexpTokenizer
du module tokenize
de NLTK. Pour commencer, créez une instance de RegexpTokenizer
, en lui fournissant votre motif d'expression régulière souhaité comme argument ; ce motif définit comment le texte sera tokenisé.
Contrairement à la fonction regexp_tokenize()
, vous ne fournissez pas le texte à tokeniser au moment de la création de l'instance RegexpTokenizer
. Au lieu de cela, une fois l'instance créée avec le motif spécifié, vous utilisez sa méthode tokenize()
pour appliquer la tokenisation sur votre texte, en passant le texte que vous souhaitez tokeniser comme argument à cette méthode.
Voici un exemple :
from nltk.tokenize import RegexpTokenizer # Define a tokenizer with a regular expression tokenizer = RegexpTokenizer(r'\w+') text = "Let's try, regex tokenization. Does it work? Yes, it does!" text = text.lower() # Tokenize a sentence tokens = tokenizer.tokenize(text) print(tokens)
Cette approche donne les mêmes résultats, et elle peut être meilleure dans les cas où vous avez besoin d'un tokenizer pour différents textes, car elle vous permet de créer le tokenizer une fois et de l'appliquer ensuite à divers textes sans redéfinir le motif à chaque fois.
Passons à un autre exemple. Supposons que nous voulons que seuls les chiffres soient nos tokens, alors notre motif '\d+'
recherchera un ou plusieurs chiffres, comme dans l'exemple ci-dessous :
from nltk.tokenize import RegexpTokenizer tokenizer = RegexpTokenizer(r'\d+') text = "Give my 100$ back right now or 20 each month" text = text.lower() # Tokenize a sentence tokens = tokenizer.tokenize(text) print(tokens)
Dans l'ensemble, la tokenisation par expressions régulières permet une tokenisation hautement personnalisée, ce qui la rend idéale pour gérer des motifs complexes et des règles de tokenisation spécifiques qui ne sont pas facilement gérées par des méthodes standard comme word_tokenize()
. Dans notre exemple, lorsque nous voulions utiliser des nombres comme tokens, word_tokenize()
ne serait pas adapté à cette tâche.
Merci pour vos commentaires !