Communitygithub.com

regex-vs-llm-structured-text

Marco de decisión para elegir entre expresiones regulares y LLM al analizar texto estructurado: comienza con regex, agrega LLM solo para casos extremos de baja confianza.

¿Qué es regex-vs-llm-structured-text?

Esta habilidad proporciona un marco de decisión práctico y una arquitectura híbrida para el análisis de texto estructurado (como exámenes, formularios, facturas o documentos). La idea central es que las expresiones regulares (regex) manejan de manera eficiente y determinista entre el 95% y el 98% de los casos, reservando las costosas llamadas a modelos de lenguaje grandes (LLM) solo para aquellos casos extremos con baja confianza. El flujo de trabajo típico comienza con un analizador basado en regex para extraer la estructura principal, seguido de un limpiador de texto, un puntuador de confianza que identifica ítems problemáticos, y finalmente un validador LLM (opcional) que se activa solo para los ítems con confianza inferior a un umbral definido (por ejemplo, 0.95). La habilidad incluye fragmentos de código Python listos para usar, métricas de un caso real (98% de éxito con regex y 95% de ahorro de costos), y cubre mejores prácticas, anti-patrones y escenarios de uso recomendados. Es compatible con cualquier stack que combine Python con APIs de LLM (como Claude, Haiku, etc.) y es ideal para desarrolladores que buscan optimizar costo/rendimiento en pipelines de procesamiento de texto.

Compatible con✓Claude Code~Codex CLI~Cursor
npx skills add https://github.com/affaan-m/ECC/tree/main/skills/regex-vs-llm-structured-text

Preguntar en tu IA favorita

Abre un nuevo chat con esta habilidad de agente ya precargada.

Documentación

Regex vs LLM para Análisis de Texto Estructurado

Un marco de decisión práctico para analizar texto estructurado (exámenes, formularios, facturas, documentos). La idea clave: las expresiones regulares (regex) manejan el 95-98% de los casos de forma económica y determinista. Reserve las costosas llamadas a LLM para los casos extremos restantes.

Cuándo activarlo

  • Analizar texto estructurado con patrones repetitivos (preguntas, formularios, tablas)
  • Decidir entre regex y LLM para extracción de texto
  • Construir pipelines híbridos que combinen ambos enfoques
  • Optimizar la relación costo/precisión en el procesamiento de texto

Marco de Decisión

¿El formato del texto es consistente y se repite?
├── Sí (>90% sigue un patrón) → Comience con Regex
│   ├── Regex maneja 95%+ → Listo, no necesita LLM
│   └── Regex maneja <95% → Agregue LLM solo para casos extremos
└── No (texto libre, muy variable) → Use LLM directamente

Patrón de Arquitectura

Texto Fuente
    │
    ▼
[Analizador Regex] ─── Extrae estructura (95-98% de precisión)
    │
    ▼
[Limpiador de Texto] ─── Elimina ruido (marcadores, números de página, artefactos)
    │
    ▼
[Puntuador de Confianza] ─── Marca extracciones de baja confianza
    │
    ├── Alta confianza (≥0.95) → Salida directa
    │
    └── Baja confianza (<0.95) → [Validador LLM] → Salida

Implementación

1. Analizador Regex (Maneja la Mayoría)

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]:
    """Analiza texto estructurado usando patrones regex."""
    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. Puntuación de Confianza

Marque los ítems que pueden necesitar revisión del LLM:

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

def score_confidence(item: ParsedItem) -> ConfidenceFlag:
    """Puntúa la confianza de la extracción y marca problemas."""
    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]:
    """Devuelve los ítems por debajo del umbral de confianza."""
    flags = [score_confidence(item) for item in items]
    return [f for f in flags if f.score < threshold]

3. Validador LLM (Solo Casos Extremos)

def validate_with_llm(
    item: ParsedItem,
    original_text: str,
    client,
) -> ParsedItem:
    """Usa LLM para corregir extracciones de baja confianza."""
    response = client.messages.create(
        model="claude-haiku-4-5-20251001",  # Modelo más barato para validación
        max_tokens=500,
        messages=[{
            "role": "user",
            "content": (
                f"Extrae la pregunta, las opciones y la respuesta de este texto.\n\n"
                f"Texto: {original_text}\n\n"
                f"Extracción actual: {item}\n\n"
                f"Devuelve el JSON corregido si es necesario, o 'CORRECT' si es correcto."
            ),
        }],
    )
    # Analiza la respuesta del LLM y devuelve el ítem corregido...
    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 -> verificación de confianza -> LLM para casos extremos."""
    # Paso 1: Extracción con regex (maneja el 95-98%)
    items = parse_structured_text(content)

    # Paso 2: Puntuación de confianza
    low_confidence = identify_low_confidence(items, confidence_threshold)

    if not low_confidence or llm_client is None:
        return items

    # Paso 3: Validación con LLM (solo para los ítems marcados)
    low_conf_ids = {f.item_id for f in low_confidence}
    result = []
    for item in items:
        if item.id in low_conf_ids:
            result.append(validate_with_llm(item, content, llm_client))
        else:
            result.append(item)

    return result

Métricas del Mundo Real

De un pipeline de análisis de exámenes en producción (410 ítems):

MétricaValor
Tasa de éxito de regex98.0%
Ítems de baja confianza8 (2.0%)
Llamadas a LLM necesarias~5
Ahorro de costos vs. solo LLM~95%
Cobertura de pruebas93%

Mejores Prácticas

  • Comience con regex — incluso un regex imperfecto le da una línea base para mejorar
  • Use puntuación de confianza para identificar programáticamente qué necesita ayuda del LLM
  • Use el LLM más barato para la validación (los modelos de clase Haiku son suficientes)
  • Nunca mutar los ítems analizados — devuelva nuevas instancias de los pasos de limpieza/validación
  • TDD funciona bien para analizadores — primero escriba pruebas para patrones conocidos, luego para casos extremos
  • Registre métricas (tasa de éxito de regex, cantidad de llamadas a LLM) para monitorear la salud del pipeline

Anti-Patrones a Evitar

  • Enviar todo el texto a un LLM cuando regex maneja el 95%+ de los casos (costoso y lento)
  • Usar regex para texto libre, altamente variable (el LLM es mejor aquí)
  • Omitir la puntuación de confianza y esperar que regex "simplemente funcione"
  • Mutar objetos analizados durante los pasos de limpieza/validación
  • No probar casos extremos (entrada mal formada, campos faltantes, problemas de codificación)

Cuándo Usarlo

  • Análisis de preguntas de exámenes/pruebas
  • Extracción de datos de formularios
  • Procesamiento de facturas/recibos
  • Análisis de estructura de documentos (encabezados, secciones, tablas)
  • Cualquier texto estructurado con patrones repetitivos donde el costo importa

Individual skills in this repo

This repo contains 20 individual skills — each has its own dedicated page.

accessibility

Design, implement, and audit inclusive digital products using WCAG 2.2 Level AA. Use when building or auditing UI that must meet WCAG 2.2 Level AA, or when reviewing a change for keyboard, contrast, or screen-reader support.

affaan-m/content-engine

Create platform-native content systems for X, LinkedIn, TikTok, YouTube, newsletters, and repurposed multi-platform campaigns. Use when the user wants social posts, threads, scripts, content calendars, or one source asset adapted cleanly across platforms.

affaan-m/ECC

Multi-platform content distribution across X, LinkedIn, Threads, and Bluesky. Adapts content per platform using content-engine patterns. Never posts identical content cross-platform. Use when the user wants to distribute content across social platforms.

affaan-m/fal-ai-media

Unified media generation via fal.ai MCP — image, video, and audio. Covers text-to-image (Nano Banana), text/image-to-video (Seedance, Kling, Veo 3), text-to-speech (CSM-1B), and video-to-audio (ThinkSound). Use when the user wants to generate images, videos, or audio with AI.

affaan-m/manim-video

日本語翻訳:このファイルは manim-video 用の日本語翻訳が必要です

affaan-m/remotion-video-creation

Remotion のベストプラクティス - React で動画を作成する。3D、アニメーション、音声、字幕、チャート、トランジションなどをカバーするドメイン固有の29のルール。

affaan-m/video-editing

AI-assisted video editing workflows for cutting, structuring, and augmenting real footage. Covers the full pipeline from raw capture through FFmpeg, Remotion, ElevenLabs, fal.ai, and final polish in Descript or CapCut. Use when the user wants to edit video, cut footage, create vlogs, or build video content.

agent-architecture-audit

Full-stack diagnostic for agent and LLM applications. Audits the 12-layer agent stack for wrapper regression, memory pollution, tool discipline failures, hidden repair loops, and rendering corruption. Produces severity-ranked findings with code-first fixes. Essential for developers building agent applications, autonomous loops, or any LLM-powered feature. Use when an agent or LLM feature misbehaves and the failing layer is unknown, or before shipping an agent stack.

agent-eval

Head-to-head comparison of coding agents (Claude Code, Aider, Codex, etc.) on custom tasks with pass rate, cost, time, and consistency metrics. Use when choosing between coding agents, or when a change to an agent setup needs measured pass rate, cost, and time rather than an impression.

agent-harness-construction

Design and optimize AI agent action spaces, tool definitions, and observation formatting for higher completion rates. Use when defining or revising an agent

agentic-engineering

Operate as an agentic engineer using eval-first execution, decomposition, and cost-aware model routing. Use when planning or executing engineering work that agents will carry out end to end.

agentic-os

Build persistent multi-agent operating systems on Claude Code. Covers kernel architecture, specialist agents, slash commands, file-based memory, scheduled automation, and state management without external databases. Use when building a persistent multi-agent system on Claude Code with its own memory, commands, and scheduling.

agent-introspection-debugging

Structured self-debugging workflow for AI agent failures using capture, diagnosis, contained recovery, and introspection reports. Use when an agent run fails and you need a reproducible diagnosis instead of a retry.

agent-payment-x402

Add x402 payment execution to AI agents with per-task budgets, spending controls, and non-custodial wallets. Supports Base through agentwallet-sdk and X Layer through OKX Payments / OKX Agent Payments Protocol. Use when an agent must pay for something itself and needs per-task budgets, spending controls, and a non-custodial wallet.

agent-self-evaluation

Use after completing any non-trivial task. The agent self-rates its output on 5 axes — accuracy, completeness, clarity, actionability, conciseness — with concrete evidence per criterion. Produces a structured 1-5 scorecard with specific improvement suggestions.

agent-sort

Build an evidence-backed ECC install plan for a specific repo by sorting skills, commands, rules, hooks, and extras into DAILY vs LIBRARY buckets using parallel repo-aware review passes. Use when ECC should be trimmed to what a project actually needs instead of loading the full bundle.

ai-first-engineering

Engineering operating model for teams where AI agents generate a large share of implementation output. Use when setting team process, review gates, or ownership rules for a codebase largely written by agents.

ai-regression-testing

Regression testing strategies for AI-assisted development. Sandbox-mode API testing without database dependencies, automated bug-check workflows, and patterns to catch AI blind spots where the same model writes and reviews code. Use when adding regression coverage to AI-assisted code, or when the same model both wrote and reviewed a change.

android-clean-architecture

Clean Architecture patterns for Android and Kotlin Multiplatform projects — module structure, dependency rules, UseCases, Repositories, and data layer patterns. Use when structuring modules, layers, or data flow in an Android or KMP project.

angular-developer

Generates Angular code and provides architectural guidance. Trigger when creating projects, components, or services, or for best practices on reactivity (signals, linkedSignal, resource), forms, dependency injection, routing, SSR, accessibility (ARIA), animations, styling (component styles, Tailwind CSS), testing, or CLI tooling.

Skills relacionados