Tokenização Usando Expressões Regulares
Por que Expressões Regulares?
Embora as funções word_tokenize() e sent_tokenize() da biblioteca NLTK ofereçam maneiras convenientes de tokenizar texto em palavras e sentenças, elas podem não atender sempre a necessidades específicas de processamento de texto. Por isso, vamos explorar uma abordagem alternativa: a tokenização utilizando expressões regulares (regex).
Expressão regular (regex) é uma sequência de caracteres que define um padrão de busca. Expressões regulares podem ser utilizadas em diversas tarefas de processamento de texto, incluindo busca, substituição e divisão de texto com base em padrões específicos.
No contexto da tokenização, regex permite definir padrões personalizados que podem identificar tokens, oferecendo mais controle sobre o processo de tokenização do que funções pré-construídas.
Usando regexp_tokenize()
Felizmente, a biblioteca NLTK inclui a função regexp_tokenize() no módulo tokenize, que tokeniza uma string em substrings utilizando uma expressão regular. Esta função é especialmente útil quando é necessário tokenizar textos com base em padrões que não são bem tratados pelos tokenizadores padrão.
Os parâmetros mais importantes de regexp_tokenize() são os dois primeiros: text (a string a ser tokenizada) e pattern (padrão de expressão regular).
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)
Como pode ser observado, o processo é semelhante ao uso da função word_tokenize(), porém, os resultados podem variar dependendo do padrão utilizado. No exemplo apresentado, o padrão '\w+' é utilizado para corresponder a sequências de um ou mais caracteres alfanuméricos (letras e números) e sublinhados.
Isso resulta em uma lista de palavras sem sinais de pontuação, o que difere do word_tokenize(), pois este normalmente inclui a pontuação como tokens separados.
Utilizando RegexpTokenizer
Uma abordagem alternativa para tokenização personalizada envolve o uso da classe RegexpTokenizer do módulo tokenize da NLTK. Primeiro, crie uma instância de RegexpTokenizer com o padrão de expressão regular desejado como argumento. Após criar uma instância com o padrão especificado, é possível passar o texto como argumento para o método 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)
Essa abordagem produz os mesmos resultados e pode ser mais adequada em casos nos quais é necessário um tokenizador para diferentes textos, pois permite criar o tokenizador uma única vez e aplicá-lo a várias entradas de texto sem redefinir o padrão a cada vez.
Vamos prosseguir com outro exemplo. Suponha que desejamos apenas dígitos como tokens; nesse caso, o padrão '\d+' irá buscar um ou mais dígitos, conforme o exemplo abaixo:
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)
No geral, a tokenização por expressões regulares permite uma tokenização altamente personalizada, tornando-a ideal para lidar com padrões complexos e regras específicas de tokenização que não são facilmente gerenciadas por métodos padrão como word_tokenize(). No nosso exemplo, quando queríamos usar números como tokens, word_tokenize() não seria adequado para essa tarefa.
Obrigado pelo seu feedback!
Pergunte à IA
Pergunte à IA
Pergunte o que quiser ou experimente uma das perguntas sugeridas para iniciar nosso bate-papo
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
Tokenização Usando Expressões Regulares
Deslize para mostrar o menu
Por que Expressões Regulares?
Embora as funções word_tokenize() e sent_tokenize() da biblioteca NLTK ofereçam maneiras convenientes de tokenizar texto em palavras e sentenças, elas podem não atender sempre a necessidades específicas de processamento de texto. Por isso, vamos explorar uma abordagem alternativa: a tokenização utilizando expressões regulares (regex).
Expressão regular (regex) é uma sequência de caracteres que define um padrão de busca. Expressões regulares podem ser utilizadas em diversas tarefas de processamento de texto, incluindo busca, substituição e divisão de texto com base em padrões específicos.
No contexto da tokenização, regex permite definir padrões personalizados que podem identificar tokens, oferecendo mais controle sobre o processo de tokenização do que funções pré-construídas.
Usando regexp_tokenize()
Felizmente, a biblioteca NLTK inclui a função regexp_tokenize() no módulo tokenize, que tokeniza uma string em substrings utilizando uma expressão regular. Esta função é especialmente útil quando é necessário tokenizar textos com base em padrões que não são bem tratados pelos tokenizadores padrão.
Os parâmetros mais importantes de regexp_tokenize() são os dois primeiros: text (a string a ser tokenizada) e pattern (padrão de expressão regular).
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)
Como pode ser observado, o processo é semelhante ao uso da função word_tokenize(), porém, os resultados podem variar dependendo do padrão utilizado. No exemplo apresentado, o padrão '\w+' é utilizado para corresponder a sequências de um ou mais caracteres alfanuméricos (letras e números) e sublinhados.
Isso resulta em uma lista de palavras sem sinais de pontuação, o que difere do word_tokenize(), pois este normalmente inclui a pontuação como tokens separados.
Utilizando RegexpTokenizer
Uma abordagem alternativa para tokenização personalizada envolve o uso da classe RegexpTokenizer do módulo tokenize da NLTK. Primeiro, crie uma instância de RegexpTokenizer com o padrão de expressão regular desejado como argumento. Após criar uma instância com o padrão especificado, é possível passar o texto como argumento para o método 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)
Essa abordagem produz os mesmos resultados e pode ser mais adequada em casos nos quais é necessário um tokenizador para diferentes textos, pois permite criar o tokenizador uma única vez e aplicá-lo a várias entradas de texto sem redefinir o padrão a cada vez.
Vamos prosseguir com outro exemplo. Suponha que desejamos apenas dígitos como tokens; nesse caso, o padrão '\d+' irá buscar um ou mais dígitos, conforme o exemplo abaixo:
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)
No geral, a tokenização por expressões regulares permite uma tokenização altamente personalizada, tornando-a ideal para lidar com padrões complexos e regras específicas de tokenização que não são facilmente gerenciadas por métodos padrão como word_tokenize(). No nosso exemplo, quando queríamos usar números como tokens, word_tokenize() não seria adequado para essa tarefa.
Obrigado pelo seu feedback!