Introducere
În era digitalizării, documentele PDF rămân un format omniprezent, dar adesea dificil de procesat automat. De la facturi și rapoarte financiare până la articole academice și manuale tehnice, PDF-urile conțin informații valoroase îngropate în structuri complexe de layout. Aici intervine Docling Parse, o unealtă puternică care permite extragerea detaliată a conținutului, păstrând în același timp conștientizarea layout-ului. În acest articol, vom explora cum să construim o conductă de parsare care transformă documentele statice în date structurate, gata pentru analiză sau integrare în sisteme de inteligență artificială.
Configurarea mediului
Primul pas este să pregătim un mediu Python stabil. Vom folosi Google Colab pentru simplitate, dar aceleași principii se aplică și pe un server local. Instalăm dependențele necesare, inclusiv Docling Parse, PyMuPDF pentru manipularea PDF-urilor și matplotlib pentru vizualizări. Este important să gestionăm versiunile pentru a evita conflictele, mai ales cu biblioteci precum numpy sau pandas.
```python
!pip install docling-parse pymupdf matplotlib pandas
```
Dacă întâmpini erori de dependență în Colab, o soluție comună este să repornești runtime-ul după instalare sau să folosești un mediu virtual. De asemenea, asigură-te că ai o versiune recentă de Python (3.8+).
Generarea unui PDF personalizat
Pentru a testa conducta, vom crea un PDF cu mai multe pagini care include diverse elemente: text simplu, coloane, conținut asemănător tabelelor, forme vectoriale (cum ar fi linii și cercuri) și o imagine încorporată. Acest lucru ne va permite să evaluăm cât de bine se descurcă Docling Parse cu diferite tipuri de conținut.
Folosind PyMuPDF, putem construi pagină cu pagină:
```python
import fitz
doc = fitz.open()
page = doc.new_page()
page.insert_text((50, 50), "Acesta este un titlu", fontsize=20)
page.insert_text((50, 100), "Text pe coloane...", fontsize=12)
# Adăugăm o imagine
doc.close()
```
Salvăm documentul și îl încărcăm în Docling Parse.
Parsarea cu Docling Parse
Docling Parse oferă o interfață simplă pentru a extrage elemente la nivel de pagină. Inițializăm parserul și procesăm PDF-ul:
```python
from docling_parse import DoclingParse
parser = DoclingParse()
document = parser.parse("document.pdf")
```
Rezultatul este un obiect care conține pagini, fiecare cu o listă de elemente: cuvinte, caractere, linii, imagini etc. Fiecare element are coordonate (x, y, lățime, înălțime) și metadate.
Extragerea cuvintelor, caracterelor și liniilor
Să extragem cuvintele dintr-o pagină:
```python
for page in document.pages:
for word in page.words:
print(word.text, word.bbox)
```
Caracterele sunt și mai detaliate, permițând reconstrucția exactă a textului. Liniile sunt grupuri de cuvinte pe aceeași linie orizontală, utile pentru a păstra ordinea de citire.
Redarea suprapunerilor vizuale
Pentru a verifica acuratețea parsării, putem reda suprapuneri vizuale peste imaginea paginii. Folosim matplotlib pentru a desena dreptunghiuri în jurul elementelor extrase:
```python
import matplotlib.pyplot as plt
from PIL import Image
img = Image.open("page.png")
plt.imshow(img)
for word in page.words:
rect = plt.Rectangle((word.bbox.x, word.bbox.y), word.bbox.width, word.bbox.height, fill=False, edgecolor='red')
plt.gca().add_patch(rect)
plt.show()
```
Acest pas este crucial pentru depanare și pentru a înțelege cum parserul interpretează layout-ul.
Salvarea rezultatelor în JSON și CSV
Odată ce avem datele, le putem structura pentru utilizare ulterioară. JSON este ideal pentru stocarea ierarhică, iar CSV pentru analize tabelare:
```python
import json
import csv
with open("output.json", "w") as f:
json.dump(document.to_dict(), f, indent=2)
with open("output.csv", "w", newline="") as f:
writer = csv.writer(f)
writer.writerow(["text", "x", "y", "width", "height"])
for page in document.pages:
for word in page.words:
writer.writerow([word.text, word.bbox.x, word.bbox.y, word.bbox.width, word.bbox.height])
```
Analiza layout-ului și reconstrucția ordinii de citire
Unul dintre cele mai puternice aspecte ale Docling Parse este capacitatea de a reconstrui ordinea de citire. Prin analiza pozițiilor relative ale elementelor, putem determina fluxul logic al textului, chiar și în layout-uri complexe cu coloane sau tabele. Acest lucru este esențial pentru aplicații precum extragerea de informații sau alimentarea modelelor de limbaj.
De exemplu, dacă avem un document cu două coloane, parserul poate identifica că textul din coloana stângă trebuie citit înaintea celui din dreapta, chiar dacă coordonatele y se suprapun.
Pregătirea documentelor pentru regăsire
Datele extrase pot fi folosite pentru a crea indexuri de căutare sau pentru a antrena modele de machine learning. Prin salvarea coordonatelor și a textului, putem reconstrui documentul original sau putem rula interogări precise. De exemplu, putem găsi toate cuvintele care apar într-o anumită regiune a paginii, util pentru analiza formularelor sau a facturilor.
Concluzie
În acest tutorial, am văzut cum Docling Parse transformă PDF-urile în date structurate, păstrând conștientizarea layout-ului. De la configurarea mediului și generarea unui PDF personalizat până la extragerea detaliată și salvarea în formate standard, conducta construită este robustă și flexibilă. Această abordare deschide uși pentru aplicații avansate de inteligență documentară, cum ar fi analiza automată a contractelor, extragerea de date din rapoarte financiare sau integrarea în sisteme de regăsire a informațiilor.
De ce este important:
Parsarea conștientă de layout este esențială pentru a extrage sensul real din documente complexe. Fără ea, am pierde contextul spațial care face diferența între un titlu și o notă de subsol, sau între o coloană de text și un tabel. Docling Parse oferă o soluție accesibilă și puternică pentru a aduce inteligența documentelor la un nou nivel, facilitând automatizarea și analiza în domenii precum finanțe, juridic, educație și cercetare.