Tokenização de Texto com Python

PythonBeginner
Pratique Agora

Introdução

Neste projeto, você aprenderá como implementar um sistema de tokenização de texto usando Python. A tokenização de texto é uma tarefa fundamental no processamento de linguagem natural (PLN), onde um texto é dividido em unidades menores chamadas tokens. Esses tokens podem representar palavras, números, pontuação ou outros elementos significativos no texto. A capacidade de tokenizar texto é essencial para muitas aplicações, como análise léxica em compiladores, análise de sentimento e classificação de texto.

👀 Visualização

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

🎯 Tarefas

Neste projeto, você aprenderá:

  • Como definir uma classe Token para representar os tokens no texto
  • Como implementar uma função generate_tokens que recebe um texto de entrada e gera um fluxo de tokens
  • Como testar o processo de tokenização com um texto de exemplo

🏆 Conquistas

Após concluir este projeto, você será capaz de:

  • Compreender o conceito de tokenização de texto e sua importância no processamento de linguagem natural
  • Implementar um sistema básico de tokenização de texto usando Python
  • Personalizar o processo de tokenização definindo diferentes tipos de tokens e suas expressões regulares correspondentes
  • Testar e depurar o sistema de tokenização com vários textos de entrada

Definindo a Classe Token

Nesta etapa, você aprenderá como definir a classe Token, que representará os tokens no processo de tokenização de texto.

  1. Abra o arquivo /home/labex/project/texttokenizer.py em um editor de texto.

  2. No início do arquivo, importe a função namedtuple do módulo collections:

    from collections import namedtuple
  3. Defina a classe Token como uma named tuple com dois atributos: type e value.

    Token = namedtuple("Token", ["type", "value"])
✨ Verificar Solução e Praticar

Implementando a Função generate_tokens

Nesta etapa, você implementará a função generate_tokens, que receberá o texto de entrada e gerará um fluxo de tokens.

  1. No arquivo texttokenizer.py, defina a função 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. A função generate_tokens primeiro define um dicionário token_specification que mapeia os tipos de token para suas expressões regulares correspondentes.

  3. Em seguida, ela combina todas as expressões regulares em uma única e grande expressão regular usando o operador |.

  4. A função então usa a função re.finditer para encontrar todas as correspondências no texto de entrada e produz um objeto Token para cada correspondência, com o tipo e o valor do token.

✨ Verificar Solução e Praticar

Testando a Tokenização

Nesta etapa, você testará a função generate_tokens analisando um texto de exemplo.

  1. No final do arquivo texttokenizer.py, adicione o seguinte código:

    if __name__ == "__main__":
        text = "total = 1 + 2 * 3"
        tokens = list(generate_tokens(text))
        print(tokens)
  2. Salve o arquivo texttokenizer.py.

  3. Execute o script texttokenizer.py do diretório /home/labex/project:

    python texttokenizer.py
  4. A saída deve ser uma lista de objetos Token representando os tokens no 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')]

Parabéns! Você implementou com sucesso a função generate_tokens e a testou com um texto de exemplo. Na próxima etapa, você aprenderá como usar a função generate_tokens para tokenizar um texto maior.

✨ Verificar Solução e Praticar

Resumo

Parabéns! Você concluiu este projeto. Você pode praticar mais laboratórios no LabEx para aprimorar suas habilidades.