Bücher (für den Privatgebrauch) digitalisieren

Bücher (für den Privatgebrauch) digitalisieren

Motivation

Mittlerweile lese ich Belletristik am liebsten nur noch als E-Book. Tatsächlich steht aber immer noch das eine oder andere alte, halb vergilbte Buch im Regal, das noch gelesen werden will (aber keinen wirklichen “Wert” mehr hat). Was liegt also näher, als mit moderner Technik diese Bücher in E-Books zu verwandeln? Im Folgenden möchte ich meine Vorgehensweise dafür beschreiben. Da die Bücher nicht wirklich wertvoll sind, überleben sie die Prozedur allerdings nicht.

Dass das Ganze, solange das Urheberrecht auf die Werke noch nicht verfallen ist, nur zu privaten Zwecken gemacht werden und das Ergebnis, also die E-Books, keinesfalls veröffentlicht werden darf, versteht sich von selbst.

Voraussetzungen

  • Natürlich, ein Linux-System :)
  • evtl. Dokumentenscanner
  • Verschiedene Tools, etwa:
    • ImageMagick (mogrify)
    • tesseract, tesseract-data-deu
    • LibreOffice
    • pandoc
    • EPUB-Editor (calibre-editor, sigil, o. ä.)

Vorgehensweise

  1. Herauslösen aller Seiten aus dem Buch
  2. Scannen der Seiten (Duplex)
  3. Beschneiden der Bilddateien (Header, Seitenzahlen, …)
  4. Texterkennung anwenden
  5. Gescannten Text überarbeiten, Fehler beheben
  6. E-Book erstellen, mit CSS formatieren

Herauslösen aller Seiten aus dem Buch

Zunächst wird mit einem Cuttermesser vorsichtig das Cover mitsamt Buchrücken von den (noch miteinander verleimten) Seiten getrennt. Anschließend werden die Seiten paketweise herausgeschnitten. Man durchtrennt also etwa alle 20 Seiten (10 Blatt) die Leimschicht mit dem Cutter. Bei den so erhaltenen Seitenpäckchen trennt man nun mithilfe eines Metalllineals den Leimrand vom Rest der Seite sauber ab, sodass nur ein schmaler Streifen – vielleicht 1-2 mm – Abfall entsteht. Die einzelnen Seiten sollte man jetzt pingelig nach Leimresten untersuchen und ggf. säubern. Als Ergebnis erhalten wir einen Stapel sauberer, einzelner Buchseiten.

Scannen der Seiten

Zum Einscannen der Seiten ist ein Dokumentenscanner ganz praktisch, da dieser in einem Rutsch beide Seiten der Blätter erfassen kann (Duplex). Ziel ist es, alle Seiten zu scannen und in je einer Datei abzulegen.

Welches Programm man zum Scannen wählt, ist Geschmackssache. Dokument-Scanner (a.k.a simple-scan) kann hier gute Dienste erweisen. Wer es etwas mächtiger mag, kann auch zum (kommerziellen) VueScan greifen, das z. B. auch gleich schief eingescannte Seiten wieder richtig ausrichten kann. Konsolenfans können auch auf scanimage zurückgreifen.

Bei den Scanparametern muss man etwas experimentieren. Als Ausgangspunkt würde ich eine Auflösung von 300 dpi und (bei einem normalen Roman) Graustufen oder Schwarz/Weiß auswählen.

Wenn Speicherplatz keine Rolle spielt, können die Dateien als TIFF abgelegt werden. Eigentlich reicht aber PNG. Die Datein werden entprechend der Seitenzahl benannt, also seite_001.tif, seite_002.tif usw.

Dateiliste

Beschneiden der Bilddateien

Vorweg: Die mühsam eingescannten Seiten sollten wir in dieser Form unangetastet lassen. Ich lege diese in einem Unterordner original ab. Für weitere Operationen werden die Dateien in Kopie abgelegt, also nicht etwa überschrieben.

Meist enthalten die Seiten unten eine Seitenzahl, manchmal auch oben einen Header. Dies ist für die nachträglichen Arbeiten eher hinderlich, weswegen wir nun die eingescannten Bilddaten beschneiden. Hier muss man mit ein paar Seiten experimentieren. Angenommen man findet heraus, dass man einfach stets 400 Pixel von unten abschneiden muss, um die Seitenzahlen zu entfernen, kann man das mit dem ImageMagick-Kommando convert vom Prinzip her so machen: convert original/seite_001.png -crop 100%x100%-0-400 cropped/seite_001.png. Weil das bei mehreren hundert Dateien mühselig werden kann, greifen wir zu mogrify, das ähnlich wie convert funktioniert, jedoch auch als batch-Prozessor verwendet werden kann:

mogrify -crop 100%x100%-0-400 -path ./cropped original/*.png

Das schneidet also bei allen PNG-Dateien die unteren 400 Pixel ab und legt das Ergebnis im Verzeichnis cropped ab.

Texterkennung

Die so entstandenen PNG-Dateien sind jetzt bereit für die Texterkennung. Wir erstellen ein neues Verzeichnis ocr und füttern tesseract mit allen PNG-Dateien des cropped-Verzeichnisses. Tesseract soll die Ergebnisse in Form von Textdateien im eben erstellten ocr-Verzeichnis ablegen. Hilfreich ist hier ein kleines Skript, das direkt in der Konsole eingegeben werden kann:

for i in cropped/*.png; do b=`basename "$i" .png`; tesseract -l deu "$i" ocr/"$b" txt; done

Gescannten Text überarbeiten

Natürlich funktioniert die Texterkennung nicht einwandfrei. Deshalb müssen wir die Textdateien noch überarbeiten. Hierfür geeignet ist z. B. ein Texteditor mit Rechtschreibprüfung, oder eben ein ausgewachsenes Textverarbeitungsprogramm wie LibreOffice. Mithilfe der Rechtschreibprüfung werden sich die meisten Fehler beheben lassen. Eine (von sicherlich vielen möglichen) Vorgehensweise ist etwa, den Inhalt aller TXT-Dateien – nach etwas Vorarbeit – in LibreOffice zu laden, um dann die restlichen OCR-Fehler zu beseitigen und Kapitelüberschriften, kursiven Text usw. entsprechend zu markieren.

Was ist nun mit »Vorarbeit« gemeint? Beispielsweise wird von tesseract jede Zeile mit einem \n (line feed) abgeschlossen. Ein Absatz hingegen wird durch eine Leerzeile dargestellt, so dass hier zwei line feeds aufeinander folgen (\n\n). Kopierte man den Text einfach so in LibreOffice, so würde aus jeder Zeile ein eigener Absatz. Um das zu verhindern kann man mit Suchen und ersetzen so vorgehen:

  1. \n\n###
  2. \n (Leerzeichen)
  3. ###\n

Wörter, die am Zeilenende getrennt wurden, haben immer ein “- ” (Bindestrich und Leerzeichen) am Ende. Dies kann man natürlich auch reparieren:

  1. - ” → (leer)

(Allerdings muss man dann später ggf. schauen, ob nicht etwa Wendungen wie “Lach- und Sachgeschichten” zu “Lachund Sachgeschichten” geworden sind. Hier hilft dann aber bei Überarbeiten die Rechtschreibprüfung.)

Glücklicherweise kann das alles sed erledigen. Folgendes Kommando führt oben genannte Schritte aus und überschreibt (!) dabei die OCR-Dateien:

sed -z -i 's/\n\n/###/g;s/\n/ /g;s/###/\n/g;s/- //g' seite_???.txt

Vorab sollte man das natürlich einmal testen.

Tatsache ist: Möchte man später ein lupenreines E-Book haben, steckt in diesem Arbeitsschritt eine Menge Arbeit.

E-Book erstellen

Der Text liegt jetzt also hoffentlich weitgehend fehlerfrei vor. Nun geht es um das Erstellen des eigentlichen E-Books. Auch hier gibt es wieder mehrere Möglichkeiten. Ob man lieber zu Sigil oder zum Calibre-Editor greift, das entscheidet man am besten, wenn man sich die beiden Tools einmal näher angesehen hat.

Im EPUB-Editor der Wahl erstellt man am besten für jedes Kapitel eine eigene XHTML-Datei und fügt den entsprechenden Text ein. Wenn man den Text in LibreOffice – wie oben als Möglichkeit beschrieben – vorliegen hat, der kann das Dokument zunächst mit pandoc in ein E-Book konvertieren:

pandoc MeinBuch.odt -t epub3 -o MeinBuch.epub

Damit das E-Book auch ansprechend dargestellt wird, muss man noch einige CSS-Regeln erstellen, sodass das Buch etwa im Blocksatz gesetzt, die Absätze vernünftig eingerückt und die Überschriften ordentlich angezeigt werden. Als ein einfaches Beispiel könnte die stylesheet.css-Datei dann etwa so aussehen:

body {
  text-align: justify;
  font-size: 1em;
  line-height: 150%;
  font-family: serif;
}
h1 {
  text-align: center;
  font-size: 200%;
  font-family: sans;
}
h1.verziert::before {
  background-image: url(../images/kapitelgrafik.png);
  background-size: 63px 22px;
  display: inline-block;
  width: 63px;
  height: 22px;
  content: "";
  margin-right: 1em;
}
h1.verziert::after {
  background-image: url(../images/kapitelgrafik.png);
  background-size: 63px 22px;
  display: inline-block;
  width: 63px;
  height: 22px;
  content: "";
  margin-left: 1em;
}
h2 {
  text-align: center;
  font-family: sans;
}
p.author {
  text-align: center;
  margin-bottom: 2em;
}
p.title {
  text-align: center;
  font-weight: bold;
  font-family: sans;
  font-size: 2em;
  margin-bottom: 0.5em;
}
p.subtitle {
  text-align: center;
  font-weight: bold;
  font-family: sans;
  font-size: 1.1em;
  margin-bottom: 2em;
}
p.genre {
  text-align: center;
}
p.impressum {
  text-align: center;
}
p.sinnabschnitt {
  text-align: center;
  margin-top: 1em;
  margin-bottom: 1em;
}
p.sinnabschnitt img {
  width: 125px;
}
p {
  margin-top: 0;
  margin-bottom: 0;
}
p + p {
  text-indent: 1.2em;
}
blockquote + p {
  text-indent: 1.2em;
}
h1 + p:first-of-type:first-letter {
  font-size: 300%;
  line-height: 100%;
  float: left;
  padding-right: 0.125em;
  font-family: sans;
}
nav#toc ol, nav#landmarks ol {
  padding: 0;
  margin-left: 1em;
}
nav#toc ol li, nav#landmarks ol li {
  list-style-type: none;
  margin: 0;
  padding: 0;
}
img {
  max-width: 100%;
}
table.personen {
  text-align: left;
  font-size: 0.8em;
}
th {
  text-align: center;
}
td.center {
  text-align: center;
}
td.right {
  text-align: right;
}
dt {
  text-align: left;
  font-weight: bold;
}
dd {
  text-align: left;
}
blockquote > p {
  text-align: center;
  font-style: italic;
  font-weight: bold;
  margin-bottom: 0.5em;
}
blockquote > p + p {
  font-style: italic;
  text-align: center;
  font-weight: normal;
}
ol li {
  text-align: left;
}

Die erste Seite des ersten Kapitels sieht dann schon mal nicht übel aus:

Beispielseite

Abschließend kann man das EPUB dann etwa in Calibre importieren. Hier lassen sich auch die restlichen Metadaten bequem pflegen. Sollten noch Fehlerbehebungen oder kleine Anpassungen nötig sein, kann man das ganz einfach über den Calibre-eigenen EPUB Editor machen.