Juan Beleño

Normalização de textos em português

A função aqui apresentada foi inspirada na normalização usada por vários participantes do Mercado Livre Challenge 2019. Algumas das normalizações nas que eu me baseei foram esta, esta e esta

from unicodedata import normalize
import re

def normalizar_texto(texto):
    # Garante que o parâmetro é texto
    texto_normalizado = str(texto)
    # Transforma o texto em minusculas
    texto_normalizado = texto_normalizado.lower()
    # Tira os acentos das palavras incluindo a ç
    texto_normalizado = normalize(
        'NFKD', texto_normalizado).encode('ascii', errors='ignore').decode('utf-8')
    # Sustui os números por zeros
    texto_normalizado = re.sub(r'\d', '0', texto_normalizado)
    # Sustitui os pontos por vírgulas (eu faço isto por causa dos números decimais)
    texto_normalizado = re.sub(r'\.', ',', texto_normalizado)
    # Sustitui as vírgulas que não estejam entre números
    texto_normalizado = re.sub(r'(?<!\d),(?!\d)', ' ', texto_normalizado)
    # Tira os carateres que não sejam letras, números ou vírgulas. Por exemplo, sinais de pontuação diferentes da vírgula
    texto_normalizado = re.sub(r'[^a-z0,]', ' ', texto_normalizado)
    # Tira os espaços a mais no meio das palavras
    texto_normalizado = re.sub(r'[\s\n\r]+', ' ', texto_normalizado)
    # Tira os espaços no começo e no fim do texto
    texto_normalizado = texto_normalizado.strip(' \n\t\r')
    return texto_normalizado

Este código usa um monte de expressões regulares. Por isto, recomendo dar uma olhada no meu post sobre expressões regulares

Usando a função anterior o texto

     Olá, meu nome é Juan Beleño, tenho 28 anos e meço 1.76cm    - fiz computação na UNICAMP.
    é nois galera!

vira o seguinte

ola meu nome e juan beleno tenho 00 anos e meco 0,00cm fiz computacao na unicamp e nois galera

Bilhete: Eu não curto de tirar as stop words do texto porque acho que talvez isso pode dar prejuízio na hora de usar para classificação de textos