Communitygithub.com

regex-vs-llm-structured-text

Cadre décisionnel pour choisir entre les expressions régulières et un LLM lors de l'analyse de texte structuré — commencez par les regex, utilisez le LLM uniquement pour les cas limites à faible confiance.

Qu'est-ce que regex-vs-llm-structured-text ?

Cette compétence fournit un framework décisionnel pratique pour analyser du texte structuré (quiz, formulaires, factures, documents). L'idée centrale est que les expressions régulières (regex) peuvent traiter 95 à 98 % des cas de manière peu coûteuse et déterministe, tandis que les appels LLM coûteux sont réservés aux cas limites restants. Le framework propose une architecture en pipeline hybride : parsing initial par regex, nettoyage du texte, évaluation de la confiance, et validation facultative par LLM pour les éléments à faible score. Il inclut des implémentations Python concrètes (dataclasses, fonctions de scoring, intégration LLM avec un modèle Haiku bon marché) et un exemple de pipeline complet. La compétence s'applique à tous les agents IA (Claude Code, Cursor, Codex, etc.) qui traitent du texte structuré avec des motifs répétitifs, et elle permet de réduire les coûts jusqu'à 95 % par rapport à une approche tout-LLM, tout en maintenant une précision élevée.

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

Demander à votre IA préférée

Ouvre une nouvelle conversation avec cette compétence d'agent déjà préchargée.

Documentation

Regex vs LLM pour l'Analyse de Texte Structuré

Cadre décisionnel pratique pour analyser du texte structuré (quiz, formulaires, factures, documents). L'idée clé : les regex traitent 95-98 % des cas de manière peu coûteuse et déterministe. Réservez les appels LLM coûteux aux cas limites restants.

Quand l'Activer

  • Analyse de texte structuré avec motifs répétitifs (questions, formulaires, tableaux)
  • Décision entre regex et LLM pour l'extraction de texte
  • Construction de pipelines hybrides combinant les deux approches
  • Optimisation du rapport coût/précision dans le traitement de texte

Cadre Décisionnel

Le format du texte est-il cohérent et répétitif ?
├── Oui (>90 % suit un motif) → Commencez par les Regex
│   ├── Les Regex gèrent 95%+ → Terminé, aucun LLM nécessaire
│   └── Les Regex gèrent <95 % → Ajoutez un LLM pour les cas limites uniquement
└── Non (texte libre, très variable) → Utilisez directement le LLM

Architecture du Pipeline

Texte Source
    │
    ▼
[Analyseur Regex] ─── Extrait la structure (95-98 % de précision)
    │
    ▼
[Nettoyeur de Texte] ─── Supprime le bruit (marqueurs, numéros de page, artefacts)
    │
    ▼
[Scoreur de Confiance] ─── Signale les extractions à faible confiance
    │
    ├── Haute confiance (≥0.95) → Sortie directe
    │
    └── Faible confiance (<0.95) → [Validateur LLM] → Sortie

Implémentation

1. Analyseur Regex (Gère la Majorité)

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]:
    """Analyse le texte structuré à l'aide de motifs 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. Score de Confiance

Signale les éléments pouvant nécessiter une révision par LLM :

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

def score_confidence(item: ParsedItem) -> ConfidenceFlag:
    """Score la confiance de l'extraction et signale les problèmes."""
    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]:
    """Retourne les éléments en dessous du seuil de confiance."""
    flags = [score_confidence(item) for item in items]
    return [f for f in flags if f.score < threshold]

3. Validateur LLM (Cas Limites Uniquement)

def validate_with_llm(
    item: ParsedItem,
    original_text: str,
    client,
) -> ParsedItem:
    """Utilise un LLM pour corriger les extractions à faible confiance."""
    response = client.messages.create(
        model="claude-haiku-4-5-20251001",  # Modèle le moins cher pour la validation
        max_tokens=500,
        messages=[{
            "role": "user",
            "content": (
                f"Extrayez la question, les choix et la réponse de ce texte.\n\n"
                f"Texte : {original_text}\n\n"
                f"Extraction actuelle : {item}\n\n"
                f"Retournez un JSON corrigé si nécessaire, ou 'CORRECT' si exact."
            ),
        }],
    )
    # Analyse de la réponse du LLM et retour de l'élément corrigé...
    return corrected_item

4. Pipeline Hybride

def process_document(
    content: str,
    *,
    llm_client=None,
    confidence_threshold: float = 0.95,
) -> list[ParsedItem]:
    """Pipeline complet : regex → vérification de confiance → LLM pour les cas limites."""
    # Étape 1 : Extraction par regex (gère 95-98 %)
    items = parse_structured_text(content)

    # Étape 2 : Score de confiance
    low_confidence = identify_low_confidence(items, confidence_threshold)

    if not low_confidence or llm_client is None:
        return items

    # Étape 3 : Validation par LLM (uniquement pour les éléments signalés)
    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étriques Réelles

D'après un pipeline de production d'analyse de quiz (410 éléments) :

MétriqueValeur
Taux de succès des regex98,0 %
Éléments à faible confiance8 (2,0 %)
Appels LLM nécessaires~5
Économies vs tout-LLM~95 %
Couverture des tests93 %

Bonnes Pratiques

  • Commencez par les regex — même une regex imparfaite vous donne une base de référence à améliorer
  • Utilisez le score de confiance pour identifier programmatiquement ce qui nécessite l'aide du LLM
  • Utilisez le LLM le moins cher pour la validation (les modèles de classe Haiku sont suffisants)
  • Ne mutez jamais les éléments analysés — retournez de nouvelles instances lors des étapes de nettoyage/validation
  • Le TDD fonctionne bien pour les analyseurs — écrivez d'abord des tests pour les motifs connus, puis pour les cas limites
  • Enregistrez les métriques (taux de succès des regex, nombre d'appels LLM) pour surveiller la santé du pipeline

Anti-Patterns à Éviter

  • Envoyer tout le texte à un LLM alors que les regex gèrent 95 %+ des cas (coûteux et lent)
  • Utiliser les regex pour du texte libre très variable (le LLM est meilleur ici)
  • Omettre le score de confiance et espérer que les regex « fonctionnent comme ça »
  • Muter les objets analysés pendant les étapes de nettoyage/validation
  • Ne pas tester les cas limites (entrée mal formée, champs manquants, problèmes d'encodage)

Quand l'Utiliser

  • Analyse de questions d'examen/quiz
  • Extraction de données de formulaires
  • Traitement de factures/reçus
  • Analyse de structure de documents (en-têtes, sections, tableaux)
  • Tout texte structuré avec motifs répétitifs où le coût est important

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/claude-api

Anthropic Claude API patterns for Python and TypeScript. Covers Messages API, streaming, tool use, vision, extended thinking, batches, prompt caching, and Claude Agent SDK. Use when building applications with the Claude API or Anthropic SDKs.

affaan-m/everything-claude-code

End-to-end marketing campaign planning and execution. Covers audience research, positioning, campaign angle definition, landing page copy, email sequences, social posts, ad copy, short-form video scripts, and content calendars. Use as the orchestration layer for multi-channel product launches. Use when planning or executing a multi-channel product launch, or producing landing page, email, social, or ad copy.

affaan-m/everything-claude-code

Development conventions and patterns for everything-claude-code. JavaScript project with conventional commits.

affaan-m/everything-claude-code-conventions

Development conventions and patterns for everything-claude-code. JavaScript project with conventional commits.

affaan-m/frontend-design

Create distinctive, production-grade frontend interfaces with high design quality. Use when the user asks to build web components, pages, or applications and the visual direction matters as much as the code quality.

affaan-m/gget

gget CLI and Python workflow for quick genomic database queries, sequence lookup, BLAST-style searches, enrichment checks, and reproducible bioinformatics evidence logs.

affaan-m/literature-review

Systematic literature-review workflow for academic, biomedical, technical, and scientific topics, including search planning, source screening, synthesis, citation checks, and evidence logging.

affaan-m/motion-ui

Production-ready UI motion system for React/Next.js. Use when implementing animations, transitions, or motion patterns.

affaan-m/project-guidelines-example

Example project-specific skill template based on a real production application.

affaan-m/pubmed-database

Direct PubMed and NCBI E-utilities search workflows for biomedical literature, MeSH queries, PMID lookup, citation retrieval, and API-backed literature monitoring.

affaan-m/scholar-evaluation

Structured scholarly-work evaluation for papers, proposals, literature reviews, methods sections, evidence quality, citation support, and research-writing feedback.

affaan-m/uspto-database

USPTO patent and trademark data workflow for official record lookup, PatentSearch queries, TSDR checks, assignment data, and reproducible IP research logs.

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.

Skills associés