Z PDF do tekstu dla AI. Jak wybrać odpowiednie narzędzie do ekstrakcji danych?
Jakość ekstrakcji danych z plików PDF ma bezpośredni wpływ na dokładność wyników generowanych przez AI. Podczas budowy systemu przetwarzania dokumentów dla BetterRegulation odkryliśmy, że prosta ekstrakcja tekstu może zajmować od 40% do 60% okna kontekstu artefaktami pochodzącymi z plików PDF. Po przetestowaniu API OpenAI, tradycyjnych bibliotek Pythona i Unstructured.io zmniejszyliśmy liczbę tokenów o 30% i znacząco poprawiliśmy jakość kategoryzacji dokumentów. W artykule przedstawiamy najważniejsze wnioski z tego procesu.
W tym artykule:
- Dlaczego ekstrakcja danych z PDF jest wyzwaniem?
- Dlaczego pliki PDF są tak trudne dla AI?
- Jak wypadają różne podejścia do ekstrakcji danych z PDF?
- Jak działa Unstructured.io?
- Jak pogodzić wydajność, koszty i wymagania infrastrukturalne?
- Jakie wyniki osiągnęliśmy w środowisku produkcyjnym?
- Alternatywne narzędzia do ekstrakcji danych z PDF
- Jak dobrać narzędzie do ekstrakcji danych z PDF?
- Chcesz usprawnić proces przetwarzania plików PDF?
Dlaczego ekstrakcja danych z PDF jest wyzwaniem?
Gdy rozpoczynaliśmy budowę systemu przetwarzania dokumentów dla BetterRegulation, szybko przekonaliśmy się, że zdecydowana większość materiałów źródłowych ma postać plików PDF. Umowy, raporty, specyfikacje, regulacje i artykuły naukowe, które musieliśmy przetworzyć, były dostarczane głównie w formacie PDF.
Szybko jednak zidentyfikowaliśmy problem: format PDF nie jest dobrze przystosowany do automatycznego przetwarzania treści przez systemy AI.
Format PDF zaprojektowano przede wszystkim z myślą o zachowaniu wyglądu dokumentu podczas wyświetlania i drukowania, a nie o ekstrakcji tekstu i odczycie maszynowym. Pliki PDF zapisują informacje o położeniu elementów, czcionkach, kolorach i układzie strony, ale nie zawsze odzwierciedlają semantyczną strukturę dokumentu.
Prosta ekstrakcja tekstu z pliku PDF często daje chaotyczne wyniki, które wymagają dalszego przetwarzania. Nagłówki i stopki pojawiają się na każdej stronie, numery stron wplatają się w środek zdań, a znaki wodne mieszają się z właściwą treścią. Tekst wielokolumnowy może zostać odczytany od lewej do prawej, bez zachowania kolejności poszczególnych kolumn. Przypisy przerywają akapity w przypadkowych miejscach, a dane tabelaryczne tracą swoją strukturę. Wynik mogą dodatkowo zaśmiecać informacje o formatowaniu i metadane pliku. Podziały wierszy pojawiają się w przypadkowych miejscach, niekiedy dzieląc słowa na części.
Przykład prostej ekstrakcji tekstu z pliku PDF:
Enterprise Risk Assessment Q3 2024 Page 1 of 45
Executive Sum- The following report Confidential
mary provides a compre-
hensive overview of
Risk Factors enterprise risk ex- Risk Category
Financial Risk posures identifi High
ed during Q3 2024
Operational Risk audit procedures. Medium
Compliance Risk High
Enterprise Risk Assessment Q3 2024 Page 2 of 45
[continues with more broken text...]Początkowo właśnie taki tekst przekazywaliśmy do modelu AI. W efekcie model otrzymywał niepełny lub zaburzony kontekst i częściej popełniał błędy podczas kategoryzacji dokumentów.
Czego AI faktycznie potrzebuje:
Executive Summary
The following report provides a comprehensive overview of enterprise
risk exposures identified during Q3 2024 audit procedures.
Risk Factors:
- Financial Risk: High
- Operational Risk: Medium
- Compliance Risk: HighAI potrzebuje czystego, uporządkowanego i czytelnego tekstu, który możliwie wiernie odzwierciedla strukturę oraz znaczenie dokumentu.
Warto również przeczytać artykuł Automatyzacja przetwarzania dokumentów z użyciem AI w Drupalu z dokładnością 95%: case study.
Dlaczego pliki PDF są tak trudne dla AI?
Zrozumienie problemów związanych z formatem PDF pokazuje, dlaczego wybór odpowiedniego narzędzia do ekstrakcji ma tak duże znaczenie dla dalszego przetwarzania przez AI. Poniżej opisujemy cztery główne wyzwania, które napotkaliśmy.
1. Markery formatowania i metadane
Pliki PDF zawierają informacje o położeniu elementów, czcionkach i układzie strony, które nie należą do właściwej treści dokumentu:
/F1 12 Tf % Font size 12
(Executive Summary) Tj
72 650 Td % Position at coordinates
/F2 10 Tf % Font size 10
(The following report...) TjTakie elementy mogą zajmować od 30% do 50% okna kontekstu informacjami, które nie należą do właściwej treści dokumentu.
2. Złożone układy
Układy wielokolumnowe, pola tekstowe i panele boczne są często zapisywane jako osobne obiekty tekstowe ze współrzędnymi, bez jednoznacznej informacji o logicznej kolejności czytania:
[Column 1 text] [Column 2 text]
[More Col 1] [More Col 2]Prosta ekstrakcja odczytuje tekst od lewej do prawej: > “Column 1 text Column 2 text More Col 1 More Col 2”
Prawidłowa kolejność czytania: > “Column 1 text More Col 1” a potem “Column 2 text More Col 2”
3. Osadzona treść
Obrazy, wykresy, tabele, nagłówki, stopki i numery stron mogą być osadzone jako osobne obiekty. Prosta ekstrakcja może uwzględnić wszystkie te elementy, wprowadzając niepotrzebny szum, albo pominąć część istotnej treści.
4. Zmienna struktura
Sposób zapisania struktury treści może się znacząco różnić między poszczególnymi plikami PDF. Rozwiązanie wystarczające dla prostych raportów może nie poradzić sobie z dokumentami prawnymi zawierającymi rozbudowane przypisy i cytowania, specyfikacjami technicznymi z tabelami i diagramami, zeskanowanymi dokumentami wymagającymi OCR czy formularzami o określonej strukturze. Każdy typ dokumentu wymaga innej strategii ekstrakcji.
Jak niska jakość ekstrakcji wpływa na wyniki AI?
Konsekwencje niedokładnej ekstrakcji danych z PDF są poważne. W naszych testach artefakty pochodzące z plików PDF zajmowały od 40% do 60% okna kontekstu, ograniczając miejsce dostępne dla właściwej treści. Model może interpretować numery stron, nagłówki i elementy formatowania tak, jakby stanowiły istotną część treści. Prowadzi to do błędów takich jak pomylone kolumny, przerwane zdania, brakujący kontekst i niepoprawna kategoryzacja dokumentów. W efekcie część kosztu przetwarzania przypada na dane, które nie wnoszą wartości do analizy dokumentu.
Jak wypadają różne podejścia do ekstrakcji danych z PDF?
Przetestowaliśmy trzy główne podejścia, zanim wybraliśmy nasze rozwiązanie.
1. Bezpośrednie przesłanie pliku PDF do API modelu
Jak to działa: plik PDF jest przesyłany bezpośrednio do API OpenAI, a model odpowiada za odczytanie i przetworzenie jego zawartości.
Było to nasze pierwsze podejście, ponieważ pozwalało przygotować prostą wersję rozwiązania przy użyciu jednego wywołania API. Rozwiązanie jest szybkie we wdrożeniu i nie wymaga dodatkowej infrastruktury, dlatego dobrze nadaje się do tworzenia prototypów. Prostota tego podejścia ma jednak swoje ograniczenia. Kontrola nad sposobem odczytywania dokumentu jest ograniczona, część artefaktów może pozostać w kontekście, a diagnozowanie problemów z ekstrakcją staje się trudniejsze. Przy większej skali rozwiązanie może być droższe od narzędzi utrzymywanych we własnej infrastrukturze i zwiększa zależność od usług jednego dostawcy. To podejście najlepiej sprawdza się przy prostych plikach PDF, niskim wolumenie przetwarzania lub prototypach, w których szybkość wdrożenia jest ważniejsza niż koszt i kontrola nad procesem.
2. Biblioteki Pythona do obsługi PDF, takie jak PyPDF2 i pdfplumber
Jak to działa: biblioteki Pythona parsują strukturę PDF i wyodrębniają tekst.
W kolejnym kroku sprawdziliśmy, czy rozwiązania open source zapewnią nam większą kontrolę nad procesem ekstrakcji.
Przykład:
import PyPDF2
with open("document.pdf", "rb") as file:
reader = PyPDF2.PdfReader(file)
text = ""
for page in reader.pages:
text += page.extract_text()Biblioteki te są dostępne jako oprogramowanie open source i mogą działać w całości lokalnie, dzięki czemu dobrze sprawdzają się w prostych zastosowaniach. W podstawowym wariancie implementacja wymaga zaledwie kilku linii kodu w Pythonie. Jakość ekstrakcji przy bardziej złożonych dokumentach jest jednak ograniczona. Biblioteki te mają znaczne ograniczenia przy złożonych układach, nie oferują automatycznego czyszczenia artefaktów PDF i wymagają ręcznej obsługi tekstu wielokolumnowego, tabel i innych elementów strukturalnych. Uzyskanie użytecznego wyniku może wymagać rozbudowanego przetwarzania końcowego. Sprawdzają się przy prostych, jednokolumnowych plikach PDF z minimalnym formatowaniem. Bardziej złożone dokumenty wymagają innego narzędzia.
3. Unstructured.io (nasz ostateczny wybór)
Jak to działa: biblioteka do przetwarzania dokumentów, która łączy analizę układu, OCR i ekstrakcję tekstu z zachowaniem struktury.
Po przeanalizowaniu ograniczeń wcześniejszych rozwiązań wybraliśmy Unstructured.io, które najlepiej odpowiadało naszym wymaganiom.
Przykład:
from unstructured.partition.pdf import partition_pdf
elements = partition_pdf("document.pdf")
clean_text = "\n\n".join([el.text for el in elements])W naszych testach Unstructured.io zapewniało najwyższą jakość ekstrakcji i najlepiej radziło sobie ze złożonymi układami dokumentów. Narzędzie umożliwia analizę układu, obsługę OCR oraz zachowanie elementów struktury dokumentu. Jest dostępne jako oprogramowanie open source, a jego dostawca oferuje również usługi komercyjne. Bibliotekę Pythona można zainstalować za pomocą pip i wykorzystywać bezpośrednio w kodzie aplikacji. W systemach produkcyjnych wymagających dostępu przez API można uruchomić ją jako usługę we własnej infrastrukturze, na przykład z wykorzystaniem Dockera i Kubernetes. Trzeba jednak uwzględnić zależności systemowe wymagane przez zaawansowane funkcje, takie jak OCR, i poświęcić czas na poznanie opcji konfiguracji. W naszym przypadku dodatkowy nakład pracy był uzasadniony ze względu na złożoność dokumentów, skalę przetwarzania i wymagania środowiska produkcyjnego. Z tych powodów wybraliśmy Unstructured.io dla systemu BetterRegulation.
Warto również przeczytać artykuł AI Automators w Drupalu: jak tworzyć wieloetapowe workflow AI.
Jak działa Unstructured.io?
Unstructured.io stało się podstawą naszego procesu ekstrakcji. Poniżej przedstawiamy najważniejsze wnioski dotyczące jego działania i konfiguracji.
Jak to działa
Unstructured.io łączy wiele zaawansowanych technik w celu wyodrębnienia czystego, ustrukturyzowanego tekstu z PDF-ów. Zaczyna od analizy układu, identyfikując kolumny, nagłówki, stopki i panele boczne, a następnie ustala logiczną kolejność czytania, aby oddzielić główną treść od elementów pobocznych. Podczas ekstrakcji tekstu zachowuje strukturę dokumentu, utrzymując granice akapitów i sekcji, oraz prawidłowo obsługuje układy wielokolumnowe, z którymi prostsze narzędzia sobie nie radzą.
Biblioteka klasyfikuje elementy dokumentu jako między innymi Title, NarrativeText, ListItem lub Table. Pozwala to wybrać elementy przeznaczone do dalszego przetwarzania i odfiltrować zbędne dane. Etap czyszczenia może usuwać nagłówki, stopki i numery stron, ograniczać nadmiarowe białe znaki oraz normalizować podziały wierszy. Wynikiem jest tekst lepiej przygotowany do dalszej analizy. W zależności od wybranej strategii i konfiguracji Unstructured.io może wykorzystywać OCR do przetwarzania zeskanowanych stron oraz dokumentów zawierających zarówno tekst cyfrowy, jak i obrazy tekstu.
Uruchomienie we własnej infrastrukturze jako opcjonalny serwer API
Do podstawowego użycia wystarczy zainstalować bibliotekę Pythona poleceniem pip install unstructured. Konfiguracja Dockera i Kubernetes opisana poniżej jest potrzebna tylko wtedy, gdy Unstructured.io ma działać jako serwer API, z którym aplikacja łączy się zdalnie.
Docker Compose (lokalne środowisko deweloperskie):
version: '3'
services:
unstructured-api:
image: downloads.unstructured.io/unstructured-io/unstructured-api:latest
ports:
- "8000:8000"Uruchomienie: docker-compose up
Kubernetes (środowisko produkcyjne):
W systemie BetterRegulation uruchomiliśmy Unstructured.io w klastrze Kubernetes:
apiVersion: apps/v1
kind: Deployment
metadata:
name: unstructured-api
spec:
replicas: 2
selector:
matchLabels:
app: unstructured-api
template:
metadata:
labels:
app: unstructured-api
spec:
containers:
- name: unstructured-api
image: downloads.unstructured.io/unstructured-io/unstructured-api:latest
ports:
- containerPort: 8000
resources:
requests:
memory: "2Gi"
cpu: "1000m"
limits:
memory: "4Gi"
cpu: "2000m"Wymagania infrastrukturalne:
- 2-4 GB RAM na instancję.
- 1-2 rdzenie CPU na instancję.
- Skalowanie horyzontalne przy większym wolumenie.
Konfiguracja dla dokumentów prawnych
Po serii testów dla złożonych dokumentów prawnych wybraliśmy następującą konfigurację:
from unstructured.partition.pdf import partition_pdf
elements = partition_pdf(
filename="document.pdf",
strategy="hi_res", # High-resolution analysis
include_page_breaks=False, # Don't include page break markers
infer_table_structure=True, # Detect and preserve tables
ocr_languages=["eng"], # OCR if needed
extract_images_in_pdf=False, # Skip images (not needed)
model_name="yolox", # Layout detection model
)
# Filter to main content only
main_content = [el for el in elements if el.category in [
"Title",
"NarrativeText",
"ListItem",
"Table"
]]
# Join with appropriate spacing
clean_text = "\n\n".join([el.text for el in main_content])Wyjaśnienie kluczowych parametrów:
Ustawienie strategy="hi_res" uruchamia analizę układu o wyższej dokładności. Proces jest wolniejszy, ale w naszych testach lepiej radził sobie ze złożonymi dokumentami. Ustawienie include_page_breaks=False pomija markery podziału stron, dzięki czemu nie trafiają one do tekstu wynikowego. Ustawienie infer_table_structure=True pozwala wykryć tabele i zachować ich strukturę, zamiast zwracać dane tabelaryczne jako zwykły tekst. Ustawienie extract_images_in_pdf=False pomija ekstrakcję obrazów, gdy przetwarzany ma być wyłącznie tekst, co ogranicza zakres wykonywanych operacji.
Filtrowanie i czyszczenie
Usuwanie konkretnych elementów:
# Filter out headers, footers, page numbers
filtered = [el for el in elements if el.category not in [
"Header",
"Footer",
"PageNumber",
"PageBreak"
]]
# Remove short elements (likely noise)
filtered = [el for el in filtered if len(el.text) > 10]
# Remove elements that are just page numbers or dates
import re
filtered = [el for el in filtered if not re.match(r'^Page \d+$', el.text)]
filtered = [el for el in filtered if not re.match(r'^\d{1,2}/\d{1,2}/\d{4}$', el.text)]Taki poziom kontroli pozwolił nam precyzyjnie określić, które elementy dokumentu trafiają do modelu AI.
Integracja z procesem przetwarzania AI
Unstructured.io zintegrowaliśmy z procesem przetwarzania w następujący sposób:
# Step 1: Extract clean text
def extract_pdf_text(pdf_file):
elements = partition_pdf(
filename=pdf_file,
strategy="hi_res",
include_page_breaks=False,
infer_table_structure=True,
)
# Filter to main content
main_content = [el for el in elements if el.category in [
"Title",
"NarrativeText",
"ListItem"
]]
return "\n\n".join([el.text for el in main_content])
# Step 2: Send to AI
def categorize_document(pdf_file):
clean_text = extract_pdf_text(pdf_file)
prompt = build_categorization_prompt(clean_text)
response = openai.ChatCompletion.create(
model="gpt-4o-mini",
messages=[
{"role": "user", "content": prompt}
]
)
return parse_ai_response(response)Wyraźne rozdzielenie ekstrakcji tekstu od analizy wykonywanej przez AI znacznie ułatwiło diagnozowanie problemów.
Warto również przeczytać artykuł Prompt engineering do ekstrakcji danych: jak osiągnąć 95% dokładności w dokumentach prawnych.
Optymalizacja tekstu wynikowego
Oczyszczenie tekstu znacząco zmniejszyło liczbę tokenów przekazywanych do modelu:
Przed czyszczeniem (z artefaktami PDF):
- Dokument 75-stronicowy: ~65 000 tokenów.
- Zawiera: nagłówki, stopki, numery stron, markery formatowania.
Po czyszczeniu (Unstructured.io):
- Ten sam dokument: ~45 000 tokenów.
- Liczba tokenów mniejsza o 30%, co przy tym samym modelu i sposobie rozliczania oznacza proporcjonalnie niższy koszt tokenów wejściowych.
Zarządzanie oknem kontekstu:
Okno kontekstu modelu GPT-4o-mini, wynoszące 128 tys. tokenów, początkowo wydawało się wystarczające. Przy prostej ekstrakcji tekstu 350-stronicowa ustawa przekraczała jednak ten limit. Po wdrożeniu procesu czyszczenia z użyciem Unstructured.io nawet największe przetwarzane przez nas dokumenty mieściły się w dostępnym oknie kontekstu.
Jak pogodzić wydajność, koszty i wymagania infrastrukturalne?
Poza jakością ekstrakcji wybór narzędzia do przetwarzania plików PDF wpływa na szybkość, koszty i wymagania infrastrukturalne. Poniżej przedstawiamy wnioski z wdrożenia w środowisku produkcyjnym.
Jak szybka jest ekstrakcja PDF?
W środowisku produkcyjnym uzyskaliśmy następujące wyniki:
| Rozmiar dokumentu | Czas ekstrakcji | Całkowite przetwarzanie |
|---|---|---|
| Bardzo mały (2-3 strony) | ~2 sekundy | ~10 sekund |
| Mały (10-20 stron) | ~5 sekund | ~15-20 sekund |
| Średni (50-75 stron) | ~15 sekund | ~30-45 sekund |
| Duży (100-150 stron) | ~30 sekund | ~1 minuta |
| Bardzo duży (200-350 stron) | ~45-60 sekund | ~1,5-2 minuty |
Ekstrakcja zajmowała od 30% do 40% całkowitego czasu przetwarzania, a pozostały czas przypadał na analizę AI.
Warto również przeczytać artykuł Inteligentny routing pytań dla chatbota, czyli jak obniżyliśmy koszty API AI o 95%.
Ile kosztuje ekstrakcja PDF?
SaaS Unstructured.io:
- 0,10-0,20 USD za dokument.
- Brak kosztów infrastruktury.
- Płatność za użycie.
Unstructured.io utrzymywane we własnej infrastrukturze:
- Infrastruktura: ~50-100 USD/miesiąc (pod Kubernetes).
- Przetwarzanie: brak opłat za dokument.
- Próg rentowności: ~250-500 dokumentów/miesiąc.
Przy naszym wolumenie, przekraczającym 200 dokumentów miesięcznie, utrzymywanie rozwiązania we własnej infrastrukturze okazało się opłacalne.
Przy wolumenie poniżej 100 dokumentów miesięcznie korzystniejszy kosztowo może być wariant SaaS.
Koszty infrastruktury
Unstructured.io działa u nas na następującej infrastrukturze:
- 2 pody Kubernetes (redundancja).
- 2 GB RAM każdy.
- 1 rdzeń CPU każdy.
- Łączny koszt: ~50-70 GBP/miesiąc.
Alternatywa (AWS Lambda):
- Bezserwerowe przetwarzanie Unstructured.io.
- Płatność za wywołanie.
- Brak kosztów bezczynności.
- Rozwiązanie odpowiednie przy zmiennym albo sporadycznym obciążeniu.
Jakie wyniki osiągnęliśmy w środowisku produkcyjnym?
Aby zweryfikować nasz wybór, porównaliśmy wszystkie trzy podejścia na rzeczywistych dokumentach przetwarzanych w środowisku produkcyjnym. Różnice były znaczące.
Jak wypada jakość ekstrakcji?
Przetestowaliśmy wszystkie trzy podejścia na reprezentatywnych dokumentach z naszego zbioru produkcyjnego:
PyPDF2 (prosta ekstrakcja):
- Układy wielokolumnowe często czytane niepoprawnie.
- Tekst przerywany w środku zdań.
- Nagłówki, stopki i numery stron pomieszane z treścią.
- Konieczne było rozbudowane ręczne przetwarzanie końcowe.
Bezpośrednie przetwarzanie przez API modelu:
- Lepsze wyniki niż w przypadku PyPDF2, ale niespójne.
- Artefakty PDF nadal obecne w wyodrębnionym tekście.
- Brak kontroli nad tym, co jest uwzględniane lub filtrowane.
Unstructured.io:
- Czysty, logicznie uporządkowany tekst.
- Prawidłowa obsługa złożonych układów.
- Nagłówki i stopki automatycznie odfiltrowane.
- Minimalne przetwarzanie końcowe.
Jak ekstrakcja wpływa na kategoryzację AI?
Jakość ekstrakcji bezpośrednio wpłynęła na dokładność kategoryzacji wykonywanej przez AI:
Przy słabej ekstrakcji (PyPDF2):
- Częste błędy kategoryzacji z powodu uszkodzonego lub brakującego kontekstu.
- Pomylone kolumny prowadziły do przypisywania błędnych typów dokumentów.
- Większość dokumentów wymagała ręcznej weryfikacji i korekty.
Przy dobrej ekstrakcji (Unstructured.io):
- Znacząco wyższa dokładność kategoryzacji.
- Większość błędów wynikała z rzeczywistej niejednoznaczności dokumentów, a nie z problemów z ekstrakcją.
- Ręczna weryfikacja była potrzebna tylko w nietypowych przypadkach.
Wniosek był jednoznaczny: wyższa jakość ekstrakcji przełożyła się na dokładniejsze wyniki kategoryzacji.
Warto również przeczytać artykuł Jak poprawiliśmy precyzję odpowiedzi chatbota RAG o 40% dzięki ocenie dokumentów.
Alternatywne narzędzia do ekstrakcji danych z PDF
Choć wybraliśmy Unstructured.io, warto również rozważyć inne narzędzia, zależnie od wymagań projektu, rodzaju dokumentów i dostępnej infrastruktury.
Adobe PDF Services API
Komercyjna usługa Adobe oferuje ekstrakcję danych z dokumentów oraz wsparcie przeznaczone dla klientów biznesowych. Może być rozważana w projektach przetwarzających złożone pliki PDF. Ograniczeniami są model chmurowy, zależność od ekosystemu Adobe oraz koszty rosnące wraz z liczbą przetwarzanych stron. Tę opcję warto rozważyć, gdy projekt ma budżet na usługi komercyjne i wymaga wsparcia dla klientów biznesowych.
AWS Textract
AWS Textract zapewnia OCR oraz analizę formularzy i tabel, a także integruje się z pozostałymi usługami AWS. Przy dużej skali koszt usługi może jednak znacząco wzrosnąć. Narzędzie jest szczególnie ukierunkowane na formularze i dokumenty o przewidywalnej strukturze oraz wymaga korzystania z infrastruktury AWS. To dobry wybór, gdy projekt korzysta już z AWS i przetwarza głównie formularze lub faktury.
Google Document AI
Usługa przetwarzania dokumentów Google Cloud wykorzystuje modele uczenia maszynowego, które dobrze radzą sobie z różnorodnymi typami dokumentów, z natywną integracją GCP. Wadą są wysokie koszty, skomplikowane struktury cenowe utrudniające planowanie budżetu oraz wdrożenie wyłącznie w chmurze. Tę usługę warto rozważyć, gdy projekt korzysta już z infrastruktury GCP i wymaga zaawansowanych funkcji przetwarzania Google.
Apache Tika
Ten framework open source jest bezpłatny i obsługuje wiele formatów dokumentów poza samymi PDF-ami, co czyni go użytecznym w ekosystemach Java. Jakość ekstrakcji jest jednak ograniczona, framework wymaga infrastruktury Java, a możliwości analizy układu są ograniczone. Tikę warto rozważyć, gdy projekt wymaga obsługi wielu formatów dokumentów i działa w środowisku Java.
Warto również przeczytać artykuł LangChain vs LangGraph vs Raw OpenAI: jak wybrać swój stos technologiczny RAG.
Jak dobrać narzędzie do ekstrakcji danych z PDF?
Nie istnieje jedno narzędzie, które będzie najlepsze w każdym zastosowaniu. Poniżej przedstawiamy praktyczne kryteria wyboru oparte na typie dokumentu i wymaganiach procesu.
Proste pliki PDF → PyPDF2 lub pdfplumber
W przypadku prostych, jednokolumnowych plików PDF ze standardowym układem, minimalnym formatowaniem i samym tekstem (na przykład podstawowych raportów, notatek czy list) wystarczą biblioteki PyPDF2 lub pdfplumber. Te proste biblioteki open source wystarczają do obsługi nieskomplikowanych dokumentów i nie wymagają rozbudowanej infrastruktury.
Złożone pliki PDF → Unstructured.io
Gdy dokumenty zawierają układy wielokolumnowe, tabele i wykresy, nagłówki i stopki wymagające filtrowania albo mieszane formatowanie, a wysoka dokładność ma kluczowe znaczenie, Unstructured.io jest jedną z opcji, które warto rozważyć. Do tej kategorii należą dokumenty prawne, specyfikacje techniczne i artykuły naukowe. W naszych testach Unstructured.io zapewniło najwyższą jakość ekstrakcji dla takich dokumentów.
Zeskanowane dokumenty → Unstructured.io z OCR
Pliki PDF oparte na obrazach, takie jak zeskanowane umowy czy dokumenty archiwalne, wymagają OCR, a jakość skanów bywa różna. Unstructured.io może w takich przypadkach wykorzystywać OCR, zależnie od wybranej strategii i konfiguracji.
Formularze i faktury → narzędzia wyspecjalizowane w analizie formularzy, takie jak AWS Textract
W przypadku formularzy z parami klucz-wartość i danymi tabelarycznymi, takich jak faktury, wnioski czy standardowe formularze, warto rozważyć AWS Textract. Usługa została zaprojektowana z myślą o analizie formularzy, tabel i par klucz-wartość, dlatego dobrze pasuje do tego typu dokumentów.
Prototypy → bezpośrednie przesłanie pliku PDF do API modelu
Przy niskim wolumenie i stosunkowo prostych dokumentach bezpośrednie przesyłanie plików PDF do API modelu może być najszybszym sposobem przygotowania prototypu. Takie rozwiązanie ogranicza zakres początkowej implementacji i pozwala sprawdzić założenia przed inwestycją w bardziej zaawansowany proces ekstrakcji.
Chcesz usprawnić proces przetwarzania plików PDF?
To case study opisuje rzeczywiste wdrożenie dla BetterRegulation. Zbudowaliśmy proces ekstrakcji danych z plików PDF z wykorzystaniem Unstructured.io, zmniejszyliśmy liczbę tokenów o 30% i poprawiliśmy dokładność kategoryzacji wykonywanej przez AI. System przetwarza w środowisku produkcyjnym ponad 200 dokumentów miesięcznie i zapewnia powtarzalny proces ich analizy.
Chcesz zbudować podobne rozwiązanie dla swojej platformy? Nasz zespół tworzy produkcyjne systemy przetwarzania dokumentów z użyciem AI, uwzględniające jakość ekstrakcji, koszty i możliwość skalowania. Możemy pomóc w konfiguracji Unstructured.io, wdrożeniu rozwiązania w Kubernetes, przygotowaniu niestandardowego procesu ekstrakcji oraz integracji z modelami AI. Sprawdź nasze usługi rozwoju rozwiązań opartych na sztucznej inteligencji i zobacz, w jakim zakresie możemy pomóc w realizacji takiego projektu.