La tokenization de texte avec Python

PythonBeginner
Pratiquer maintenant

Introduction

Dans ce projet, vous allez apprendre à implémenter un système de tokenization de texte à l'aide de Python. La tokenization de texte est une tâche fondamentale dans le traitement du langage naturel, où un texte donné est divisé en unités plus petites appelées tokens. Ces tokens peuvent représenter des mots, des nombres, des ponctuations ou d'autres éléments significatifs dans le texte. La capacité de tokenizer le texte est essentielle pour de nombreuses applications, telles que l'analyse lexicale dans les compilateurs, l'analyse de sentiment et la classification de texte.

👀 Aperçu

## text = 'total = 1 + 2 * 3'

tokens = [Token(type='NAME', value='total'), Token(type='WS', value=' '), Token(type='EQ', value='='), Token(type='WS', value=' '), Token(type='NUM', value='1'), Token(type='WS', value=' '), Token(type='ADD', value='+'), Token(type='WS', value=' '), Token(type='NUM', value='2'), Token(type='WS', value=' '), Token(type='MUL', value='*'), Token(type='WS', value=' '), Token(type='NUM', value='3')]

🎯 Tâches

Dans ce projet, vous allez apprendre :

  • Comment définir une classe Token pour représenter les tokens dans le texte
  • Comment implémenter une fonction generate_tokens qui prend un texte d'entrée et génère un flux de tokens
  • Comment tester le processus de tokenization avec un texte d'échantillonnage

🏆 Réalisations

Après avoir terminé ce projet, vous serez capable de :

  • Comprendre le concept de tokenization de texte et son importance dans le traitement du langage naturel
  • Implémenter un système de tokenization de base de texte à l'aide de Python
  • Personnaliser le processus de tokenization en définissant différents types de tokens et leurs expressions régulières correspondantes
  • Tester et déboguer le système de tokenization avec divers textes d'entrée

Définition de la classe Token

Dans cette étape, vous allez apprendre à définir la classe Token, qui représentera les tokens dans le processus de tokenization de texte.

  1. Ouvrez le fichier /home/labex/project/texttokenizer.py dans un éditeur de texte.

  2. Au début du fichier, importez la fonction namedtuple du module collections :

    from collections import namedtuple
  3. Définissez la classe Token comme un named tuple avec deux attributs : type et value.

    Token = namedtuple("Token", ["type", "value"])
✨ Vérifier la solution et pratiquer

Implémentation de la fonction generate_tokens

Dans cette étape, vous allez implémenter la fonction generate_tokens, qui prendra le texte d'entrée et générera un flux de tokens.

  1. Dans le fichier texttokenizer.py, définissez la fonction generate_tokens :

    def generate_tokens(text):
        ## Définir les types de tokens et les expressions régulières correspondantes
        token_specification = {
            "NAME": r"[a-zA-Z_][a-zA-Z_0-9]*",
            "NUM": r"\d+",
            "ADD": r"\+",
            "SUB": r"-",
            "MUL": r"\*",
            "DIV": r"/",
            "EQ": r"=",
            "WS": r"\s+",
        }
    
        ## Combiner les expressions régulières en une seule grande expression régulière
        regex = "|".join("(?P<%s>%s)" % pair for pair in token_specification.items())
    
        scanner = re.finditer(regex, text)
        for m in scanner:
            type = m.lastgroup
            value = m.group()
            yield Token(type, value)
  2. La fonction generate_tokens définit d'abord un dictionnaire token_specification qui associe les types de tokens à leurs expressions régulières correspondantes.

  3. Elle combine ensuite toutes les expressions régulières en une seule grande expression régulière en utilisant l'opérateur |.

  4. La fonction utilise ensuite la fonction re.finditer pour trouver toutes les correspondances dans le texte d'entrée et produit un objet Token pour chaque correspondance, avec le type et la valeur du token.

✨ Vérifier la solution et pratiquer

Tester la tokenization

Dans cette étape, vous allez tester la fonction generate_tokens en analysant un texte d'échantillonnage.

  1. À la fin du fichier texttokenizer.py, ajoutez le code suivant :

    if __name__ == "__main__":
        text = "total = 1 + 2 * 3"
        tokens = list(generate_tokens(text))
        print(tokens)
  2. Enregistrez le fichier texttokenizer.py.

  3. Exécutez le script texttokenizer.py à partir du répertoire /home/labex/project :

    python texttokenizer.py
  4. La sortie devrait être une liste d'objets Token représentant les tokens dans le texte d'entrée :

    [Token(type='NAME', value='total'), Token(type='WS', value=' '), Token(type='EQ', value='='), Token(type='WS', value=' '), Token(type='NUM', value='1'), Token(type='WS', value=' '), Token(type='ADD', value='+'), Token(type='WS', value=' '), Token(type='NUM', value='2'), Token(type='WS', value=' '), Token(type='MUL', value='*'), Token(type='WS', value=' '), Token(type='NUM', value='3')]

Félicitations ! Vous avez réussi à implémenter la fonction generate_tokens et à la tester avec un texte d'échantillonnage. Dans l'étape suivante, vous allez apprendre à utiliser la fonction generate_tokens pour tokenizer un texte plus long.

✨ Vérifier la solution et pratiquer

Résumé

Félicitations ! Vous avez terminé ce projet. Vous pouvez pratiquer plus de laboratoires sur LabEx pour améliorer vos compétences.