//Comparativo

Jev vs expressão regular: quando cada um ganha

A documentação oficial concorda com o time de engenharia mais cético: o que o código pode calcular exatamente não deveria virar pergunta para um modelo.

Toda equipe tem alguém que reage a “vamos usar IA para isso” com a pergunta certa: não dá para resolver com uma expressão regular? Na maior parte das vezes, essa pessoa está certa, e a documentação oficial da TypeSafe está do lado dela. A lista de coisas a evitar, na página de limites do jev-1.13, abre com esta: não peça ao modelo algo que o código pode calcular exatamente.

Este comparativo existe para desenhar a fronteira — e para mostrar o desenho em que os dois trabalham juntos, que é o mais útil dos três.

A tarefa

Tirar de um texto livre um valor que o sistema vai usar: um e-mail, um telefone, um valor monetário. Um recibo, uma mensagem de cliente, um documento digitalizado.

O contrato de cada lado

Expressão regularJev (jev-1.13.0)
No que se baseiaForma: o padrão de caracteresSentido: o critério que você escreveu
ResultadoDeterminístico; a mesma entrada dá sempre a mesma saídaProbabilístico, com distribuição e confiança
Como se lê a incertezaNão existe: casou ou não casouPela confiança da resposta
CustoGratuito, local, microssegundosUS$ 0,042 por milhão de tokens de entrada, com saída gratuita
Custo de manutençãoCresce a cada caso de borda adicionadoUma frase por opção
O que falhaVariação não prevista de formatoJulgamento que o critério não descreve

Onde a regex ganha

Esta seção é curta porque o argumento é forte e não precisa de rodeio.

Quando o padrão é estável, ela é imbatível. CPF, CNPJ, CEP, código de rastreio, número de nota fiscal, placa. Formato fechado, verificação aritmética disponível, resposta exata.

Ela é determinística. Em auditoria, essa propriedade vale mais que acurácia: você pode reexecutar hoje e daqui a cinco anos com o mesmo resultado, sem depender de versão de modelo. E aliases de modelo se movem — a página oficial avisa que jev-latest passa a apontar para a versão nova quando ela sai.

Ela é gratuita e local. Sem rede, sem chave, sem limite de taxa, sem fornecedor. Em um laço sobre milhões de linhas, isso decide sozinho.

Ela é testável até o fim. Um conjunto de casos cobre o comportamento inteiro. Nenhum modelo probabilístico oferece isso.

Ela conta e compara. Contagem de ocorrências e comparação de datas estão entre os nove modos de falha declarados do jev-1.13: o modelo não conta de forma confiável e lê data como texto, não como quantidade ordenada. Isso é trabalho de código, e está detalhado em limites do Jev.

Onde o Jev ganha

Quando a pergunta não é sobre a forma. Um recibo tem três e-mails: o do remetente, o do campo de cópia e um citado no corpo como destino do reembolso. A regex acha os três com folga — e não tem como saber qual deles é o certo, porque a resposta está no sentido da frase que cita o terceiro.

Quando “parecido” é a regra. “Esta mensagem é uma reclamação?” não tem padrão de caracteres. Qualquer regex que tente isso vira uma lista de palavras que envelhece em um mês.

Quando o caso de borda é infinito. Toda regex de nome de empresa, endereço ou descrição de produto termina como um monstro com dezoito alternativas e um comentário pedindo desculpas. Um critério escrito em uma frase envelhece melhor.

Quando você precisa saber que não tem certeza. A regex casa ou não casa. O modelo devolve confiança, e a faixa duvidosa pode ir para uma pessoa, como em revisão humana.

O desenho que usa os dois

É o mais importante desta página, e vem da receita oficial de extração de valores pré-processados.

A regex acha os candidatos com folga, aceitando falsos positivos. Uma pergunta de escolha seleciona o trecho certo entre os candidatos encontrados, com uma opção de escape para o caso de nenhum servir. O código copia o trecho escolhido e normaliza.

A propriedade que esse desenho compra é a que mais importa em extração: como o conjunto de respostas possíveis são os próprios trechos achados, o valor devolvido é um deles copiado sem alteração. Não há como inventar valor nem trocar um dígito.

No experimento publicado, com o modelo jev-1.12, o e-mail do recibo saiu como [email protected] com confiança 0,98, contrariando o endereço do campo de destinatário por causa do pedido escrito no corpo; o celular (415) 555-0177 saiu com confiança 1,00 e país US com 0,90, normalizado para +14155550177; o total de US$ 1.315,50 foi classificado como cobrança com probabilidade de crédito 0,01, e um valor de US$ 50,00 como crédito com 0,99.

O cookbook também registra os dois limites do desenho: uma pergunta de escolha aceita no máximo 255 opções, então acima disso a seleção vira duas etapas; e achar os candidatos é o trabalho difícil — e-mail, telefone e valor têm regex, nome de pessoa não tem. A receita completa está em extrair valores.

Como escolher

  • Se o padrão é fixo e verificável, é regex. Sem discussão, e a documentação oficial concorda.
  • Se a decisão depende do sentido da frase, é o modelo.
  • Se a regex acha vários candidatos e você precisa do certo, use os dois: a regex gera as opções, o modelo escolhe, o código normaliza.
  • Se você está escrevendo a décima alternativa de uma regex, pare: esse é o sinal de que a tarefa virou julgamento.
  • Se a saída precisa ser texto novo, nenhum dos dois serve. Vale lembrar que esses modelos de texto escrevem e o Jev só decide.

O índice desta seção fica em comparativos, e a página que reúne todas as fronteiras é quando não usar o Jev.

Perguntas frequentes

Quando a expressão regular é melhor?

Quando o padrão é estável e o acerto é verificável: CPF, CEP, código de rastreio, número de nota fiscal, formato de data fixo. Ela é determinística, gratuita, roda offline e sempre devolve o mesmo resultado. A própria documentação da TypeSafe diz para evitar perguntar ao modelo algo que o código pode calcular exatamente.

Quando a regex não dá conta?

Quando a decisão depende de sentido, não de forma. Qual dos três e-mails encontrados no texto é o do destinatário do reembolso? Este valor é uma cobrança ou um crédito? Nenhuma expressão regular responde a isso, porque a resposta não está no formato do trecho.

Dá para usar os dois juntos?

É o desenho da receita oficial de extração de valores: a regex acha os candidatos com folga, uma pergunta de escolha seleciona o trecho certo entre eles e o código copia e normaliza. Como o modelo só escolhe entre trechos achados, o valor devolvido é um deles copiado sem alteração.

Esse desenho impede o modelo de inventar um valor?

Sim, por construção, e é o ponto principal. O conjunto de respostas possíveis são os próprios trechos que a regex encontrou, mais uma opção de escape. Não há como inventar valor nem trocar um dígito.

Existe limite de candidatos?

Sim: uma pergunta de escolha aceita no máximo 255 opções. Acima disso, a escolha vira duas etapas. O próprio cookbook registra esse limite.

Quer dominar decisões com IA em português? O curso da comunidade está em pré-venda.

Garantir pré-venda por R$ 499,00

Pré-venda: R$ 499,00 · Após o lançamento: R$ 799,00