Tokenisation à l'aide des Expressions Régulières
Pourquoi utiliser les expressions régulières ?
Bien que les fonctions word_tokenize() et sent_tokenize() de la bibliothèque NLTK offrent des moyens pratiques de segmenter un texte en mots et en phrases, elles ne répondent pas toujours à des besoins spécifiques de traitement de texte. Examinons donc une approche alternative : la tokenisation à l'aide des expressions régulières (regex).
Expression régulière (regex) : séquence de caractères définissant un motif de recherche. Les expressions régulières peuvent être utilisées pour diverses tâches de traitement de texte, notamment la recherche, le remplacement et la séparation de texte selon des motifs spécifiques.
Dans le contexte de la tokenisation, les regex permettent de définir des motifs personnalisés pouvant identifier les jetons, offrant ainsi un contrôle accru sur le processus de tokenisation par rapport aux fonctions prédéfinies.
Utilisation de regexp_tokenize()
Heureusement, la bibliothèque NLTK inclut la fonction regexp_tokenize() dans le module tokenize, qui segmente une chaîne de caractères en sous-chaînes à l'aide d'une expression régulière. Cette fonction est particulièrement utile lorsque la segmentation du texte doit se faire selon des motifs qui ne sont pas bien gérés par les tokenizers standards.
Les paramètres les plus importants de regexp_tokenize() sont ses deux premiers paramètres : text (la chaîne à segmenter) et pattern (motif d'expression régulière).
123456from 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 constater, le processus est similaire à l'utilisation de la fonction word_tokenize(), cependant, les résultats peuvent varier selon le motif utilisé. Dans notre exemple, le motif '\w+' est utilisé pour correspondre à des séquences d'un ou plusieurs caractères alphanumériques (lettres et chiffres) et des underscores.
Cela donne une liste de mots sans signes de ponctuation, ce qui diffère de word_tokenize() qui inclut généralement la ponctuation comme des jetons séparés.
Utilisation de RegexpTokenizer
Une approche alternative pour la tokenisation personnalisée consiste à utiliser la classe RegexpTokenizer du module tokenize de NLTK. Commencez par créer une instance de RegexpTokenizer en fournissant le motif d'expression régulière souhaité en argument. Une fois l'instance créée avec le motif spécifié, vous pouvez transmettre votre texte en argument à sa méthode tokenize().
12345678from 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 méthode donne les mêmes résultats et peut s’avérer plus avantageuse lorsque vous avez besoin d’un seul tokenizer pour différents textes, car elle permet de créer le tokenizer une seule fois puis de l’appliquer à divers textes sans redéfinir le motif à chaque fois.
Poursuivons avec un autre exemple. Supposons que nous souhaitions que seuls les chiffres soient nos tokens, alors notre motif '\d+' recherchera un ou plusieurs chiffres, comme dans l’exemple ci-dessous :
1234567from 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)
Globalement, la tokenisation par expressions régulières permet une personnalisation poussée de la tokenisation, ce qui la rend idéale pour traiter des schémas complexes et des règles de découpage spécifiques difficilement gérables avec des méthodes standard comme word_tokenize(). Dans notre exemple, lorsque nous souhaitions utiliser les nombres comme jetons, word_tokenize() ne convenait pas à cette tâche.
Merci pour vos commentaires !
Demandez à l'IA
Demandez à l'IA
Posez n'importe quelle question ou essayez l'une des questions suggérées pour commencer notre discussion
Awesome!
Completion rate improved to 3.45
Tokenisation à l'aide des Expressions Régulières
Glissez pour afficher le menu
Pourquoi utiliser les expressions régulières ?
Bien que les fonctions word_tokenize() et sent_tokenize() de la bibliothèque NLTK offrent des moyens pratiques de segmenter un texte en mots et en phrases, elles ne répondent pas toujours à des besoins spécifiques de traitement de texte. Examinons donc une approche alternative : la tokenisation à l'aide des expressions régulières (regex).
Expression régulière (regex) : séquence de caractères définissant un motif de recherche. Les expressions régulières peuvent être utilisées pour diverses tâches de traitement de texte, notamment la recherche, le remplacement et la séparation de texte selon des motifs spécifiques.
Dans le contexte de la tokenisation, les regex permettent de définir des motifs personnalisés pouvant identifier les jetons, offrant ainsi un contrôle accru sur le processus de tokenisation par rapport aux fonctions prédéfinies.
Utilisation de regexp_tokenize()
Heureusement, la bibliothèque NLTK inclut la fonction regexp_tokenize() dans le module tokenize, qui segmente une chaîne de caractères en sous-chaînes à l'aide d'une expression régulière. Cette fonction est particulièrement utile lorsque la segmentation du texte doit se faire selon des motifs qui ne sont pas bien gérés par les tokenizers standards.
Les paramètres les plus importants de regexp_tokenize() sont ses deux premiers paramètres : text (la chaîne à segmenter) et pattern (motif d'expression régulière).
123456from 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 constater, le processus est similaire à l'utilisation de la fonction word_tokenize(), cependant, les résultats peuvent varier selon le motif utilisé. Dans notre exemple, le motif '\w+' est utilisé pour correspondre à des séquences d'un ou plusieurs caractères alphanumériques (lettres et chiffres) et des underscores.
Cela donne une liste de mots sans signes de ponctuation, ce qui diffère de word_tokenize() qui inclut généralement la ponctuation comme des jetons séparés.
Utilisation de RegexpTokenizer
Une approche alternative pour la tokenisation personnalisée consiste à utiliser la classe RegexpTokenizer du module tokenize de NLTK. Commencez par créer une instance de RegexpTokenizer en fournissant le motif d'expression régulière souhaité en argument. Une fois l'instance créée avec le motif spécifié, vous pouvez transmettre votre texte en argument à sa méthode tokenize().
12345678from 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 méthode donne les mêmes résultats et peut s’avérer plus avantageuse lorsque vous avez besoin d’un seul tokenizer pour différents textes, car elle permet de créer le tokenizer une seule fois puis de l’appliquer à divers textes sans redéfinir le motif à chaque fois.
Poursuivons avec un autre exemple. Supposons que nous souhaitions que seuls les chiffres soient nos tokens, alors notre motif '\d+' recherchera un ou plusieurs chiffres, comme dans l’exemple ci-dessous :
1234567from 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)
Globalement, la tokenisation par expressions régulières permet une personnalisation poussée de la tokenisation, ce qui la rend idéale pour traiter des schémas complexes et des règles de découpage spécifiques difficilement gérables avec des méthodes standard comme word_tokenize(). Dans notre exemple, lorsque nous souhaitions utiliser les nombres comme jetons, word_tokenize() ne convenait pas à cette tâche.
Merci pour vos commentaires !