Pular para o conteúdo
Skillpedia
Agentes280 mil · #116

regex-vs-llm-structured-text

Faz seu agente escolher a melhor forma de ler textos como formulários ou notas. Ele usa regras simples ou inteligência artificial para extrair informações.

O que ela faz

Este sistema ajuda a decidir a melhor forma de extrair informações de textos que seguem um padrão, como questionários ou recibos. Ele usa uma abordagem combinada: primeiro tenta extrair a maior parte das informações com um método rápido e barato (regex) e só recorre a uma inteligência artificial mais avançada (LLM) para corrigir os poucos casos que o método rápido não conseguiu resolver.

Quando usar

  • ✓Quando você tem muitos documentos com o mesmo formato para extrair dados.
  • ✓Ao decidir se usa um método simples (regex) ou um mais complexo (LLM) para ler textos.
  • ✓Para economizar dinheiro e tempo ao extrair informações de documentos.

Exemplo do que pedir para a IA

“Como posso extrair as perguntas e respostas de um arquivo de provas que tem um formato repetitivo?”

Quer saber mais? Abra as seções abaixo.

Como usar

O jeito mais fácil: copie a mensagem abaixo e cole no Claude, ChatGPT, Cursor ou outra IA. Ela lê a skill e segue as instruções.

Link da skill

https://github.com/affaan-m/ECC/blob/main/pi/core/skills/regex-vs-llm-structured-text/SKILL.md

Mensagem pronta para colar

Use esta skill para me ajudar: https://github.com/affaan-m/ECC/blob/main/pi/core/skills/regex-vs-llm-structured-text/SKILL.md Leia o arquivo SKILL.md desse link e siga as instruções dele na minha tarefa.
Como funciona

Primeiro, ele usa um padrão de busca (regex) para encontrar e extrair a maioria das informações. Depois, verifica se a extração foi confiável. Se não foi, ele usa uma inteligência artificial (LLM) para corrigir apenas os casos problemáticos.

Instalação

Jeito mais fácil: copie o link da skill e cole no Claude, ChatGPT ou Cursor pedindo para seguir as instruções.

No terminal (Claude Code, Codex, Cursor), na pasta do projeto:

npx skills add affaan-m/ECC --skill regex-vs-llm-structured-text

Ou baixe só o arquivo:

curl -L https://raw.githubusercontent.com/affaan-m/ECC/main/pi/core/skills/regex-vs-llm-structured-text/SKILL.md -o SKILL.md
Conteúdo técnico (SKILL.md)

Tradução do texto original do autor no GitHub. Os comandos e códigos estão como no original.

Regex vs. LLM para Análise de Texto Estruturado

Um framework de decisão prático para analisar texto estruturado (questionários, formulários, faturas, documentos). A principal percepção: regex lida com 95-98% dos casos de forma barata e determinística. Reserve chamadas caras de LLM para os casos extremos restantes.

Quando Ativar

  • Analisar texto estruturado com padrões repetitivos (perguntas, formulários, tabelas)
  • Decidir entre regex e LLM para extração de texto
  • Construir pipelines híbridos que combinam ambas as abordagens
  • Otimizar trade-offs de custo/precisão no processamento de texto

Framework de Decisão

Is the text format consistent and repeating?
├── Yes (>90% follows a pattern) → Start with Regex
│   ├── Regex handles 95%+ → Done, no LLM needed
│   └── Regex handles <95% → Add LLM for edge cases only
└── No (free-form, highly variable) → Use LLM directly

Padrão de Arquitetura

Source Text
    │
    ▼
[Regex Parser] ─── Extracts structure (95-98% accuracy)
    │
    ▼
[Text Cleaner] ─── Removes noise (markers, page numbers, artifacts)
    │
    ▼
[Confidence Scorer] ─── Flags low-confidence extractions
    │
    ├── High confidence (≥0.95) → Direct output
    │
    └── Low confidence (<0.95) → [LLM Validator] → Output

Implementação

1. Analisador Regex (Lida com a Maioria)

import re
from dataclasses import dataclass

@dataclass(frozen=True)
class ParsedItem:
    id: str
    text: str
    choices: tuple[str, ...]
    answer: str
    confidence: float = 1.0

def parse_structured_text(content: str) -> list[ParsedItem]:
    """Parse structured text using regex patterns."""
    pattern = re.compile(
        r"(?P<id>\d+)\.\s*(?P<text>.+?)\n"
        r"(?P<choices>(?:[A-D]\..+?\n)+)"
        r"Answer:\s*(?P<answer>[A-D])",
        re.MULTILINE | re.DOTALL,
    )
    items = []
    for match in pattern.finditer(content):
        choices = tuple(
            c.strip() for c in re.findall(r"[A-D]\.\s*(.+)", match.group("choices"))
        )
        items.append(ParsedItem(
            id=match.group("id"),
            text=match.group("text").strip(),
            choices=choices,
            answer=match.group("answer"),
        ))
    return items

2. Pontuação de Confiança

Marcar itens que podem precisar de revisão por LLM:

@dataclass(frozen=True)
class ConfidenceFlag:
    item_id: str
    score: float
    reasons: tuple[str, ...]

def score_confidence(item: ParsedItem) -> ConfidenceFlag:
    """Score extraction confidence and flag issues."""
    reasons = []
    score = 1.0

    if len(item.choices) < 3:
        reasons.append("few_choices")
        score -= 0.3

    if not item.answer:
        reasons.append("missing_answer")
        score -= 0.5

    if len(item.text) < 10:
        reasons.append("short_text")
        score -= 0.2

    return ConfidenceFlag(
        item_id=item.id,
        score=max(0.0, score),
        reasons=tuple(reasons),
    )

def identify_low_confidence(
    items: list[ParsedItem],
    threshold: float = 0.95,
) -> list[ConfidenceFlag]:
    """Return items below confidence threshold."""
    flags = [score_confidence(item) for item in items]
    return [f for f in flags if f.score < threshold]

3. Validador LLM (Apenas Casos Extremos)

def validate_with_llm(
    item: ParsedItem,
    original_text: str,
    client,
) -> ParsedItem:
    """Use LLM to fix low-confidence extractions."""
    response = client.messages.create(
        model="claude-haiku-4-5-20251001",  # Cheapest model for validation
        max_tokens=500,
        messages=[{
            "role": "user",
            "content": (
                f"Extract the question, choices, and answer from this text.\n\n"
                f"Text: {original_text}\n\n"
                f"Current extraction: {item}\n\n"
                f"Return corrected JSON if needed, or 'CORRECT' if accurate."
            ),
        }],
    )
    # Parse LLM response and return corrected item...
    return corrected_item

4. Pipeline Híbrido

def process_document(
    content: str,
    *,
    llm_client=None,
    confidence_threshold: float = 0.95,
) -> list[ParsedItem]:
    """Pipeline completo: regex -> verificação de confiança -> LLM para casos extremos."""
    # Passo 1: Extração com Regex (lida com 95-98%)
    items = parse_structured_text(content)

    # Passo 2: Pontuação de confiança
    low_confidence = identify_low_confidence(items, confidence_threshold)

    if not low_confidence or llm_client is None:
        return items


…
Perguntas frequentes

Por que não usar apenas a inteligência artificial (LLM) para tudo?

Usar apenas a IA pode ser caro e lento. Este método é mais eficiente porque a maior parte do trabalho é feita por um método mais simples e rápido, reservando a IA para os casos mais difíceis.

O que é 'regex'?

Regex (expressão regular) é uma sequência de caracteres que forma um padrão de busca. É como uma 'receita' para encontrar textos específicos dentro de um documento maior.

Quando devo usar apenas a IA (LLM) sem regex?

Se o texto não tem um padrão claro e é muito variado (como um bate-papo livre), a IA sozinha é a melhor opção.

Detalhes

Descrição original do autor

Decision framework for parsing structured text (quizzes, forms, invoices, receipts, tables) with a hybrid regex-first pipeline — regex extraction handles 95%+ cheaply, a confidence scorer flags low-confidence items, and an LLM validator fixes only the edge cases. Use when choosing between regex and LLM for text extraction, building a cheap document parser, or optimizing extraction cost and accurac

repo: affaan-m/ECC

Popularidade

Estrelas no GitHub
280 mil
Posição no ranking
#116
Licença
MIT
Atualizada em
15/10/2026

Essa skill é útil?

0

Entre para votar.

Comentários

  • …

Mais skills deste repositório

Skills parecidas