Sonntag, 13. Januar 2013

Teil 8, Selbstversuch Ebook - Befreiung am Beispiel "Bunte Bilder aus dem Sachsenlande"

Der Prozess der Nachkorrektur der OCR-Texte des Buches "Bunte Bilder aus dem Sachsenlande" ist recht zeitaufwendig. Um besser Fehler zu finden, aber auch mal ein Zwischenergebnis zu haben, habe ich folgendes Bash-Script geschrieben, welches mir ein rudimentäres EPub-Dokument zusammenbaut:

# generates a rudimentary epub
NAME=/tmp/$1
DIR=$(echo $2|sed -e "s/\/$//g")
PAGES=$(ls $DIR)
mkdir -p $NAME
mkdir -p $NAME/$DIR
echo -n "application/epub+zip" >$NAME/mimetype
mkdir -p $NAME/META-INF
cat <<CONTAINER >$NAME/META-INF/container.xml
<?xml version="1.0" encoding="UTF-8"?>
  <container
    xmlns="urn:oasis:names:tc:opendocument:xmlns:container"
    version="1.0">
    <rootfiles>
      <rootfile
        full-path="$DIR/inhalt.opf"
        media-type="application/oebps-package+xml"/>
    </rootfiles>
  </container>
CONTAINER
cat <<OPF1 >$NAME/$DIR/inhalt.opf
<?xml version="1.0" encoding="UTF-8"?>
  <package
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:dc="http://purl.org/dc/elements/1.1/"
    xmlns:opf="http://www.idpf.org/2007/opf"
    xmlns="http://www.idpf.org/2007/opf"
    version="2.0"
    unique-identifier="BookId">
    <metadata>
      <dc:language xsi:type="dcterms:RFC3066">de-DE</dc:language>
      <dc:title>Hello World</dc:title>
      <dc:identifier id="BookId">id_Hello_World</dc:identifier>
    </metadata>
    <manifest>
      <item id="ncx" href="inhalt.ncx" media-type="application/x-dtbncx+xml"/>
OPF1
for i in $PAGES; do
      cat <<OPF2 >>$NAME/$DIR/inhalt.opf
     <item id="Datei_$i" href="$i.xhtml" media-type="application/xhtml+xml"/>
OPF2
done
cat <<OPF3 >>$NAME/$DIR/inhalt.opf     
    </manifest>
    <spine toc="ncx">
OPF3
for i in $PAGES; do
cat <<OPF4 >>$NAME/$DIR/inhalt.opf
      <itemref idref="Datei_$i"/>
OPF4
done
cat <<OPF5 >>$NAME/$DIR/inhalt.opf
    </spine>
  </package>
OPF5
cat <<NCX1 >$NAME/$DIR/inhalt.ncx
<?xml version="1.0" encoding="UTF-8"?>
  <!DOCTYPE ncx
    PUBLIC "-//NISO//DTD ncx 2005-1//EN" "http://www.daisy.org/z3986/2005/ncx-2005-1.dtd">
  <ncx
    xmlns="http://www.daisy.org/z3986/2005/ncx/"
    version="2005-1"
    xml:lang="de-DE">
    <head>
      <meta name="dc:Title" content="Hello World"/>
      <meta name="dtb:uid" content="id_Hello_World"/>
    </head>
    <docTitle>
      <text>Hello World</text>
    </docTitle>
    <navMap>
NCX1
for i in $PAGES; do
cat <<NCXPAGES >>$NAME/$DIR/inhalt.ncx
      <navPoint playOrder="1" id="id_$i">
        <navLabel>
          <text>$i</text>
        </navLabel>
        <content src="$i.xhtml"/>
      </navPoint>
NCXPAGES
done
cat <<NCX2 >>$NAME/$DIR/inhalt.ncx
    </navMap>
  </ncx>
NCX2
for i in $PAGES; do
cat <<XHTML1 >$NAME/$DIR/$i.xhtml
<?xml version="1.0" encoding="UTF-8"?>
  <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
     "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
  <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
      <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
      <link rel="schema.DC" href="http://purl.org/dc/elements/1.1/"/>
      <title>$i</title>
      <meta name="DC.identifier" content="id_$i"/>
    </head>
    <body>
XHTML1
cat $DIR/$i | sed -e "s/&/&amp;/g" -e "s/</&lt;/g" -e "s/>/&gt;/g" >>$NAME/$DIR/$i.xhtml
cat <<XHTML2 >>$NAME/$DIR/$i.xhtml
    </body>
  </html>
XHTML2
done
pushd $NAME
zip -Z store -X $NAME.epub mimetype
zip -9 -X -r $NAME.epub META-INF/
zip -9 -X -r $NAME.epub $DIR/
popd
Das Script wird mit 2 Parametern aufgerufen, der erste gibt den Namen (nicht Pfad) des Zieldokumentes an, der zweite das Verzeichnis mit den OCR-Dateien. Es erzeugt dann das Dokument im Verzeichnis /tmp als $NAME.epub

Das Script enthält noch kein Feintuning und die Kapitel entsprechen den Seitenzahlen. Um das erzeugte Epub-Dokument auf Korrektheit zu testen benutze ich den Validator  EPubCheck Version 3.0. Dieser prüft sehr genau und es hat eine Weile gedauert, bis das Script ein nahezu fehlerfreies Dokument erzeugt hat.  Zum Prüfen des erzeugten EPUB einfach folgenden Aufruf verwenden: java -jar epubcheck-x.x.x.jar file.epub

Einen Zwischenstand des Buches gibt es hier: https://www.dropbox.com/s/sf9j53ovg7qku0p/Bunte_Bilder_2013-01-13.epub