Im letzten Teil haben wir uns mit der Erstellung eigener Inhalte beschäftigt. In diesem Teil wird es zunächst noch einmal sehr technisch, bevor wir in einem letzten Teil ganz praktisch-theologisch das Arbeiten mit den Inhalten betrachten werden.
Bisher sind wir von zwei Dingen ausgegangen: a) der Text steht unter einer freien Lizenz und b) der Text ist voll digital verfügbar. Nun wollen wir zum einen Texte behandeln, die nur für den eigenen Gebrauch in ein SWORD-Format überführt werden dürfen und damit nicht in öffentlichen Repositories zur Verfügung gestellt werden dürfen. Zum anderen betrachten wir öffentlich verfügbare Texte mit einer oft dürftigen OCR-Qualität.
Karl Barth: Kurze Auslegung des Römerbriefs
Dieses Werk steht auf archive.org zur Verfügung und ist als Public Domain gekennzeichnet. Da das US-amerikanische PD nicht mit dem europäischen „gemeinfrei“ übereinstimmt, ist die Rechtslage in Deutschland nicht ganz so einfach. Technisch steht aber ein OCR-Text in verhältnismäßig guter Qualität zur Verfügung (“FULL TEXT” im rechten Kasten).
Als Grundlage können wir – wie im vorherigen Teil – folgendes Grundgerüst nehmen:
<?xml version="1.0" encoding="UTF-8" ?>
<osis xmlns="http://www.bibletechnologies.net/2003/OSIS/namespace"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.bibletechnologies.net/2003/OSIS/namespace
http://www.bibletechnologies.net/osisCore.2.1.1.xsd">
<osisText osisIDWork="Barth-Röm" osisRefWork="book" xml:lang="de">
<header>
<work osisWork="WorkID">
<title>Kurze Erklärung des Römerbriefs</title>
<creator role="aut">Karl Barth</creator>
</work>
<work osisWork="Bible">
<refSystem>Bible</refSystem>
</work>
</header>
<div type="book" osisID="Kurze Erklärung des Römerbriefs">
[...]
</div>
</osisText>
</osis>
Der obere Bereich beinhaltet die Grundinformationen, dort wo […] vermerkt ist, kommen nun die Inhalte ins Spiel. Ein Blick in das Inhaltsverzeichnis verrät uns, dass die Buchstruktur sehr einfach ist. Wir müssen nur ein paar majorSections hinzufügen:
<div type="majorSection" osisID="VORWORT">
<title>VORWORT</title>
...
</div>
Die eigentliche Transformation erledigen wir mit Python. Zunächst benötigen wir einige Bibliotheken:
import os, subprocess
import re
Nun definieren wir noch Ein- und Ausgabe und lesen die Datei:
infile = "20200323_KURZE ERKLARUNG DESRDMERBRIEFES_djvu.txt"
outfile = "röm.xml"
f = open(infile, "r")
text = f.read()
Jetzt transformieren wir zunächst alle Seitenzahlen in eckige Klammern und entfernen die Zeilenumbrüche:
text = re.sub ( r"\n\n\n([0-9]+)[\s*]\n\n\n",
" [\g<1>] "
, text)
text = text.replace(" ", "")
Das einzige, was uns noch vom direkten Einfügen in unsere Vorlage abhält, sind die Zeilenumbrüche. OSIS verlangt Paragraphen in <p>-Tags. Außerdem haben wir noch im Satz getrennte Wörter. Eine vollständige Auflistung des benötigten Codes findet sich in einem eigenen Repository.
Jetzt schreiben wir noch den fertig transformierten Text in die Ausgabedatei und kopieren dann die Inhalte in die Vorlage.
f2 = open(outfile, "w")
f2.write(output)
Was fangen wir nun mit der XML-Datei an? Wir müssen sie erneut mit den SWORD-Hilfsprogrammen konvertieren:
xml2gbs Barth-Röm.xml Barth-Röm
Die drei neuen Dateien verschiebt man wieder in das SWORD-Verzeichnis (~/.sword/modules/…) und erzeugt eine conf-Datei, die z.B. so aussehen kann:
[Barth-Röm]
DataPath=./modules/genbook/rawgenbook/Barth-Röm/Barth-Röm
ModDrv=RawGenBook
BlockType=CHAPTER
SourceType=OSIS
CompressType=ZIP
GlobalOptionFilter=OSISFootnotes
GlobalOptionFilter=OSISHeadings
Encoding=UTF-8
Lang=de
LCSH=Bible--Commentaries.
Description=Kurze Erklärung des Römerbriefs
About=Kurze Erklärung des Römerbriefs, Karl Barth (1959)
History_1.0=Initial version
DistributionLicense=Public Domain, see https://archive.org/details/20200323kurzeerklarungdesrdmerbriefes_202003/mode/2up
Nun kann man den Text von Karl Barth in SWORD bewundern. Wir hätten nur noch ein, zwei Schönheitsoperationen zu erledigen: Die Fußnoten. Zum Glück enthält dieses Buch fast gar keine. Man kann mit einem beliebigen Texteditor nach dem Sternchen * suchen. Die Fußnoten ergänzen wir dann mit dem <note>-Tag:
Gestehen wir es gleich zu: Wären uns die Verse 19—21<note type="x-footnote">* Vgl. zu dieser Stelle KD. I, 2 S. 334 f. und II, 1 S. 131 f.</note> für sich, vielleicht als Fragment [...]
Das automatische Behandeln von Fußnoten ist keine einfache Aufgabe und das händische Nacharbeiten von vielen Fußnoten eine sehr mühsame Fleißarbeit.
Einige weitere Bücher, z.B. der Kommentarreihe Neues Testament Deutsch (NTD) stehen bei Digi20 zum Download, etwa der Johannes-Kommentar. Dieses Buch darf nur für private Zwecke digital bearbeitet werden. Andere Bücher (etwa die Theologie von Stuhlmacher) stehen wiederum unter Creative Commons-Lizenz zur Verfügung. Hier müsste jemand mit guten Kenntnissen der rechtlichen Situation die Weitergabe prüfen.
Weitere Informationen und Beispiele finden sich im Repository oder bei Github.
Sonderfälle wie PDF-Dateien ohne OCR
Wir sollten noch zwei Sonderfälle behandeln: Vollständige PDF-Dateien, wie sie beispielsweise direkt vom Verlag oder als E-Book verwendet werden und PDF-Dateien mit Scans ohne OCR.
Im letzteren Fall müssen wir entweder komplett selbst Hand anlegen und die Vorlagen manuell umwandeln, z.B. mit Tesseract in der Kommandozeile oder einem Frontend wie gImageReader. Tesseract funktioniert für fast alle Schriften sehr gut und erkennt auch griechische oder hebräische Texte. Problematisch wird eine Mischung aus mehreren Schriften. Zwar erkennt Tesseract theoretisch diese unterschiedlichen Schriften – in der Praxis reduziert das die Qualität aber erheblich. Und ein händisches Verfahren ist aufwendig.
Einfacher ist ein PDF mit allen Inhalten. Hier können bspw. Fußnoten gut erkannt werden (die Trennlinien werden in page.lines
abgelegt).
Fazit
Nach einigem Ausprobieren steht fest: Den Konverter pdf2sword gibt es leider nicht. Man kann sich aber mit einigen Tools das Leben etwas leichter machen. Letztlich hängt es auch von der Qualität und Komplexität der Vorlage ab.
Schön wäre es, wenn wir nicht nur Quellen für möglichst gemeinfreie Werke zusammenstellen, sondern auch Code zusammentragen könnten, der bei der Konvertierung und Weiterverarbeitung hilft.