Trading space for time

Geplaatst op 07-10-2008 door Maarten Marx | data, Uncategorized | tags: , , | comment image Geen reacties »

De Handelingen zoals opgelagen bij de de KB in het StatenGeneraalDigitaal project worden vaak erg groot.
Dit komt omdat de PDF file bestaat uit plaatjes van elke bladzijde plus de tekst. In deze blog laten we zien dat er veel winst te behalen is door het omzetten van de Handelingen in XML, volgens het PoliDocs formaat zoals gebruikt wordt op www.polidocs.nl .

De resultaten met een willekeurige XML file van een vergadering bestaande uit 72 bladzijden zijn erg positief.
De XML file met vrijwel dezelfde informatie is meer dan 150 keer kleiner dan de oorspronkelijke PDF. De PDF die wij genereren op basis van deze XML file is 50 keer kleiner. Het omzetten van XML naar PDF op een gewone Linux machine kost minder dan anderhalve seconde. Dit kan dus prima op het moment dat iemand een bestand opvraagt. We hoeven de PDF file dus niet op te slaan. In plaats daarvan slaan we alleen de XML in een gzipped formaat op.

In dit voorbeeld is de besparing dus

  • 150 keer minder opslagruimte en
  • 50 keer minder bandbreedte nodig om de PDF file over te sturen.

De prijs is dat de gebruiker niet het origineel te zien krijgt maar een benadering daarvan. De kwaliteit van die benadering hangt af van de kwaliteit van de OCR en van de structuur extractie-software.

Hier zijn de precieze cijfers:

Dit zijn de twee files waarnaar hierboven gelinkt wordt. De PDF zoals beschikbaar bij de KB, en de XML versie daarvan zoals beschikbaar bij polidocs.

bash-3.00$ ls -lh SG*
-rw------- 1 marx ii 24M Oct 7 16:31 SGD_19851986_0000674.pdf
-rw-r--r-- 1 marx ii 475K Oct 7 16:34 SG_HAN0000114221.xml

Een compressie met gzip levert flink wat ruimtebesparing op voor de XML, en haast niets voor de PDF:

bash-3.00$ gzip SG_HAN0000114221.xml;gzip SGD_19851986_0000674.pdf; ls -lh SG*
-rw------- 1 marx ii 23M Oct 7 16:31 SGD_19851986_0000674.pdf.gz
-rw-r--r-- 1 marx ii 156K Oct 7 16:34 SG_HAN0000114221.xml.gz

Nu maken we zelf een PDF op basis van deze XML file in gz formaat. We geven eerst de tijden:

bash-3.00$ time ./HAN2PDF.sh SG_HAN0000114221.xml
[....output deleted]
Output written on tmp.pdf (72 pages, 510497 bytes).
Transcript written on tmp.log.

real 0m1.346s
user 0m1.278s
sys 0m0.062s

Het script HAN2PDF.sh pakt de XML uit, draait een XSLT script en PDFLatex en pakt de XML file weer in:

bash-3.00$ more HAN2PDF.sh
#!/bin/sh

input=$1;
output=`echo $1 |sed 's/.xml//'`;
gunzip "$input.gz";
xsltproc HAN2Latex.xsl "$input" > tmp.tex;
pdflatex --interaction=nonstopmode tmp.tex;
mv tmp.pdf "$output.pdf";
rm tmp.tex;
gzip "$input";

De verkregen PDF file is slechts net iets groter dan de oorspronkelijke XML. Hier helpt gzip niet meer:

bash-3.00$ ls -lh SG_HAN0000114221.pdf
-rw-r--r-- 1 marx ii 499K Oct 7 17:18 SG_HAN0000114221.pdf
bash-3.00$ gzip SG_HAN0000114221.pdf;ls -lh SG_HAN0000114221.pdf.gz
gzip: SG_HAN0000114221.pdf: No such file or directory
-rw-r--r-- 1 marx ii 475K Oct 7 17:18 SG_HAN0000114221.pdf.gz

Besparing op moderne data

Het voorbeeld hierboven is gebaseerd op ingescande data die opgeslagen zijn als JPEG plaatje. Dat kost natuurlijk erg veel ruimte. Moderne PDF (Handelingen vanaf 1995 verkrijgbaar op Parlando) is natuurlijk veel kleiner.
Toch is er nog een ruimte besparing te behalen door de XML versie te gzippen: de file is dan nog bijna een derde van de oorspronkelijke PDF. Het uitpakken en weer omzetten naar PDF gaat natuurlijk weer net zo snel.

Het voorbeeld hieronder gaat om een debat wat in de Handelingen 43 paginas beslaat.


(marx@plus 114) ls -l mediadebat.*
-rw-r--r-- 1 marx ii 269518 Oct 7 14:32 mediadebat.pdf
-rw-r--r-- 1 marx ii 287672 Oct 7 14:55 mediadebat.xml
(marx@plus 115) gzip mediadebat.* ; ls -l mediadebat.*
-rw-r--r-- 1 marx ii 251400 Oct 7 14:32 mediadebat.pdf.gz
-rw-r--r-- 1 marx ii 96453 Oct 7 14:55 mediadebat.xml.gz
(marx@plus 116) bash
bash-3.00$ time ./HAN2PDF.sh mediadebat.xml
This is pdfTeXk, Version 3.14159-1.10b (Web2C 7.4.5)
......(screen output deleted)
Output written on tmp.pdf (46 pages, 330028 bytes).
Transcript written on tmp.log.
real 0m0.944s
user 0m0.896s
sys 0m0.040s
bash-3.00$

Reageer

Je moet ingelogd zijn om te kunnen reageren.