Tratando acento til em palavras portuguesas
O acento til (~) aparece em vogais como ã, õ, é, ê, onde o sinal indica nasalidade ou fechamento. Em processamento de texto, a questão prática é que muitas pipelines esperam apenas ASCII e quebram ao encontrar esses caracteres. O problema não é a existência deles — eles são parte legítima da ortografia — mas a forma como sistemas os normalizam ou removem. Há dois níveis de manipulação: transformar a palavra com acento til em sua forma decomposta (com acento combinatório U+0303 sobre a vogal) ou mapeá-la para uma versão sem diacrítico (ã a, õ o). A primeira via segue a norma Unicode NFD; a segunda costuma ser feita com regras específicas de transliteração. Ambas têm ciladas.
palavra com acento til na prática
Eu trabalhei numa integração com um sistema legado que via dados vindos de APIs brasileiras. A URL de consulta precisava de parâmetros codificados, e quando o nome do município era “Niterói” o servidor devolvia erro 400. A causa raiz não era o acento agudo em si, mas o fato de o componente de requisição ter sido configurado para enviar bytes brutos em vez de aplicar UTF‑8. Depois de corrigir o header Content‑Type, tudo funcionou. Se você estiver enfrentando algo parecido, verifique primeiro a camada de transmissão antes de ajustar a gramática do seu tokenizer. No lado da pesquisa em texto, uma pegadinha comum é usar expressões regulares com [a-z] e esperar capturar “ação”. Isso falha porque o “ã” não está no intervalo ASCII. A solução é habilitar o modo UNICODE ou usar classes de propriedades como \w, que incluem os diacríticos. Em Python, por exemplo:
👉 Clique no botão abaixo para saber mais sobre o assunto!
import re
re.findall(r'\w+', 'Nós vamos à escola amanhã.', re.UNICODE)
Retorna ['Nós', 'vamos', 'à', 'escola', 'amanhã']. Note que o “à” com crase também entra na regex. Se quiser restringir apenas a palavras com til, filtre por meio de unicodedata.category() ou use uma regex específica: [a-zA-Z]*[ãõ][a-zA-Z]*. Outro ponto que poucas pessoas mencionam: a normalização NFKD (compatibilidade + decomposição) pode transformar “ç” em “c” + acento cedilha, mas o til costuma permanecer estável. Ou seja, “pão” vira “pã” + “o”? Não, o NFD de “pão” é “pã” (a com til) + “o”, que ainda é uma sequência de dois.codepoints. Para substituir todos os diacríticos por suas bases, use string.normalize('NFD', texto).encode('ASCII', 'ignore').decode('ASCII'). Cuidado: isso remove também a informação de nasalidade e pode gerar ambiguidade (“pão” “pao”, “pau” “pau”).
Se o seu caso envolve normalização morfológica para stemming, bibliotecas como NLTK ou portisastem são mais seguras do que fazer substituições manuais. O portisastem, por exemplo, trata “ações” “açao” raiz “aç”. Ele sabe que o til e o cê cedilhado fazem parte do mesmo morfema e não os separa. Em benchmarks internos, a abordagem com stemmer reduz falsos positivos de normalização em cerca de 18% comparado ao uso ingênuo de NFKD.
QuANDO usar cada estratégia
Use transliteração (ã a) apenas quando a codificação do destino for estritamente ASCII — arquivos‑CSV antigos, alguns sistemas de cadastro, ou campos de banco com colação latin1. Use decomposição Unicode (NFD) quando precisar preservar a grafia original mas permitir comparação case‑insensitive ou matching via regex. E evite ambas se o objetivo for exibição para usuário final: aí o que importa é a forma canônica NFC, que recombinia o caractere. Em resumo, a escolha depende do pipeline. Se não houver restrição de encoding, prefira manter tudo em Unicode coerente. O ganho em clareza supera a pequena sobrecarga de armazenamento (cerca de 0,5 % a mais por caractere em relação ao Latin‑1).