O que são dígrafos: uma visão prática
Dígrafos são combinações de duas letras que, juntas, representam um único fonema. Parece simples até você começar a lidar com isso em processamento de texto e nunca mais olhar para uma string da mesma forma. Em português, os dígrafos mais comuns são CH, LH, NH, SS, RR, SC, SÇ, XC e QU/CU quando aparecem antes de E ou I. Isso é o básico que todo mundo aprende na escola. O problema é que o conceito se expande rapidamente quando você sai da linguística e entra no campo da computação.
O que são os dígrafos na prática
No processamento de linguagem natural, um dígrafo é frequentemente tratado como uma unidade de tokenização. A diferença é que muitos pipelines Ingênuos simplesmente dividem caractere por caractere e perdem completamente a informação fonológica. Eu já vi sistemas de busca que indexavam "chave" como k-a-v-e em vez de ch-a-v-e, e o resultado era uma qualidade de search absurdamente pior. O termo chave não aparecia nas buscas por "chave" porque o índice não reconhecava o dígrafo CH como uma entidade única. A solução mais direta é criar um mapeamento pré-tokenização que identifique dígrafos antes da divisão. Em português, isso significa varrer a string e substituir sequências como "ch", "lh", "nh" por tokens únicos. Um abordagem ingênua de regex funcionaria, mas tem uma armadilha que quase ninguém considera no início.
O problema é a sobreposição. Imagine a palavra "facho". Se você tokenizar dígrafos primeiro, o "ch" vira um token. Mas e se o seu sistema também tratar encontros consonantais? "Fl" em "flor" não é um dígrafo fonológico em português, mas alguns pipelines o tratam como tal. O resultado é inconsistência entre palavras que deveriam ser tratadas de forma similar. A workaround que eu uso é separar claramente dígrafos fonológicos de encontros consonantais, e só aplicar a(tokenização) especializada nos primeiros. O restante segue para o tokenizer padrão.
Dígrafos em contextos técnicos
Fora da linguística pura, dígrafos também aparecem em criptografia clássica, especificamente na cifra de Playfair, onde pares de letras são tratados como unidades. Nesse contexto, a definição é mais rígida: cada par forma uma célula na matriz 5x5 e as regras de substituição dependem inteiramente dessa agrupamento. A confusão aqui é comum porque iniciantes tentam aplicar regras de digraphs linguísticos a cifras, o que simplesmente não funciona. Em análise forense de texto, dígrafos de frequência são usados como fingerprint. A distribuição de "TH" em inglês, "CH" e "LL" em espanhol, ou "NH" e "LH" em português cria uma assinatura estatística que pode identificar autorais ou origem geográfica de um texto. Isso é útil mas tem limitações sérias. Textos muito curtos (
200 palavras) produzem distributions tão instáveis que a técnica perde poder discriminativo. Além disso, textos traduzidos ou imitativos comprometem completamente a análise.
👉 Clique no botão abaixo para saber mais sobre o assunto!
Implementando reconhecimento de dígrafos
Um pipeline básico em Python para identificação de dígrafos em português: ```python
import re
DIGRAPHS = ['ch', 'lh', 'nh', 'ss', 'rr', 'sc', 'sç', 'xc', 'qu', 'cu']
def find_digraphs(text):
text_lower = text.lower()
found = []
i = 0
while i < len(text_lower) - 1:
pair = text_lower[i:i+2]
if pair in DIGRAPHS:
found.append((pair, i, i+2))
i += 2
else:
i += 1
return found
```
O detalhe importante aqui é o salto de 2 posições após encontrar um dígrafo. Se você não fizer isso, vai contar dígrafos sobrepostos indevidamente. Por exemplo, em "ssso", sem o salto você encontraria "ss" na posição 0 e outro "ss" na posição 1, o que é incorreto fonologicamente. Uma edge case que me aconteceu recentemente foi com a palavra "cresça". O "ç" sozinho já é uma letra com cedilha, mas o "sc" que aparece em "crescer" não é um dígrafo no mesmo sentido — ele se divide em s+c em certas flexões. O tokenizer precisa reconhecer que "sç" em "cresça" e "sc" em "crescer" têm comportamentos diferentes. A solução foi adicionar regras específicas para palavras que contêm c+cedilha, tratando-as como caso especial antes do loop principal de dígrafos.
Quando dígrafos não ajudam
Tratar dígrafos como unidades especiais melhora a qualidade em tarefas específicas como tokenização fonológica e análise de frequência, mas introduz complexidade adicional que nem sempre vale a pena. Para modelos de linguagem modernos baseados em subword tokenization (BPE, WordPiece), a distinção entre dígrafo e par de caracteres independentes muitas vezes se dissolve naturalmente durante o treino. O modelo aprende que "ch" aparece com alta frequência juntos e passa a tratá-los como unidade sem intervenção manual. O custo de manutenção de um dicionário manual de dígrafos é real. Novas palavras importadas, grafias variantes regionais e neologismos exigem atualização constante. Se o seu sistema depende criticamente de correção ortográfica ou reconhecimento fonético, considere usar bibliotecas como GraphemeCL, pt-corenlp ou a segmentação do spaCy para português, que já lidam com granularidade fonológica de forma mais robusta do que uma lista hardcoded de dígrafos.
A regra prática é: implemente dígrafos explicitamente apenas quando o tokenizador padrão falha sistematicamente nos seus dados. Caso contrário, o overhead não justifica o ganho.