Tokenización de texto con Python

PythonPythonBeginner
Practicar Ahora

💡 Este tutorial está traducido por IA desde la versión en inglés. Para ver la versión original, puedes hacer clic aquí

Introducción

En este proyecto, aprenderás a implementar un sistema de tokenización de texto utilizando Python. La tokenización de texto es una tarea fundamental en el procesamiento del lenguaje natural, donde un texto dado se divide en unidades más pequeñas llamadas tokens. Estos tokens pueden representar palabras, números, signos de puntuación u otros elementos significativos en el texto. La capacidad de tokenizar texto es esencial para muchas aplicaciones, como el análisis léxico en compiladores, el análisis de sentimiento y la clasificación de texto.

👀 Vista previa

## 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')]

🎯 Tareas

En este proyecto, aprenderás:

  • Cómo definir una clase Token para representar los tokens en el texto
  • Cómo implementar una función generate_tokens que tome un texto de entrada y genere un flujo de tokens
  • Cómo probar el proceso de tokenización con un texto de muestra

🏆 Logros

Después de completar este proyecto, podrás:

  • Comprender el concepto de tokenización de texto y su importancia en el procesamiento del lenguaje natural
  • Implementar un sistema básico de tokenización de texto utilizando Python
  • Personalizar el proceso de tokenización definiendo diferentes tipos de tokens y sus correspondientes expresiones regulares
  • Probar y depurar el sistema de tokenización con varios textos de entrada

Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL python(("Python")) -.-> python/ModulesandPackagesGroup(["Modules and Packages"]) python(("Python")) -.-> python/ObjectOrientedProgrammingGroup(["Object-Oriented Programming"]) python(("Python")) -.-> python/AdvancedTopicsGroup(["Advanced Topics"]) python(("Python")) -.-> python/PythonStandardLibraryGroup(["Python Standard Library"]) python(("Python")) -.-> python/DataStructuresGroup(["Data Structures"]) python(("Python")) -.-> python/FunctionsGroup(["Functions"]) python/DataStructuresGroup -.-> python/lists("Lists") python/FunctionsGroup -.-> python/function_definition("Function Definition") python/ModulesandPackagesGroup -.-> python/importing_modules("Importing Modules") python/ObjectOrientedProgrammingGroup -.-> python/classes_objects("Classes and Objects") python/AdvancedTopicsGroup -.-> python/generators("Generators") python/AdvancedTopicsGroup -.-> python/regular_expressions("Regular Expressions") python/PythonStandardLibraryGroup -.-> python/data_collections("Data Collections") subgraph Lab Skills python/lists -.-> lab-302774{{"Tokenización de texto con Python"}} python/function_definition -.-> lab-302774{{"Tokenización de texto con Python"}} python/importing_modules -.-> lab-302774{{"Tokenización de texto con Python"}} python/classes_objects -.-> lab-302774{{"Tokenización de texto con Python"}} python/generators -.-> lab-302774{{"Tokenización de texto con Python"}} python/regular_expressions -.-> lab-302774{{"Tokenización de texto con Python"}} python/data_collections -.-> lab-302774{{"Tokenización de texto con Python"}} end

Definiendo la clase Token

En este paso, aprenderás a definir la clase Token, que representará los tokens en el proceso de tokenización de texto.

  1. Abra el archivo /home/labex/project/texttokenizer.py en un editor de texto.

  2. Al principio del archivo, importe la función namedtuple del módulo collections:

    from collections import namedtuple
  3. Defina la clase Token como un named tuple con dos atributos: type y value.

    Token = namedtuple("Token", ["type", "value"])

Implementando la función generate_tokens

En este paso, implementarás la función generate_tokens, que tomará el texto de entrada y generará un flujo de tokens.

  1. En el archivo texttokenizer.py, defina la función generate_tokens:

    def generate_tokens(text):
        ## Define token types and corresponding regular expressions
        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+",
        }
    
        ## Combine regular expressions into one large regular expression
        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 función generate_tokens primero define un diccionario token_specification que mapea los tipos de tokens a sus correspondientes expresiones regulares.

  3. Luego combina todas las expresiones regulares en una sola gran expresión regular utilizando el operador |.

  4. La función luego utiliza la función re.finditer para encontrar todas las coincidencias en el texto de entrada y produce un objeto Token para cada coincidencia, con el tipo y el valor del token.

Probando la tokenización

En este paso, probarás la función generate_tokens analizando un texto de muestra.

  1. Al final del archivo texttokenizer.py, agregue el siguiente código:

    if __name__ == "__main__":
        text = "total = 1 + 2 * 3"
        tokens = list(generate_tokens(text))
        print(tokens)
  2. Guarde el archivo texttokenizer.py.

  3. Ejecute el script texttokenizer.py desde el directorio /home/labex/project:

    python texttokenizer.py
  4. La salida debe ser una lista de objetos Token que representan los tokens en el texto de entrada:

    [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')]

¡Felicitaciones! Has implementado con éxito la función generate_tokens y la has probado con un texto de muestra. En el siguiente paso, aprenderás a usar la función generate_tokens para tokenizar un texto más largo.

✨ Revisar Solución y Practicar

Resumen

¡Felicitaciones! Has completado este proyecto. Puedes practicar más laboratorios en LabEx para mejorar tus habilidades.