Fragmentando Textos: A Importância da Tokenização no Universo de NLP
O primeiro passo em qualquer projeto de NLP (Processamento de Linguaguem Natural) é algo chamado "Tokenização". Esse processo envolve dividir um texto em pedaços menores, gerando os chamados tokens. Um token pode ser uma palavra, uma pontuação, ou uma stopword (palavras comuns e de baixo valor semântico, como preposições, artigos e pronomes). Discutiremos essas diferenças mais adiante.
Para tornar tudo mais claro e cativante, vou mostrar alguns trechos de código em Python 3 pra ilustrar. Na imagem a seguir, criei uma variável chamada documento
e atribuí um texto a ela. Em seguidam criei a variável tokens
para armazenar o resultado da expressão documento.split()
- onde split()
é um método integrado que divide o texto por espaços e retorna uma lista com 10 itens. Esses itens são os tokens.
Notebook no Visual Studio Code
Pontuação
No entanto, podemos observar que, ao analisar os tokens gerados, o primeiro é apresentado como "Hi," e o último como "token!". O ponto principal aqui é que devemos ser capazes de dividi-los ainda mais - já que sabemos que "Oi" não é entendido apenas como uma palavra, mas sim uma palavra com pontuação (a vírgula). O mesmo vale para "token!", com o ponto de exclamação.
Portanto, como essas pontuações não agregam muito valor à ideia principal que essa frase possui, uma abordaem comum é removê-las usando uma biblioteca padrão do Python - importada como re
, que significa "Regular Expression" ou, como é comumente conhecida: regex.
Em vez de dividir o documento, agora divido a variável regex
que armazena um filtro para remover pontuações. Você pode aprender mais sobre expressões regulares aqui e praticá-las aqui.
Notebook no Visual Studio Code
Caixa baixa
Outra boa prática é converter todos os seus tokens para letras minúsculas. Isso ajuda a evitar a criação de três tokens para a mesma palavra, como: Exemplo, eXEMplo ou exemplo. Vamos usar outro método integrado para textos em Python - o lower()
.
Aqui, criei outra variável chamada tokens_minusculos
e seu valor é uma lista gerada usando uma compreensão de listas. Basicamente, ela utiliza o método para converter cada um dos itens na lista de tokens anterior para letras minúsculas.
Notebook no Visual Studio Code
Stopwords
Ao analisar um documento de texto, percebemos que algumas palavras sçai comumente usadas em quaisquer idiomas, não apenas no Português. Para muitas aplicações, as stopwords são fundamentais, pois se removidas podemos nos concentrar nas palavras mais importantes - aquelas que agregam significado real a uma frase.
Para algumas aplicações, remover todas as stopwords, desde os determinantes até preposições e adjetivos, pode ser adequado. No entanto para um projeto de análise de sentimentos, remover adjetivos como "ótimo" e "agradável", bem como negações como "não"
, pode desviar os algoritmos do rumo correto.
É importante conhecer essas diferenças para escolher quais stopwords podem ser removidas e, a seguir, apresentarei um exemplo de stopwords mínimas que você pode usar:
- Determinantes: Os determinantes geralmente marcam substantivos e costumam ser seguidos por um substantivo. Ex.: o, um, outro
- Conjunções coordenativas: As conjunções coordenativas conectam palavras, frases e orações. Ex.: e, nem, mas, ou, então, logo
- Preposições: As preposições expressam relações temporais ou espaciais. Ex.: em, sob, para, antes
Conclusão
A Tokenização também pode ser realizada usando algumas bibliotecas, como o Natural Language Toolkit (NLTK) ou SpaCy. Há muitos conceitos interessantes por trás de NLP e eu mal posso esperar para compartilhar com vocês o que eu tenho aprendido. Se você tiver interesse, vamos nos conectar no LinkedIn e eu também te convido a participar do grupo de Python no WhatsApp - onde compartilho meus projetos e ideias que envolvem NLP.
Linkedin: https://linkedin.com/in/naomilago
Grupo no WhatsApp: https://chat.whatsapp.com/FZ0M7yphYGX421WND3dwOR
Fonte: https://docs.naomilago.com