Optyczne rozpoznawanie znaków (OCR) w Pentaho

Koncept

Pentaho PDI jest idealnym narzędziem do przetwarzania plików, formatowania danych, ekstrakcji informacji, separowania danych w zależności od ich przeznaczenia. Idealne narzędzie by użyć go do zarządzania dokumentami - np. stworzyć system do obiegu faktur. Jednak jednej rzeczy Pentaho nie ma - optycznego rozpoznawania znaków. A dokumenty często są w formie obrazów. Musimy dokonać OCR'owania by odczytać daty, nazwy, numery. Czy istnieje jakiś sposób by sobie z tym poradzić? Tak, istnieje.

Niezbędne rozszerzenia Pentaho

Domyślnie Pentaho nie posiada możliwości odczytu formatu PDF a tym bardziej odczytu PDF w wersji raster images (obrazów). Jeśli dokumenty PDF są w formacie tekstowym, możemy zastosować parsowanie dokumentu za pomocą zewnętrznej biblioteki jak np Apache PDFBox. Odczytanie formatu image będzie wymagać optycznego rozpoznawania znaków.

Istnieją co najmniej dwa sposoby na OCR'owania dokumentów. Mówiąc "dokumentów" mamy na myśli PDFy ale też pliki graficzne jak np. JPEG. Pierwszą biblioteką którą możemy użyć jest Tesseract OCR. Biblioteka dostępna jest dla różmnych systemów operacyjnych. Drugą możliwością jest komercyjna usługa Abby OCR. Oba rozwiązania możemy uruchomić za pomocą skryptów Python. Python nie jest domyślnym językiem skryptowym Pentaho - potrzebować będziemy plugin'u CPython Script Executor z markeplace Pentaho.

Organizacja komponentów w przepływ

Proces rozpoczynamy od zeskanowania dokuentów do postaci PDF. Możemy też skanować papierowe dokumenty do innego formaty jak np. JPEG ale PDF zapewni nam odpowiednią jakość i możliwość łatwego odczyty przy jednoczesnym niewielkim rozmarze plików.Czesto okazuję się że nie musimy OCR'owaniu poddawać całego dokumenty ani nawet całej strony. Np. by rozpoznać fakturę wystarczy nam połowa pierwszej strony (tam znajdziemy krytyczne dla pocesu szczegóły jak numer faktry, wystawcę, datę). Zatem interesuje nas pierwsza strona i tylko jej część. Wycinanie części pierszej strony PDFa zrealizujemy za pomocą biblioteki PymuPDF. Wycięty fragment, w formacie PNG, przesyłamy następnie do usługi Abbyy OCR. Komercyjne rozwiązanie zapewni nam zdecydowanie bardziej wiarygodne rozpoznanie znaków niż darmowa biblioteka. Ponadto lokalizacja naprawdę zadziała.

Abbyy OCR akceptuje formaty graficzne (jpg, png, tiff, gif) oraz PDF a rezultaty możemy otrzymać w postaci plików txt, xml, rtf, csv, pdf. API Abbyy OCR dostępne jest dla wielu języków jak JAVA, PHP, C++ ale Python jest najłatwiejszą opcją w przypadku integracji z Pentaho PDI.

Składając klocki w całość

- Skanowanie dokumentów do formatu PDF

- Zmiana nazewnictwa dokumentów na unikalne nazwy (jeśli dokumenty będziemy przechowywać w archiwum, nie mogą się nadpisywać w przypadku dublujących się nazw)

- Extrakt potrzebnych informacji z plików (niezbędnych nagłówków) do formatu graficznego

- OCR wybranych z dokumentu informacji

- Interpretacja rezultatu (np chcemy dokonać klasyfikacji faktur wg. wystawcy dokumentów)

- Zapisanie uzyskanych informacji w bazie (np. dostarczenie informacji do aplikacji obsługującej akceptację dokumentów)

- Skasowanie informacji tymczasowych i archiwizacja dokumentów

Jeśli planujecie zbudować podobne rozwiązanie w swojej firmie i potrzebujecie wsparcia, skontaktujcie się z nami.