Hoe de gegevens uit een PDF-bestand uit te halen terwijl u zijn structuur bijhoudt?

Mijn doel is om de tekst en afbeeldingen uit een PDF-bestand te extraheren terwijl hij de structuur past. De reikwijdte voor het parseren van de structuur is niet uitputtend; Ik hoef alleen de rubrieken en paragrafen te identificeren.

Ik heb een paar verschillende dingen geprobeerd, maar ik kwam niet ver in een van hen:

  • Converteer PDF naar tekst. Het werkt niet voor mij als ik afbeeldingen en de structuur van het document verlies.
  • Converteer PDF naar HTML. Ik vond een paar gereedschappen die me hiermee hebben geholpen, en de beste tot nu toe is PDFTOHTML. De tool is echt een goede presentatie verstandig, maar ik heb de HTML niet met succes parseren.
  • Converteer PDF naar XML. Hetzelfde als hierboven.

Iedereen heeft suggesties over het aanpakken van dit probleem?


Antwoord 1, Autoriteit 100%

Er is in wezen geen eenvoudige oplossing voor gesneden en plakken omdat PDF niet echt erg geïnteresseerd is in structuur. Er zijn veel andere antwoorden op deze site die u dingen in veel meer details zullen vertellen, maar deze moet u de belangrijkste punten geven:

Als het identificeren van de tekststructuur in PDF-documenten zo moeilijk is, hoe doen PDF-lezers het zo goed?

Als u dit in PDF zelf wilt doen (waar u de meerderheid van de controle over het proces zou hebben), moet u over alle tekst op pagina’s lopen en headers identificeren door naar hun gebruikte lettertypen te kijken grootte ten opzichte van de andere tekst op de pagina, enz …).

Bovendien zul je alinea’s moeten identificeren door te kijken naar de positionering van tekstfragmenten, witruimte op de pagina, nabijheid van bepaalde letters, woorden en regels… PDF zelf heeft niet eens een concept voor een “woord”, laat staan “lijnen” of “paragrafen”.

Om de zaken nog ingewikkelder te maken, hoeft de manier waarop tekst op de pagina wordt getekend (en dus de volgorde waarin deze in het PDF-bestand zelf verschijnt) niet eens de juiste leesvolgorde te zijn (of wat wij mensen zouden overwegen om de juiste leesvolgorde te zijn).


Antwoord 2, autoriteit 14%

Het ontleden van pdf’s voor kopteksten en de bijbehorende subinhoud is echt heel moeilijk (het betekent niet dat het onmogelijk is) omdat pdf in verschillende formaten beschikbaar is. Maar ik kwam onlangs een tool tegen met de naam GROBIDdie in dit scenario kan helpen. Ik weet dat het niet perfect is, maar als we de juiste training geven, kunnen we onze doelen bereiken.

Grobid beschikbaar als opensource op github.

https://github.com/kermitt2/grobid


Antwoord 3, autoriteit 9%

U kunt de volgende benadering op deze manier gebruiken met iTextSharp of andere open source-bibliotheken:

  • Lees PDF-bestand met iTextSharpof vergelijkbare open source-tools en verzamel alle tekstobjecten in een array (of converteer PDF naar HTML met behulp van de tool zoals pdftohtmlen vervolgens HTML ontleden)
  • Sorteer alle tekstobjecten op coördinaten zodat je ze allemaal bij elkaar hebt
  • Herhaal vervolgens door objecten en controleer de afstand ertussen om te zien of 2 of meer objecten kunnen worden samengevoegd tot één alinea of niet

Of je kunt de commerciële tool gebruiken zoals ByteScout PDF Extractor SDKdie precies dit kan:

  • tekst en afbeeldingen extraheren en de lay-out van de tekst analyseren
  • XML of CSV waar tekstobjecten worden samengevoegd of opgesplitst in alinea’s in een virtueel lay-outraster
  • toegang tot objecten via een speciale API die het mogelijk maakt om elk object te adresseren via zijn “virtuele” rij- en kolomindex, ongeacht hoe het is opgeslagen in de originele PDF.

Disclaimer: ik ben aangesloten bij ByteScout


Antwoord 4, autoriteit 9%

PDF-bestanden kunnen worden geparseerd met tabula-py of tabula-java.

Ik heb een volledige tutorial gemaakt over het gebruik van tabula-py op dit artikel. Je kunt ook tabula in een webbrowser gebruiken, zolang je Java hebt geïnstalleerd.


Antwoord 5

Tenzij het gemarkeerde inhoud is, heeft PDF geen structuur…. Je moet ‘raden’ wat de verschillende tools doen. Er is een goede blogpost waarin de problemen worden uitgelegd op http://blog.idrsolutions.com/2010/09/the-easy-way-to-discover-if-a-pdf-file-contains-structured-content/


Antwoord 6

Zoals vermeld in de antwoorden hierboven, zijn PDF’s niet erg gemakkelijk te ontleden. Als u echter bepaalde aanvullende informatie heeft over de tekst die u wilt ontleden, kunt u deze uitvoeren.

  1. Als uw koppen op specifieke delen van de pagina staan, kunt u het PDF-bestand ontleden en de geparseerde uitvoer sorteren op coördinaten.

  2. Als u voorafgaande kennis hebt van de afstand tussen koppen en paragrafen, kunt u deze informatie ook gebruiken om het bestand te ontleden.

pdfbox is een PDF-parseergereedschap dat u kunt gebruiken voor het extraheren van tekst en afbeeldingen erop kan uw aangepaste regels voor het parseren definiëren.

Voor het parseren van PDF’s moet u enkele voorkennis van het algemene formaat van het PDF-bestand hebben. U kunt de volgende blogpost Document parseren voor meer informatie over document parseren.

Disclaimer: ik was betrokken bij het schrijven van de blogpost.


Antwoord 7

iText API:
Pdfreader PR = Nieuwe pdfreader (“C: \ test.pdf”);

Referenties:
Pdfreader

Other episodes