NAME
pdf2xml - extract text from PDF files and wraps it in XML
SYNOPSIS
pdf2xml [OPTIONS] pdf-file > output.xml
For more information, see the man-pages of the command-line tool pdf2xml
. Using pdf2xml as a library is possible via the pdf2xml function:
use Text::PDF2XML
my $xml = pdf2xml( $pdf_file, %options );
pdf2xml( $pdf_file, output => \*STDOUT, %options );
pdf2xml( $pdf_file, output => 'file.xml', %options );
%options = (
conversion_tool => 'pdfXtk', # use pdfXtk (default = 'tika')
keep_vocabulary => 1, # don't reset the vocabulary
vocabulary => 'filename', # plain text file
vocabulary_from_pdf => 0, # skip pdftotext
vocabulary_from_raw_pdf => 0, # skip pdftotext -raw
vocabulary_from_tika => 1, # read voc from Apache Tika
java => '/path/to/java', # java binary
java_heap => '8g', # default = 1g
split_into_characters => 1, # split into characters
detect_languages => 1, # enable language detection
keep_languages => 'en', # only keep English sentences
lowercase => 0, # switch off lower-casing
dehyphenate => 0, # switch off de-hyphenation
character_merging => 0, # skip char merging
paragraph_merging => 0, # skip paragraph merging
request_timeout => 180, # server request timeout (Tika)
verbose => 1 # verbose output
);
pdf2xml( $pdf_file, output => 'file.xml', %options );
Note that the options stay for the next pdf2xml call! You need to overwrite them if you want to change the behaviour in subsquent calls while the libraray is loaded!
DESCRIPTION
Extract text from PDF using external tools and some post-processing heuristics. Here is an example with and without post-processing:
raw: <p>PRESENTATION ET R A P P E L DES PRINCIPAUX RESULTATS 9</p>
clean: <p>PRESENTATION ET RAPPEL DES PRINCIPAUX RESULTATS 9</p>
raw: <p>2. Les c r i t è r e s de choix : la c o n s o m m a t i o n
de c o m b u s - t ib les et l e u r moda l i t é
d ' u t i l i s a t i on d 'une p a r t ,
la concen t r a t ion d ' a u t r e p a r t 16</p>
clean: <p>2. Les critères de choix : la consommation
de combustibles et leur modalité
d'utilisation d'une part,
la concentration d'autre part 16</p>
TODO
Character merging heuristics are very simple. Using the longest string forming a valid word from the vocabulary may lead to many incorrect words in context for some languages. Also, the implementation of the merging procedure is probably not the most efficient one.
De-hyphenation heuristics could also be improved. The problem is to keep it as language-independent as possible.
SEE ALSO
Apache Tika: http://tika.apache.org
The Poppler Developers - http://poppler.freedesktop.org
pdfXtk http://sourceforge.net/projects/pdfxtk/
COPYRIGHT AND LICENSE
Copyright (C) 2013 by Joerg Tiedemann
This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself, either Perl version 5.8.8 or, at your option, any later version of Perl 5 you may have available.