Jak wyodrębniać dane z plików PDF i parsować konkretne informacje za pomocą AI
Klient powierzył nam realizację projektu ekstrakcji danych na dużą skalę obejmującego 18 tysięcy plików PDF udostępnionych na stronie internetowej. Pliki zawierały informacje ze sprawozdań finansowych firm. Celem było identyfikowanie i parsowanie danych dotyczących obrotów firm.
Kluczowe wyzwania w projekcie
Format źródłowy
Pliki PDF były zeskanowanymi dokumentami. Oznaczało to, że nie zawierały osadzonego tekstu, który można łatwo przeszukiwać lub wyodrębniać. Brak czytelnego tekstu uniemożliwiał bezpośrednie identyfikowanie danych o obrotach w plikach.
Zróżnicowana struktura
Potrzebne dane o obrotach mogły występować w tabelach, jako zwykły tekst lub być ukryte w szczegółowych opisach. Podczas analizy odkryliśmy jednak dwa kluczowe wzorce. Po pierwsze, wymagane informacje zazwyczaj znajdowały się na pierwszych stronach, co ograniczało konieczność przetwarzania całych dokumentów i obniżało koszty operacyjne. Po drugie, obecność słowa kluczowego „turnover” pozwalała nam odfiltrować nieistotne pliki.
Tworzenie promptów dla AI
Początkowo Anthropic miał tendencję do zaokrąglania wartości liczbowych, zwracania liczb jako tekstu lub generowania niespójnych odpowiedzi. Ta nieprzewidywalność utrudniała wiarygodne pozyskiwanie danych o obrotach. Aby temu zaradzić, wdrożyliśmy ustrukturyzowany format wyjściowy, w którym odpowiedzi AI były zgodne z wcześniej zdefiniowanymi polami. Dodaliśmy również osobny subprompt pozwalający precyzyjnie określić zarówno rok, jak i wartość obrotu.
Szybkość przetwarzania
Uruchamianie modelu AI lokalnie wiązało się z poważnymi ograniczeniami czasowymi. Przy tej skali zadania — przetwarzaniu 18 tysięcy plików PDF — realizacja na jednym komputerze, maszynie wirtualnej lub instancji EC2 zajęłaby miesiące. Takie opóźnienie było nieakceptowalne ze względu na terminy projektu i oczekiwania klienta.
Nasze rozwiązanie: Jak wyodrębnić dane z dokumentu PDF
Wykorzystaliśmy Nannostomus, nasze wewnętrzne narzędzie do parsowania plików PDF, aby pobrać pliki ze strony internetowej. Następnie zapisaliśmy je w Amazon EFS/S3. Nasze podejście koncentrowało się na minimalizacji kosztów poprzez optymalizację wykorzystania zasobów. Dodatkowo automatyczne zarządzanie cyklem życia workerów usprawniło cały proces. Pobrane pliki zostały uporządkowane w systemie przechowywania, aby były łatwo dostępne na kolejnych etapach pipeline’u.
Do parsowania plików PDF wykorzystaliśmy Python i dwie biblioteki: Pdf2image do konwersji plików PDF na obrazy oraz Pytesseract do ekstrakcji tekstu z obrazów. Zebraliśmy informacje o wszystkich plikach PDF (ścieżki S3 lub woluminy EFS/EBS, słowa kluczowe do wyszukania oraz liczbę stron do przetworzenia). Następnie informacje te zostały przesłane do kolejki AWS SQS.
Następnie skonteneryzowaliśmy całe rozwiązanie za pomocą Docker. Kontener został wdrożony do AWS ECR przez AWS ECS z możliwością skalowania. Usługa rozpoczyna przetwarzanie, gdy w SQS pojawi się określona liczba wiadomości, i skaluje się w dół, gdy kolejka pozostaje pusta przez ustalony czas. Powstałe pliki TXT były zapisywane w wybranej lokalizacji docelowej: S3, EFS lub EBS.
Korzystając z Pythona, wykorzystaliśmy Anthropic do lokalizowania i wyodrębniania z tekstu danych dotyczących obrotów. Na potrzeby tego etapu wdrożyliśmy drugą kolejkę SQS. Wiadomości w tej kolejce zawierały lokalizację plików .txt oraz słowa kluczowe.
Wyodrębnione wartości obrotów wraz z odpowiadającymi im latami zostały zapisane w ustrukturyzowanych plikach CSV.
Technologie wykorzystane w projekcie
Python
Docker
Anthropic
EFS
S3
EBS
SQS
ECR
ECS
Rezultaty: szybkie i ekonomiczne parsowanie plików PDF
Dzięki starannie zaprojektowanemu procesowi NannosTech po konwersji do tekstu przefiltrował początkowy zbiór 18 tysięcy plików do 5 milionów. Spośród nich 1,2 miliona plików zawierało wymagane wartości obrotów.
- Nawet po uwzględnieniu infrastruktury AWS i Anthropic koszt na 1 000 plików wyniósł zaledwie 0,6–0,7 centa (bez uwzględnienia korzystania z Nannostomus).
- Choć pobieranie plików PDF zajęło kilka tygodni, właściwe przetwarzanie — konwersja do tekstu i parsowanie — zakończono w zaledwie trzy dni.