andreapellizzari.it
Indice diario
388 parole · 2 min

LangExtract: estrazione strutturata da testo, con la prova di dove viene

Un esempio, non un modello addestrato: LangExtract estrae dati strutturati da testo non strutturato e ancora ogni valore all'offset esatto nel documento. L'ho provato sui cataloghi prodotto, ma penso gia' ai DDT di carico.

#ai#estrazione-dati#integrazione#python

C'e' un problema che torna in forme diverse da anni: prendere un testo non strutturato (la riga di un catalogo, un documento di trasporto, una scheda tecnica) e tirarne fuori dati ordinati. La risposta classica e' una regex scritta a mano per ogni caso, fragile, che si rompe appena cambia il formato. Funziona, ma ogni nuovo fornitore vuole la sua.

LangExtract, libreria open source di Google (Apache 2.0), prova un'altra strada. Due ingredienti: gli insegni il pattern con uno o due esempi (niente addestramento, niente dataset etichettato), e ogni valore estratto resta ancorato all'offset di carattere nel documento originale. Questo secondo punto e' quello che mi interessa: non e' solo "il modello ha detto 90 cm", e' "il modello ha trovato 90 cm in questa posizione precisa del testo". Verificabile, e per costruzione non puo' allucinare un valore che nel testo non c'e'.

L'ho messo alla prova sull'agente conversazionale su catalogo che sto costruendo, nella fase di inserimento di un nuovo brand. Oggi ogni serie di prodotti ha la sua regex cucita a mano. Ho dato a LangExtract un solo esempio e l'ho fatto girare su cinque serie diverse di cappe dello stesso costruttore: ha eguagliato le regex su tutto cio' che era effettivamente nel testo. Il dettaglio che mi ha convinto: dove il mio valore "vero" veniva da un default dichiarativo (conoscenza di dominio, non scritta nella descrizione), LangExtract si e' correttamente rifiutato di inventarlo. Ha lasciato il campo vuoto, che e' la cosa onesta.

rendering diagramma…

Lo segno qui soprattutto per il futuro. Il caso ovvio e' l'elaborazione dei DDT di carico, ma vale per qualsiasi documento gestionale dove servirebbe poter dire da dove arriva ogni numero: bolle, schede, output WebAPI da digerire. In un contesto gestionale la tracciabilita' del dato non e' un vezzo, e' la differenza tra un'automazione di cui ti fidi e una che devi ricontrollare a mano.

Due cautele, per onesta'. Lavora sul testo, non sul layout: l'estrazione dal PDF complicato resta un passo a monte. E una chiamata a un modello costa, mentre una regex e' gratis. Per questo lo vedo come motore di voto e disambiguazione (gira a fianco delle regex, alza la mano quando dissente), non come estrattore primario da rilanciare a ogni aggiornamento. Provider-agnostico, fra l'altro: gira anche via OpenRouter, non serve legarsi a un fornitore.