Most PDF Extractors Use the Wrong API

Większość narzędzi PDF korzysta z niewłaściwego źródła danych.

Kiedy programiści mówią o ekstrakcji PDF, zazwyczaj mają na myśli getTextContent(). Metoda ta dostarcza elementy tekstowe oraz ich pozycje. Jest ona domyślnym rozwiązaniem dla niemal każdego narzędzia działającego po stronie przeglądarki.

Jednak getTextContent() to przetworzony widok. Jest to uproszczona wersja tego, co jest faktycznie dostępne.

W PDF.js istnieją trzy poziomy danych:

• getStructTree(): Informuje o znaczeniu dokumentu. Zawiera tabele, nagłówki i wzory. • getOperatorList(): Informuje o tym, co dokument rysuje. Zawiera linie, ścieżki i kształty. • getTextContent(): To przefiltrowany widok tego, co dokument rysuje.

Większość narzędzi korzysta z trzeciej opcji. Działa ona w 80% przypadków, np. przy prostych raportach. Jednak zawodzi w przypadku prac naukowych i złożonych publikacji.

Korzystanie wyłącznie z getTextContent() powoduje cztery główne problemy:

  • Tracisz strukturę tabel. Musisz zgadywać, gdzie znajdują się komórki, opierając się na pozycjach tekstu.
  • Niszczysz równania matematyczne. Równania LaTeX często pojawiają się jako pojedyncze, gigantyczne bloki tekstu.
  • Pomijasz linie kolumn. Wiele układów wykorzystuje rzeczywiste linie do oddzielania kolumn. Tych linii nie ma w zawartości tekstowej.
  • Otrzymujesz błędną kolejność czytania. Tekst często pojawia się w kolejności, w jakiej został narysowany, a nie w taki sposób, w jaki czyta go człowiek.

Właściwym sposobem budowy procesora PDF jest system trójwarstwowy:

  1. Najpierw sprawdź getStructTree(). Jeśli dokument ma logiczną strukturę, użyj jej, aby natychmiast znaleźć tabele i nagłówki.
  2. Następnie sprawdź getOperatorList(). Wykorzystaj jawne linie i ścieżki, aby znaleźć granice kolumn.
  3. Użyj getTextContent() jako rozwiązania awaryjnego. Zastosuj matematykę geometryczną tylko wtedy, gdy dwie pierwsze warstwy nie dostarczą żadnych danych.

To podejście nie oznacza więcej pracy. Warstwy 1 i 2 działają jako szybkie wyjścia. Jeśli dokument jest dobrze ustrukturyzowany, pomijasz trudną matematykę. Złożone wnioskowanie stosujesz tylko wtedy, gdy dokument nie posiada tagów.

Ta architektura radzi sobie zarówno z prostymi plikami korporacyjnymi, jak i złożonymi pracami naukowymi.

Źródło: https://dev.to/bonzai2carn/most-pdf-extractors-use-the-wrong-api-heres-what-we-built-instead-5dgh