Vai al contenuto
LeedyBox
Sostieni

Estrarre il testo da un PDF: livelli di testo e OCR

Alcuni PDF consegnano il loro testo in un secondo; altri contengono solo immagini delle pagine e richiedono l’OCR. Questa guida spiega come è memorizzato il testo in un PDF, perché il testo estratto può uscire illeggibile o in disordine, come l’OCR legge le pagine scansionate e che cosa ne influenza la precisione, e che cosa controllare prima di fidarti del risultato.

Due tipi di pagine PDF

Una pagina PDF può contenere testo in due modi. La maggior parte dei PDF esportati da un elaboratore di testi, da un browser o da un programma di grafica ha un livello di testo: ogni carattere è memorizzato come codice di un font e collocato in un punto della pagina. Una pagina scansionata o fotografata è diversa: è un’unica immagine della pagina, e per un software le lettere che contiene sono solo pixel.

Tipo di paginaCome è stata creataChe cosa restituisce l’estrazione
PDF di testoEsportato o stampato in PDF da un’applicazioneI caratteri memorizzati, di solito identici
PDF scansionatoScanner, fotocamera del telefono o faxNiente, finché l’OCR non legge l’immagine
Scansione ricercabileUna scansione a cui è stato aggiunto in seguito un livello di testo OCRQuel risultato OCR, con i suoi errori
Testo convertito in tracciatiTesto trasformato in forme in un programma di graficaNessun carattere; solo l’OCR può leggerlo

Di solito un lettore PDF ti dice di che tipo si tratta. Se riesci a selezionare una singola parola o a trovarla con la ricerca, la pagina ha un livello di testo. Se trascinando si seleziona l’intera pagina come un blocco, o la ricerca non trova nulla, la pagina è un’immagine. Uno stesso file può contenere entrambi, come una relazione scritta al computer con allegati scansionati.

Come funziona l’estrazione del livello di testo

Un PDF non memorizza paragrafi. Memorizza frammenti di caratteri, ciascuno con un font e una posizione, spesso una parola o poche lettere alla volta, nell’ordine scelto dal programma che ha creato il file. Un estrattore legge questi frammenti e ricostruisce le righe dalle loro posizioni.

Lo strumento Da PDF a testo di LeedyBox legge i frammenti con PDF.js, il motore PDF di Firefox. Inizia una nuova riga quando la posizione verticale cambia di più di 5 punti (circa 1,8 mm) e altrimenti unisce i frammenti con uno spazio; ogni pagina del risultato inizia con un indicatore come --- Pagina 1 ---. La maggior parte dei documenti a una colonna esce leggibile, con qualche effetto collaterale:

  • Una parola memorizzata in più frammenti, per esempio per la spaziatura delle lettere, può uscire con spazi all’interno.
  • Colonne, box laterali e didascalie compaiono nell’ordine in cui sono memorizzati, che può essere diverso dall’ordine di lettura.
  • Apici, richiami di nota e altro testo posto più in alto o più in basso della riga possono formare una riga a sé.
  • Intestazioni, piè di pagina e numeri di pagina fanno parte del testo di ogni pagina.

Perché il testo estratto può risultare illeggibile

All’interno di un PDF il testo è memorizzato come codici dei glifi di un font, non come caratteri Unicode. Per riconvertire i codici in lettere, il file ha bisogno di una tabella di corrispondenza. I PDF ben fatti includono una tabella ToUnicode per ogni font, e i font con una codifica standard si possono decodificare anche senza. I problemi nascono quando un font è incorporato come sottoinsieme con una numerazione propria e senza tabella: fuori dal file i codici non significano nulla, e l’estrazione produce lettere sbagliate, simboli o quadratini vuoti anche se la pagina si vede bene.

I font cinesi, giapponesi e coreani usano spesso mappe di caratteri predefinite (CMap), come Adobe-Japan1 o Adobe-Korea1, invece di tabelle proprie. Lo strumento LeedyBox carica queste CMap insieme a PDF.js e legge così correttamente molti documenti dell’Asia orientale che estrattori più semplici rovinano. Altre cause comuni sono le legature, come fi memorizzata come un solo glifo, i font Type 3, le cui lettere sono disegnate come forme e spesso non hanno tabella, e i PDF la cui codifica è stata rimescolata di proposito per rendere difficile la copia.

Quando una pagina ha un livello di testo, lo strumento lo usa, anche se quel testo è illeggibile, e non esegue l’OCR su quella pagina. Per leggere una pagina del genere con l’OCR, convertila in immagine con Da PDF a JPG e leggi l’immagine con Da immagine a testo (OCR).

Quando lo strumento LeedyBox usa l’OCR

Lo strumento decide pagina per pagina. Se il livello di testo di una pagina ha meno di 15 caratteri, la pagina viene disegnata come immagine al doppio delle dimensioni normali, circa 144 pixel per pollice, e letta da Tesseract.js nella lingua scelta in «Lingua OCR» insieme all’inglese. In un documento con pagine scritte al computer e pagine scansionate, quindi, le prime vengono lette esattamente e solo le scansioni passano per l’OCR.

Una pagina scansionata con pochi caratteri dovuti a un timbro o a un numero di pagina è comunque considerata vuota e passa per l’OCR. Una scansione che ha già un livello di testo di 15 caratteri o più, invece, no: un livello OCR di scarsa qualità aggiunto dallo scanner esce così com’è. Il motore OCR e i suoi dati di lingua vengono scaricati da leedybox.com la prima volta che l’OCR viene eseguito, quindi la prima pagina scansionata richiede più tempo. Il tuo PDF viene letto nel browser e non viene caricato online.

Come l’OCR trasforma i pixel in testo

L’OCR lavora per fasi. Il motore converte prima l’immagine in bianco e nero e individua blocchi di testo, righe e parole, un passaggio chiamato segmentazione della pagina. Poi una rete neurale addestrata su una lingua o una scrittura legge ogni riga e sceglie la sequenza di caratteri più probabile, aiutandosi con gli elenchi di parole della lingua. Il risultato è una stima, non una copia: forme simili come 0 e O, 1, l e I, o rn e m possono essere confuse, e le parole assenti dai dati della lingua vengono lette male più spesso.

La lingua conta più di qualsiasi altra opzione. Un modello addestrato sull’alfabeto latino non può leggere il thailandese o il giapponese, e il testo in una lingua non selezionata esce di solito con caratteri sbagliati. Tutte le opzioni dello strumento LeedyBox tranne «Solo inglese» combinano la lingua scelta con l’inglese, il che aiuta con i documenti misti, come un contratto in italiano con nomi di prodotti in inglese.

Che cosa influenza la precisione dell’OCR

FattoreEffettoChe cosa aiuta
RisoluzioneI caratteri piccoli perdono i dettagli che distinguono le lettereScansionare a 300 DPI o più; di più per i caratteri piccoli
Inclinazione e curvaturaRighe storte e pagine di libro incurvate confondono il rilevamento delle righeScansionare piatto e dritto; fotografare dall’alto in verticale
Contrasto e rumoreSfondi grigi, macchie, trasparenze del retro e artefatti JPEG sembrano trattiScansioni pulite con testo scuro su sfondo bianco
FontI font decorativi, molto sottili o molto spessi vengono letti male più spessoControllare il risultato con attenzione
Scrittura a manoTesseract è addestrato su testo stampatoAspettarsi risultati scarsi; meglio digitare il testo
Testo verticaleIl giapponese o il cinese scritto in verticale viene spesso letto maleControllare con attenzione o ridigitare

Poiché lo strumento disegna le pagine a circa 144 pixel per pollice, i caratteri piccoli, come le note a piè di pagina o le clausole in piccolo di un contratto, possono essere difficili da leggere anche da una buona scansione. Per queste pagine, Da PDF a JPG produce immagini a risoluzione più alta, e Da immagine a testo (OCR) può rileggere il testo piccolo a dimensione doppia e aumentare il contrasto prima del riconoscimento.

Tabelle, colonne e impaginazione

Il risultato è testo semplice. Le tabelle perdono la griglia, le pagine a più colonne possono uscire colonna per colonna o riga per riga attraverso le colonne, e caselle di testo e didascalie finiscono dove il file o il motore OCR le ha collocate nell’ordine di lettura. Riconoscere le parole e ricostruire un’impaginazione sono problemi diversi, e lo strumento risolve solo il primo. Per le tabelle di numeri, verifica ogni valore sull’originale o ridigita la tabella in un foglio di calcolo; per i documenti lunghi, ricostruisci titoli e paragrafi nel tuo editor dopo aver estratto il testo.

Controllare e ripulire il risultato

  • Confronta alcuni numeri, nomi e date con l’originale: gli errori di OCR nelle cifre sfuggono facilmente.
  • Cerca le confusioni tipiche: 0 e O, 1, l e I, 5 e S, rn e m, e gli accenti mancanti.
  • Riunisci le parole divise con il trattino a fine riga e le righe spezzate all’interno dei paragrafi.
  • Elimina gli indicatori di pagina, le intestazioni e i numeri di pagina se ti serve un testo continuo.
  • Conserva il risultato con «Copia testo» o «Salva come .TXT»; il file salvato è testo semplice in UTF-8.

Domande frequenti

Perché una pagina esce vuota?

La pagina non aveva un livello di testo e l’OCR non ha trovato nulla di leggibile: la scansione può essere bianca, molto sbiadita o troppo piccola, oppure il testo è scritto a mano. Prova con una scansione più nitida, oppure converti la pagina con Da PDF a JPG e usa Da immagine a testo con le opzioni di contrasto e ingrandimento.

Lo strumento legge i PDF protetti da password?

Non un PDF che chiede una password all’apertura: in quel caso mostra un errore. Se ne hai il diritto, apri il file con la password in un lettore PDF e salva prima una copia non protetta.

Lo strumento può creare un PDF ricercabile?

No. Il risultato è testo semplice che puoi copiare o salvare come file .txt, e il PDF non viene modificato. I programmi che creano PDF ricercabili aggiungono un livello di testo OCR invisibile sopra ogni pagina scansionata.

Perché l’OCR è lento con i documenti lunghi?

Ogni pagina scansionata viene disegnata come immagine e riconosciuta nel tuo browser, una dopo l’altra, dopo il download del motore OCR e dei dati di lingua. Su un dispositivo più lento una pagina può richiedere alcuni secondi o più. Le pagine con un livello di testo sono molto più veloci perché non richiedono il riconoscimento.