Como usar Claude para extrair dados estruturados de textos desorganizados
- Authors

- Name
- ThePromptEra Editorial
O Problema: Dados Presos em Textos
Você tem emails de feedback de clientes, transcrições de chamadas de vendas, artigos de pesquisa ou avaliações de usuários espalhados por documentos. A informação que você precisa está lá — detalhes de contato, feedback de produtos, sentimento, métricas importantes — mas está tudo emaranhado em linguagem natural, com erros de digitação, inconsistências de formatação e contexto irrelevante.
Extrair manualmente é perder tempo. Expressões regulares quebram em casos extremos. Ferramentas de parsing padrão travam na ambiguidade. É aqui que Claude brilha. Seu entendimento de linguagem consegue navegar em textos bagunçados do mundo real e extrair exatamente o que você precisa em formatos limpos e utilizáveis.
Por Que Claude Vence Ferramentas Tradicionais de Extração
Claude não exige padrões predefinidos ou esquemas rígidos. Ele entende o contexto, lida com frases ambíguas e tolera inconsistências — as marcas registradas de dados do mundo real. Dê uma tarefa a ele, e ele se adapta.
Quando você combina Claude com modo JSON (que força saída em JSON válido) e requisições estruturais claras, você consegue extração confiável que funciona mesmo quando os dados de origem são bagunçados, incompletos ou formatados de formas inesperadas.
Configurando Seu Prompt de Extração
O fundamento da extração bem-sucedida é uma requisição clara e estruturada. Aqui está a fórmula:
1. Defina o esquema logo no início
Diga ao Claude exatamente quais campos você quer e o que eles contêm. Seja específico sobre tipos de dados e casos extremos:
Extraia as seguintes informações em JSON:
- nome (string): Nome completo, se presente
- email (string): Endereço de email, se presente
- empresa (string): Nome da empresa ou organização
- telefone (string): Número de telefone em formato E.164, ou null se não presente
- sentimento (string): Um de "positivo", "negativo", "neutro"
- problemas_principais (array de strings): Principais problemas mencionados, máximo 5 itens
2. Mostre exemplos quando o esquema é complexo
Não apenas descreva — demonstre:
Exemplo de entrada:
"Oi pessoal, saí de uma call com a Sarah Martinez da Acme Corp.
Ela está frustrada com os tempos de resposta da API.
Email: sarah@acme.io, celular é +1-415-555-0192.
Diz que seus competidores são mais rápidos.
Mas ela adora a documentação."
Saída esperada:
{
"nome": "Sarah Martinez",
"email": "sarah@acme.io",
"empresa": "Acme Corp",
"telefone": "+14155550192",
"sentimento": "misto",
"problemas_principais": ["Tempos de resposta da API"]
}
3. Lide com dados faltantes explicitamente
Diga ao Claude o que fazer quando uma informação não está presente:
Para qualquer campo não encontrado no texto, use null (não strings vazias ou "N/A").
Se o sentimento não for claro, defina como "neutro".
Exemplo do Mundo Real: Extração de Feedback de Clientes
Digamos que você está processando tickets de suporte ao cliente e precisa extrair dados acionáveis:
Preciso extrair dados estruturados de tickets de suporte ao cliente.
Extraia:
- id_ticket (string): Número de referência, se presente
- nome_cliente (string): Nome completo
- categoria_problema (string): Uma de "cobrança", "técnico", "solicitação_recurso",
"documentação", "outro"
- urgencia (string): "crítica", "alta", "média", "baixa" baseado no tom/linguagem
- descricao (string): Resumo conciso do problema em 1-2 frases
- status_resolucao (string): "não_resolvido" por padrão, a menos que explicitamente mencionado
- itens_acao (array): Próximos passos específicos mencionados ou implícitos
Retorne apenas JSON válido, sem formatação markdown.
## Texto do ticket:
#TICKET-8847
Cliente: Michael Chen
"Estou tentando há TRÊS DIAS arrumar minha fatura.
Seu sistema de cobrança me cobrou duas vezes pela assinatura de novembro.
Já enviei email para o suporte duas vezes e não recebi resposta.
Isto é ridículo. Preciso resolver isto imediatamente.
Também, sua documentação é completamente confusa sobre como solicitar reembolso."
---
Claude vai extrair:
{
"id_ticket": "TICKET-8847",
"nome_cliente": "Michael Chen",
"categoria_problema": "cobrança",
"urgencia": "crítica",
"descricao": "Cliente foi cobrado duas vezes pela assinatura de novembro.
Emails de suporte anteriores não foram respondidos.",
"status_resolucao": "não_resolvido",
"itens_acao": [
"Investigar cobrança duplicada no sistema de faturamento",
"Emitir reembolso pela segunda cobrança",
"Revisar tickets de suporte sem resposta",
"Melhorar documentação sobre solicitação de reembolso"
]
}
Escalando: Processamento em Lote
Quando você tem centenas ou milhares de itens, processe-os eficientemente:
Opção 1: Enviar vários itens de uma vez
Inclua vários exemplos em uma única chamada de API, separados claramente:
Processe cada ticket abaixo. Retorne um array de objetos JSON.
---TICKET 1---
[texto do ticket]
---TICKET 2---
[texto do ticket]
---TICKET 3---
[texto do ticket]
A resposta deve ser um array JSON válido como: [{ id_ticket: "...", ... }, ...]
Opção 2: Processamento em stream para grandes volumes
Para datasets realmente massivos, processe em lotes de 10 a 50 itens por chamada de API. Isso mantém a latência razoável e os custos previsíveis.
Técnicas Avançadas
Scoring de confiança: Adicione um campo confianca (0-1) para indicar quão certo Claude está sobre os dados extraídos. Útil para identificar resultados que precisam de revisão manual:
"nome": "John Smith",
"confianca": 0.95,
"telefone": "555-0123",
"confianca_telefone": 0.6
Estruturas aninhadas: Para dados complexos, não achate tudo. Use JSON aninhado:
{
"cliente": {
"nome": "Jane Doe",
"contato": {
"email": "jane@example.com",
"telefone": "+1-800-555-0100"
}
},
"pedido": {
"id": "PED-12345",
"itens": [{ "produto": "Widget", "quantidade": 2, "preco": 29.99 }]
}
}
Extração condicional: Alguns campos só importam em certos contextos. Deixe isto explícito:
Se o texto menciona um problema de produto, também extraia:
- produto_afetado (string)
- versao (string ou null): Versão do produto, se mencionada
- contorno (string ou null): Qualquer solução temporária sugerida
Caso contrário, omita estes campos.
Armadilhas Comuns e Como Evitá-las
Armadilha 1: Descrições de campo vagas
❌ Ruim: "Extraia sentimento" ✅ Bom: "Sentimento deve ser 'positivo', 'negativo' ou 'neutro'. Sentimentos mistos padrão para 'neutro'. Base-se no tom geral, não em frases isoladas."
Armadilha 2: Sem orientação sobre dados parciais
❌ Ruim: "Extraia nome, email, telefone" ✅ Bom: "Extraia nome, email, telefone. Qualquer campo não presente deve ser null, não string vazia."
Armadilha 3: Requisições de formatação inconsistentes
Especifique formatos com precisão: datas (ISO 8601), números de telefone (E.164), moeda (centavos como inteiro), etc.
Armadilha 4: Misturar extração com transformação
Mantenha a extração pura. Não peça ao Claude para "extrair e também calcular taxa de crescimento" na mesma chamada. Extraia primeiro, transforme depois.
Testando Seu Prompt de Extração
Antes de escalar, teste com exemplos diversificados:
- Caso normal: Dados limpos e típicos
- Dados faltantes: Informações que não estão presentes
- Caso bagunçado: Erros de digitação, formatação estranha, frases ambíguas
- Caso extremo: Cenários incomuns mas válidos (múltiplos telefones, sem email, etc.)
Execute alguns testes manuais, compare a saída com a verdade absoluta, e refine seu esquema ou prompt baseado nas falhas.
Integração com Seu Workflow
A API do Claude se integra perfeitamente com Python, Node.js ou qualquer cliente HTTP. Aqui está o padrão mínimo:
import json
import anthropic
client = anthropic.Anthropic(api_key="SUA_CHAVE_API")
prompt = "Seu prompt de extração aqui..."
texto = "O texto bagunçado para extrair..."
message = client.messages.create(
model="claude-3-5-sonnet-20241022",
max_tokens=1024,
messages=[
{
"role": "user",
"content": f"{prompt}\n\nTexto para extrair:\n{texto}"
}
]
)
resultado = json.loads(message.content[0].text)
print(resultado)
Quando Usar Claude vs. Outras Ferramentas
Use Claude para:
- Dados de origem ambíguos ou inconsistentes
- Raciocínio complexo sobre o que deve ser extraído
- Extrair de conteúdo misto (texto, tabelas, dados semi-estruturados)
- Tarefas de extração únicas ou ad hoc
Considere alternativas para:
- Dados perfeitamente estruturados e gerados por máquina (regex ou parsers simples)
- Extração em volume extremamente alto com custo mínimo (embora Claude seja competitivo)
- Extração