
💡 Se vuoi vedere il codice per questo progetto, controlla il mio repository: https://github.com/sasha-korovkina/pdfUnderlinedExtractor
L'estrazione dei dati dai PDF può essere un vero grattacapo e diventa ancora più complicata quando si tenta di catturare il testo sottolineato: che ci crediate o no, non esistono soluzioni o librerie di riferimento che gestiscano questa operazione immediatamente. Ma non preoccuparti, sono qui per mostrarti come affrontare questo problema.
La teoria
L'estrazione del testo sottolineato dai PDF può richiedere diversi percorsi. Potresti prendere in considerazione l'utilizzo dell'OCR per rilevare componenti di testo con profitti o approfondire le funzionalità di markup di PyMuPDF. Tuttavia, ho scoperto che l'OCR tende a vacillare, soffrendo di incoerenza e bassa precisione. PyMuPDF non è nemmeno il mio preferito: richiede una meticolosa regolazione dei parametri, che richiede molto tempo. Inoltre, un'impostazione sbagliata e potresti perdere un sacco di dati.
È importante ricordare che i PDF sono:
- Dati non strutturati: Gli elementi PDF spesso non sono raggruppati o categorizzati, il che complica gli sforzi di ricerca sistematica nel contenuto.
- Riconoscimento della formattazione del testo: Rilevare formati di testo specifici come grassetto o sottolineato è notoriamente difficile nei PDF, poiché la maggior parte delle librerie Python non supporta questa funzionalità in modo efficace.
Ma non temere, poiché abbiamo una strategia per risolvere questo problema.
La strategia
- Converti il PDF in XML strutturato: inizia trasformando il documento PDF in un formato XML strutturato per facilitare la manipolazione dei dati.
- Estrai i componenti desiderati: identifica e isola i componenti specifici dall'XML che sono rilevanti per le nostre esigenze.
- Utilizza l'OCR (riconoscimento ottico dei caratteri) sulle coordinate estratte per ottenere i dati di testo sottolineati come un array.
- Estrai e genera testo sottolineato: infine, estrai il testo sottolineato dal documento e visualizza o stampa i risultati.
Il codice
- Da PDF a XML
Utilizzeremo il pdfquery libreria, il convertitore da PDF a XML più completo che abbia mai incontrato.
2. Studiare l'XML
L'XML ha alcuni componenti chiave che ci interessano:
- LTRect — a volte, la libreria analizza il testo sottolineato come un rettangolo di larghezza minima sotto il testo
- LTLine — altre volte, riconoscerebbe il contorno come un componente di linea separato.
Esempio del componente LTRect:
<LTRect y0="563.787" y1="629.964" x0="367.942" x1="473.826" width="105.884" height="66.178" bbox="(367.942, 563.787, 473.826, 629.964)" linewidth="0" pts="((367.942, 629.964), (473.826, 629.964), (473.826, 563.787), (367.942, 563.787))">
Pertanto, convertendo l'intero documento in formato XML, possiamo replicare la sua struttura come componenti XML, facciamo proprio questo!
Replica della struttura
Ora ricreeremo la struttura del nostro documento come coordinate del riquadro di delimitazione. Per fare ciò, analizzeremo l'XML per definire la pagina, i riquadri dei componenti, le linee e i rettangoli, quindi disegneremo il tutto sulla nostra tela in 3 colori diversi.
Ecco il nostro PDF iniziale, è stato generato in Microsoft Word, esportando un documento con alcune sottolineature nel formato file PDF:
Dopo aver applicato l'algoritmo sopra, ecco la rappresentazione visiva che otteniamo:
Questa immagine rappresenta la struttura del nostro documento, dove la scatola nera è usata per descrivere tutti i componenti della pagina, e quella blu è usata per descrivere gli elementi LTRect, da qui il testo sottolineato.
Sovrapposizione di testo
Ora visualizziamo tutto il testo all'interno del PDF nelle rispettive posizioni, con la seguente riga di codice:
can.drawString(text_x, text_y, text)
Ecco l'output:
Tieni presente che il testo non è esattamente dove si trovava nel documento originale, a causa della differenza di dimensioni e carattere del linguaggio di markup nella libreria pdfquery.
Estrazione coordinata
Come risultato del nostro XML, avremo un array di coordinate delle regioni sottolineate, nel mio caso l'ho chiamato underline_text.
Estrazione del testo
Ecco il processo:
- Identifichiamo i rettangoli di coordinate come precedentemente determinato.
- Estraiamo queste sezioni dal PDF.
- Applichiamo Tesseract OCR per estrarre il testo da ciascuna sezione estratta.
Questo metodo per estrarre testo dai PDF utilizzando rettangoli di coordinate e Tesseract OCR è efficace per diversi motivi:
- Precisione nell'estrazione del testo: identificando specifici rettangoli di coordinate, il processo prende di mira solo le aree rilevanti del PDF. Questo approccio mirato evita l'elaborazione non necessaria dell'intero documento e riduce gli errori legati all'estrazione del testo indesiderato.
- Efficienza: L'estrazione delle sezioni predefinite direttamente dal PDF è molto più veloce dell'elaborazione dell'intero documento. Questo metodo consente di risparmiare tempo e risorse di calcolo, particolarmente utile quando si ha a che fare con documenti di grandi dimensioni.
- Precisione con OCR: Tesseract OCR è un robusto strumento di riconoscimento ottico dei caratteri in grado di convertire immagini di testo in testo leggibile dalla macchina. Alimentando sezioni precise di testo, può funzionare in modo più accurato poiché gestisce meno rumore di fondo e problemi di formattazione che potrebbero confondere il processo OCR in documenti più grandi e non segmentati.
E questo è il codice:
Assicurati di aver tesseract installato sul tuo sistema prima di eseguire questa funzione. Per istruzioni approfondite, consulta la guida di installazione ufficiale qui: https://github.com/tesseract-ocr/tessdoc/blob/main/Installation.md o nel mio repository GitHub qui: https://github.com/sasha-korovkina/pdfUnderlinedExtractor.
Mettere tutto insieme…
Ora, se prendiamo un file PDF, come questo file di esempio:
Abbiamo alcune parole sottolineate in questo file:
Dopo aver eseguito il codice sopra descritto, ecco cosa otteniamo:
Dopo aver ottenuto questo array, puoi utilizzare queste parole per ulteriori elaborazioni!
Divertiti a usare questo script! Mi piacerebbe conoscere eventuali applicazioni creative che ti vengono in mente o se desideri contribuire. Fammi sapere! ❤️
Fonte: towardsdatascience.com