De meeste PDF-extractoren gebruiken de verkeerde API

De meeste PDF-tools gebruiken de verkeerde gegevensbron.

Wanneer ontwikkelaars het hebben over PDF-extractie, bedoelen ze meestal getTextContent(). Deze methode levert tekstitems en hun posities. Het is de standaard voor bijna elke tool aan de browserzijde.

Maar getTextContent() is een bewerkte weergave. Het is een vereenvoudigde versie van wat er feitelijk beschikbaar is.

Er zijn drie niveaus van gegevens in PDF.js:

• getStructTree(): Dit vertelt je wat de betekenis van het document is. Het bevat tabellen, koppen en formules. • getOperatorList(): Dit vertelt je wat het document tekent. Het bevat lijnen, paden en vormen. • getTextContent(): Dit is een gefilterde weergave van wat het document tekent.

De meeste tools gebruiken de derde optie. Dit werkt voor 80% van de documenten, zoals eenvoudige rapporten. Het schiet echter tekort bij academische papers en complexe publicaties.

Het gebruik van alleen getTextContent() zorgt voor vier grote problemen:

  • Je verliest tabelstructuren. Je moet raden waar cellen zich bevinden op basis van tekstposities.
  • Je breekt wiskundige vergelijkingen. LaTeX-vergelijkingen verschijnen vaak als enkele, enorme tekstblokken.
  • Je mist kolomlijnen. Veel lay-outs gebruiken daadwerkelijke lijnen om kolommen te scheiden. Deze lijnen bestaan niet in de tekstinhoud.
  • Je krijgt de verkeerde leesvolgorde. Tekst verschijnt vaak in de volgorde waarin het is getekend, niet zoals een mens het leest.

De juiste manier om een PDF-processor te bouwen is een systeem met drie lagen:

  1. Controleer eerst getStructTree(). Als het document een logische structuur heeft, gebruik deze dan om direct tabellen en koppen te vinden.
  2. Controleer vervolgens getOperatorList(). Gebruik expliciete lijnen en paden om kolomgrenzen te vinden.
  3. Gebruik getTextContent() als fallback. Gebruik geometrische wiskunde alleen wanneer de eerste twee lagen geen gegevens leveren.

Deze aanpak betekent niet meer werk. Laag 1 en 2 fungeren als snelle exits. Als het document goed gestructureerd is, sla je de moeilijke wiskunde over. Je gebruikt complexe inferentie alleen wanneer het document niet getagd is.

Deze architectuur kan zowel eenvoudige bedrijfsbestanden als complexe wetenschappelijke papers aan.

Bron: https://dev.to/bonzai2carn/most-pdf-extractors-use-the-wrong-api-heres-what-we-built-instead-5dgh