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).
Une expression régulière (regex) est une séquence de caractères qui définit 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 (le 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, chiffres) et soulignés.
Cela produit 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 avec le motif spécifié créée, il est possible de transmettre le 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 produit les mêmes résultats et peut s'avérer préférable lorsque l'on souhaite utiliser 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 utilisation.
Poursuivons avec un autre exemple. Supposons que l'on souhaite que seuls les chiffres soient considérés comme des tokens ; dans ce cas, le motif '\d+' recherchera un ou plusieurs chiffres, comme illustré 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)
Dans l'ensemble, la tokenisation par expressions régulières permet une personnalisation avancée de la tokenisation, ce qui la rend idéale pour traiter des motifs complexes et des règles de découpage 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 les nombres comme jetons, word_tokenize() n'était pas adapté à 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
Can you explain how to write custom regex patterns for different tokenization needs?
What are some common use cases where regexp_tokenize() is preferred over word_tokenize()?
Can you show more examples of tokenization with different regex patterns?
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).
Une expression régulière (regex) est une séquence de caractères qui définit 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 (le 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, chiffres) et soulignés.
Cela produit 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 avec le motif spécifié créée, il est possible de transmettre le 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 produit les mêmes résultats et peut s'avérer préférable lorsque l'on souhaite utiliser 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 utilisation.
Poursuivons avec un autre exemple. Supposons que l'on souhaite que seuls les chiffres soient considérés comme des tokens ; dans ce cas, le motif '\d+' recherchera un ou plusieurs chiffres, comme illustré 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)
Dans l'ensemble, la tokenisation par expressions régulières permet une personnalisation avancée de la tokenisation, ce qui la rend idéale pour traiter des motifs complexes et des règles de découpage 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 les nombres comme jetons, word_tokenize() n'était pas adapté à cette tâche.
Merci pour vos commentaires !