Den Parzival, den grabben wir! Einleitung

Wie man Texte aus dem Internet auf den heimischen PC zieht

Es gibt sie durchaus: Mittelhochdeutsche Texte im Internet. Wir wollen an ganz konkreten Aufgabenstellungen erkunden, wie man solche Ressourcen nutzt, die für private oder wissenschaftliche Zwecke zur freien Verfügung stehen. Um sie auch offline weiterverwenden zu können, werden wir uns die Texte aus dem Internet auf den eigenen Rechner zu laden. Manchmal benötigt man nicht mehr als ein paar Mausklicks, um eine geeignete lokale Kopie zu erzeugen. Spätestens bei umfangreicheren Materialien lohnt es sich aber diese Vorgänge zu automatisieren. Dazu verwenden wir dann die Skriptsprache Python.

Als erstes beschäftigen wir uns mit einem der prominentesten Texte der mittelhochdeutschen Epoche, dem Parzival des Wolfram von Eschenbach. Bei einem solchen Werk, das weiterhin in immer neuen Interpretationsansätzen und Nachdichtungen erkundet wird, können wir davon ausgehen, dass wir ohne größere Mühe auch Textfassungen im Internet finden. Tatsächlich werden wir beim ergoogeln des Parzivals sogar  im deutschsprachen Projekt Gutenberg fündig. Dort handelt es sich allerdings um die hübsch gereimte und versifizierte Nachdichtung von Karl Simrock in neuhochdeutscher Sprache. Von dieser für uns uninteressanten (literaturhistorisch durchaus spannenden!) Übersetzung abgesehen, finden wir jedoch eine reiche Auswahl von Ausgaben.

Das Internet verbunden mit der Digitalfotografie ermöglicht inzwischen Jedermann und an jedem Ort den Blick in die Originalhandschriften. Wer durch diese technischen Errungenschaften einen atmosphärischen Verlust befürchtet, darf sich selbstverständlich gerne Stoffhandschuhe anziehen und das Licht im heimischen Wohnzimmer dämpfen, bevor er den Codex Pal. germ. 339, in der Parzival-Forschung unter dem Sigle n bekannt, auf seinem Tablett öffnet, um sich an den Aquarellzeichnungen zu erfreuen, die die Handlung illustrieren:

Gahmuret und Belacane – Entnommen dem digitalen Faksimile des Cod. Pal. germ. 339 der Universität Heidelberg

Eine andere teilweise illustrierte Ausgabe des Parzivals, die Handschrift BSB Cgm 19  (Sigle G) lässt sich wahlweise in der Bayerischen Staatsbibliothek oder auch an jedem anderen Ort der Welt einsehen:

Kampf Artus gegen Gramoflanz – Entnommen dem digitalen Faksimile der Handschrift BSB cgm 19 der Bayrischen Staatsbibliothek

Derzeit wird an den Universitäten Bern und Basel eine komplette digitale Neuedition des Parzivals erstellt, die einen neuen Standard setzen wird. Die Edition der in der Forschung mit dem Sigle D bezeichneten Handschrift (Cod. 857, St. Gallen, Stiftsbibliothek) lässt sich bereits einsehen und nutzen. Diese bietet zusätzlich zur fotografischen Abbildung auch jeweils die kommentierte Transkription des Textes. Gute Abbildungen sind zwar für viele Einsatzzwecke auch der sorgfältigsten und penibelsten Textedition vorzuziehen, bedürfen aber gelegentlich doch der Interpretation, die sich möglicherweise erst aufgrund komplexen Hintergrundwissens oder auch durch den Vergleich mit anderen Textzeugnissen ergibt. Auf die Textfassung lassen sich zudem leichter die im digitalen Zeitalter üblichen und gewohnten Recherchetechniken anwenden, die die Navigation der Editions-Website komfortabel zur Verfügung stellt.

Die Schweizer Neuedition wird als Referenz auch die Edition von Karl Lachmann ersetzen. Lachmann sah die Aufgabe des Philologen darin, aus dem verstreuten Handschriftentexten eine Fassung zu rekonstruieren, die den Autorwillen repräsentierte. Diese gab er in einem sogenannten Normalmittelhochdeutsch wieder, das von Zufälligkeiten der Schreibung abstrahieren sollte und deshalb in einem gewissen Sinne als Lautschrift betrachtet werden kann. Die von ihm rekonstruierte Fassung wurde 1833 zusammen mit anderen unter dem Namen Wolfram von Eschenbach überlieferten Texten erstmals veröffentlicht. Sie ist bis heute die Grundlage aller gedruckten Editionen. Die im Buchhandel erwerblichen Fassungen sind allerdings relativ kostspielig. Wer auf eine Übersetzung und Kommentierung verzichten kann und keine Probleme mit der Frakturschrift hat, der findet als kostenlose Alternative bei Google Books mehrere vollständige Ausgaben dieser Edition als eingescannte PDFs vor.  Der Lachmansche Text liegt übrigens auch der an der Hochschule Augsburg im Rahmen des Projektes bibliotheca Augustana veröffentlichen Internetversion zugrunde.

Mehr als einen funktionierenden Internetanschluss und ein Gerät zur Anzeige von Webinhalten brauchen wir also nicht, um uns mit dem Parzival des Wolfram von Eschenbach auf sehr vielfältige Weise auseinanderzusetzen.

Was aber, wenn wir diese Auseinandersetzung gerne offline durchführen würden? Was, wenn wir uns den Text lieber auf einem E-Book-Reader als auf dem Bildschirm des Laptops ansehen würden? Oder, weil wir doch ziemlich konservativ sind, gar gedruckt, auf Papier? Möglicherweise ziehen wir es auch vor Bücher zu hören, anstatt sie zu lesen, auf langen Autofahrten, im Fitnessstudio. Vielleicht sind wir auch durch eine Sehschwäche auf diese Art der Lektüre angewiesen. Es gibt mehr als einen guten Grund, warum die Zugangsmöglichkeiten im Internet nicht als ausreichend betrachtet werden können. Gerade wenn wir die Texte für wissenschaftliche Untersuchungen nutzen wollen, stellen wir schnell fest, dass die Navigation, die uns eine Website zur Verfügung stellt, für unsere Zwecke nicht genügt. Das liegt natürlich daran, dass die Website die sehr extravaganten Anfragen, die wir haben, nicht antizipieren kann. Denn der Wert einer wissenschaftlichen Untersuchung wird unter anderem in der Originalität ihrer Fragestellung bemessen. Je origineller wir sind, desto weniger können uns die bereitgestellten Instrumente weiterhelfen.

Als unser erstes Ziel werden wir deshalb definieren, die im Internet zugänglichen Fassungen auf unsere heimische Festplatte zu laden. Wir nehmen uns vor, sowohl den bisher als Standard gültigen Text der Edition von Lachmann, als auch das Transkript der in der Schweiz erstellte Edition der Handschrift n zu verwenden. Von beiden wollen wir jeweils folgende Fassungen erzeugen:

  • Eine reine Textdatei
  • Eine Textdatei mit Nummerierungen der Bücher, Zeilen etc.
  • Eine HTML-Datei zur Anzeige im Browser oder beispielsweise in einem E-Book-Reader
  • Das Fragment einer XML-Datei, die dem für Editionen wissenschaftlich üblichen TEI-Standard entspricht und mit einem entsprechenden Header versehen, eine solche Edition bilden würde.
  • Schließlich wollen wir auch die kompletten Abbildungen der Handschrift n aus dem Internet laden und sie mit einer einfachen  Navigation für unsere Zwecke versehen.

Der Blick in eine Handschrift ermöglicht den Zugang zu Informationen, die keine (Text-)Edition wirklich komplett erfassen kann. Doch auch die gedruckte oder im Internet publizierte Edition verwendet Signale zur Informationsvermittlung, die möglicherweise bei einem Übertrag in ein anderes Format verloren gehen könnten. Das könnten beispielsweise die Anordnung der Textbestandteile auf der Seite sein und die dazu korrespondierende Positionierung eines Kommentars oder wissenschaftlichen Apparats, oder die Schriftgröße, der Buchstabenabstand und so weiter.

Falls wir aus solchen Gründen Interesse daran haben, die Druckfassung der ursprünglichen Lachmanschen Edition offline zu verwenden, lässt sich diese selbstverständlich als Pdf bei Google Books beziehen. Uns allerdings interessiert in erster Linie der Text dieser Edition. Es wäre sehr umständlich diesen per OCR den im Auftrag von Google eingescannten Vorlagen (in Frakturschrift!) zu entnehmen, zumal wir das Programm zur Buchstabenerkennung zuvor in der mittelhochdeutschen Orthographie (in der Lachmann’schen Normalschreibung) trainieren müssen. Da wir jedoch auf die Fassung der bibliotheca Augustana zugreifen können, bei der die Umsetzung in maschinenlesbare Buchstaben bereits erfolgt ist, können wir uns diesen Aufwand erspraren. Wir verwenden also ausschließlich diese Website und die der Berner Universität für unser kleines Projekt. Für einen ersten Text reduzieren wir unsere Aufgabe noch ein wenig, indem wir uns auf den Prolog des Textes beschränken, die Verse 1.1 – 4.26.

Im Baseler Codex befindet sich dieser Text auf den Seiten 5 und 6, bzw. Blatt 1r und 1v. Um uns die Abbildungen der Seiten unter einem uns genehmen Namen auf die Festplatte zu laden, müssen wir nichts weiter tun, als auf der Website, die uns die Handschrift anzeigt, die entsprechenden Seiten aufzuschlagen und über dem Bild das Kontextmenü mit der rechten Maustaste aufzurufen:

Ebenso leicht lassen sich die beiden von uns gewünschten Textdateien erzeugen. Wir öffnen den Texteditor unserer Wahl, markieren den gewünschten Textausschnitt auf der entsprechenden Website, kopieren ihn von dort und setzen ihn in den Texteditor ein. Dann überlegen wir uns, welche Zeichenkodierung wir verwenden wollen (UTF-8 ist üblich) und speichern die Datei als .txt.

Fertig.

Zu einfach?

Moment! Das waren ja bisher nur die reinen Textdateien. Wir wollten für jede Edition auch eine HTML-Fassung erzeugen und ein TEI-Fragment …

Nein. Keine Sorge! Dieses Tutorial wird sich nicht darauf beschränken, den Einsatz der Zwischenablage zu erläutern. Es soll jedoch, bevor wir ernsthaft beginnen, noch einmal deutlich ins Bewusstsein gerückt werden, dass es nicht immer notwendig ist, zu verhältnismäßig aufwendigen technischen Lösungen zu greifen, wenn das gewünschte Ergebnis durch ein paar Mausklicks ebenfalls erreicht werden kann. In einem früheren Tutorial haben wir eine Methode erprobt, mit der sich eine Tabellenkalkulation dazu einsetzen lässt, um Zeilen eines Textes nach einem bestimmten Muster mit Textbausteinen zu verknüpfen, um sie in validen HTML-Code zu verpacken. Analog lassen sich für ein kleines Textfragment, wie den Prolog des Parzivals, auch die gewünschten TEI-konformen Auszeichnungen ohne jeden Programmieraufwand komfortabel und schnell erzeugen. Wir werden, sobald wir uns mit dem TEI-Format auseinandersetzen, diese Methode für ein erstes Experiment einsetzen.

An dieser Stelle stellen wir jedoch als erstes kleines Zwischenfazit fest, dass es möglich ist, Ausgaben des Parzival im Internet zu finden. Weiterhin ist es möglich, die dort präsentierten Inhalte zu übernehmen und auf der eigenen Festplatte zu speichern. Dabei lässt sich das Format den eigenen Wünschen anpassen. Für nicht zu anspruchsvolle Aufgabenstellungen reichen uns copy & paste, ein Texteditor und als nützliches Hilfsmittel eine Tabellenkalkulation, um das gewünschte Ergebnis zu erzeugen.

Wenn wir uns die beiden per copy-&-paste übertragenen Texte in unseren Texteditoren ansehen, sind wir möglicherweise nicht ganz zufrieden mit den Ergebnissen:

Transkription Baseler Codex:

-
1.01-0 Der Parcival.
1.01 IST zwiuel h(er)zen nahgebur
1.02 daz muͦz der sele werden sur
1.03 gesmehet unde gezieret.
1.04 ist swa sich parrieret.
1.05 vn verzaget mannes muͦt.
1.06 als agelstern varwe tuͦt.
1.07 der mac dennoc* dennoch wesen geil.

Lachmannsche Edition nach der bibliotheca augustana:

Ist zwîvel herzen nâchgebûr,
daz muoz der sêle werden sûr.
gesmæhet unde gezieret
ist, swâ sich parrieret
5
unverzaget mannes muot,
als agelstern varwe tuot.
der mac dennoch wesen geil:

 

Es gibt ein paar Zeilen, die nicht zum eigentlichen Text gehören, Überschriften oder andere Elemente enthalten. Das Formatschema für die Nummerierung, ist nicht einheitlich und müsste je nach unseren Ansprüchen angepasst werden. Die Baseler Edition vermerkt Emendierungen (Korrekturen der Handschrift) in einem Verfahren, dass in unserer reinen Textfassung zu Doppelungen führt. So folgt auf die in der Handschrift gefundene Schreibung dennoc die angesetzte Lesung dennoch. Der Stern * erlaubt es uns dabei, die Handschriftenfassung zu erkennen. Wir können oder müssen uns entscheiden, wie wir in solchen Fällen verfahren wollen, ob wir beide Fassungen, nur die originale Schreibung, oder nur die korrigierte Lesung aufnehmen wollen. Das sind jedoch kleine Probleme, die wir leicht durch ein paar Eingriffe unseren Wünschen entsprechend „händisch“ lösen können.

Der Parzival enthält jedoch beinahe 25000 Verse. In gedruckten Fassungen entspricht das etwa 800 Seiten Papier, wenn jede Seite einen der Lachmannschen Absätze enthält. Es braucht nicht viel Vorstellungskraft, um einzusehen, dass unsere bisherige simple Herangehensweise bald an Grenzen stoßen muss, wenn wir unsere Aufgabenstellung ausweiten.

Auch wenn sie inzwischen auf jede Art von Aufgabenstellung angewendet werden können, wurden Skriptsprachen einmal dazu erfunden, den alltäglichen Arbeitsaufwand zu reduzieren, indem die wiederkehrenden Aufgabenstellungen durch ein paar Zeilen Programmiercode automatisiert werden. Wir werden für unsere Zwecke die Skriptsprache Python einsetzen, die sich durch eine besonders leicht zu lernende, einfache Syntax auszeichnet. Wer noch nie mit Python gearbeitet hat, kann sich die aktuelle Python-IDLE (Die Programmierumgebung) für sein Betriebssystem auf der offiziellen Website  herunterladen. Dieses Tutorial wird keinen Kurs in dieser Programmiersprache darstellen. An diesen besteht auch sicherlich kein Mangel. Der verwendete Programmcode und die dazu gehörigen Erklärungen werden aber so einfach gehalten, dass es auch ohne Vorkenntnisse möglich sein sollte, ihnen zu folgen und die präsentierten Techniken für eigene Zwecke einzusetzen und variieren.

Wir beginnen nachdem wir unsere Vorüberlegungen abgeschlossen und gegebenenfalls die Python-Programmierumgebung heruntergeladen und gestartet haben, mit einem Blick in den Quellcode der Websiten im Internet.

im ersten Teil dieses Tutorials.

 

 

 

 

 

 

 

 

 

 

 

 

Zeilenweise Suchen in HTML

Digitalisierte Texte lassen sich durch Algorithmen durchsuchen, die Daten können geordnet, gruppiert und sortiert werden. Das sind Möglichkeiten, die nicht nur von Verfechtern des distant reading genutzt werden und ohne die keine moderne Forschung in den Geisteswissenschaften mehr möglich ist. Sorgfältig präparierte Editionen in von der wissenschaftlichen Gemeinschaft entwickelten standardisierten Datenformaten erlauben es, auch sehr spezifischen Anfragen die für eine Fachrichtung relevant sind, an die Quellen zu stellen. Allerdings ist es nicht für jede Aufgabenstellung nötig, die Daten in einem dieser teilweise sehr komplexen Datenformate zu erfassen, schließlich beherrscht auch eine einfache Textverarbeitung die Möglichkeit differenzierte Suchen durchzuführen. Etwas schwieriger gestaltet es sich allerdings, einen vergleichenden Überblick über die gefundenen Textstellen zu bekommen, die auch jeweils den relevanten Kontext der Textstelle anzeigt.

Die Markup-Sprache HTML wird in erster Linie mit dem World Wide Web in Verbindung gesetzt und sicherlich findet sie als Sprache zur Gestaltung der Internetseiten ihre wichtigste Anwendung. Das Format stellt eine sehr einfach zu handhabende Möglichkeit dar, Texte strukturiert zu erfassen und diese Struktur dann in einem Browser anschaulich zu präsentieren. Mit sehr einfachen Mitteln ist es sehr schnell möglich, einen Text als HTML zu formatieren. Da die Browser auch Programmiersprachen verstehen, lassen sich dann ohne großen Aufwand nützliche Funktionen zur Recherche in die HTML-Dateien integrieren.

Nachfolgend wird eine Möglichkeit demonstriert, die Suche nach Textbelegen zu vereinfachen.Dabei wird angenommen, dass jede Verszeile in einem Listenelement untergebracht ist. Die Suchanfrage wird, sobald der entsprechende Knopf betätigt wird, auf die Listenelemente angewendet und blendet alle diejenigen Listenelemente aus, die den Suchkriterien nicht entsprechen. Damit sind also nur noch jene sichtbar, die das gesuchte Merkmal aufweisen. Wer ein wenig experimentieren will, versucht sich an regulären Ausdrücken. Mit e[,.]$ beispielsweise lassen sich alle Verszeilen finden die auf einer offenen Silbe auf -e enden.

Bitte hier den Suchtext (das Suchmuster) eingeben:

  1. Ich prüeve in mîme sinne
  2. daz lûterlîchiu minne
  3. der werlte ist worden wilde.
  4. dar umb sô sulen bilde
  5. ritter unde frouwen
  6. an diesem mære schouwen,
  7. wand ez von ganzer liebe seit.
  8. des bringet uns gewisheit
  9. von Strâzburc meister Gotfrit:
  10. swer ûf der wâren minne trit
  11. wil eben setzen sînen fuoz,
  12. daz er benamen hœren muoz
  13. sagen unde singen
  14. von herzeclichen dingen,
  15. diu ê wâren den geschehen
  16. die sich dâ hæten undersehen
  17. mit minneclichen ougen.
  18. diu rede ist âne lougen:
  19. er minnet iemer deste baz
  20. swer von minnen etewaz
  21. hœret singen oder lesen.
  22. dar umbe wil ich flîzec wesen
  23. daz ich diz schœne mære
  24. mit rede alsô bewære
  25. daz man dar ane kiesen müge
  26. ein bilde daz der minne tüge,
  27. diu lûter unde reine
  28. sol sîn vor allem meine.

Um diese Funktionalität in einer eigenen HTML-Seite unterzubringen, bedarf es tatsächlich nur ein paar Zeilen Code, die in deren Header eingetragen werden müssen:

<head>
  <script type = "text/javascript" 
         src = "https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js">
  </script>		
  <script type = "text/javascript">
    $(document).ready(function() {
      // Füge am Anfang des Dokuments einen Absatz
      // und in diesemSuchfeld mit der id "suche" ein.

      $("body").prepend("<p>Suche: <input type='text' id='suche' /></p>");
      
      // Wenn sich der Suchtext ändert ...

      $("#suche").change(function() {
        let Suchtext = $("#suche").val();  // Suchtext übernimmt den Text des Suchfeldes
        let reSuch = new RegExp(Suchtext); // reSuch ist ein regulärer Ausdruck, der darauf basiert.
        $("li").each(function()
        {
            // Alle Listenelemente werden überprüft (test),
            // ob sie das Suchmuster beinhalten

            if(reSuch.test($(this).text()))
            {
                $(this).fadeIn(); // gefunden? Einblenden.
            }
            else
            {
                $(this).fadeOut(); // nicht? Ausblenden.
            }
         });
      });
        
   });
  </script>
</head>

Das kleine jQuery-Skript fügt einen neuen Absatz am Anfang der Seite ein, in dem sich das Suchfeld findet. Auf einen Button, wie er in diesem Blogbeitrag verwendet wird, wird der Einfachheit verzichtet. Sobald sich der Inhalt des Suchfeldes, dem die id „such“ zugeordnet wurde, ändert, wird die Funktion aufgerufen, die zuerst aus der Texteingabe einen regulären Ausdruck erzeugt. Dann wird Listenelement für Listenelement (Vers für Vers) überprüft, ob das Suchmuster darin wiedergefunden und je nachdem die Zeile ein- oder ausgeblendet.
Selbstverständlich ist es möglich, das Skript in eine nachzuladende Datei zu speichern und dann in die HTML-Seite nachzuladen. Diese muss dann nur noch folgende Zeilen im Header ergänzen (Dateiname und Pfad müssen natürlich auf das Skript verweisen und gegebenenfalls angepasst werden, um es zu laden):

<head>
      <title>The jQuery Example</title>
      <script type = "text/javascript" 
         src = "https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js">
      </script>	
      <script type = "text/javascript"
	  	src="RegexSuche.js">
      </script>
   </head>

Das Skript sieht dann so aus:

// Inhalt der Datei:
// RegexSuche.js


$(document).ready(function() {
    $("body").prepend("<p>Suche: <input type='text' id='suche' /></p>");
    $("#suche").change(function() {
       
        let Suchtext = $("#suche").val();
        let reSuch = new RegExp(Suchtext);

        $("li").each(function()
        {
            if(reSuch.test($(this).text()))
            {
                $(this).fadeIn();
            }
            else
            {
                $(this).fadeOut();
            }
        });
    });      
 });

Der Code wurde bewusst einfach gehalten, da nur das Prinzip demonstriert werden sollte. Im realen Einsatz wird beispielsweise mehr Flexibilität erreicht, wenn statt eines Markup-Typs ein Klassennamen zur Identifizierung der zu durchsuchenden Textblöcke zu verwendet wird. Und sicherlich ist „suche“ kein besonders geeigneter Bezeichner, wenn man vorhat, die Routine in eine komplexe Umgebung einzubinden.In dieser einfachen Form lässt der Codeschnipsel sich jedoch per copy und paste schnell übernehmen, wenn innerhalb von Minuten ein paar einfache Fragen an einen Text gestellt und beantwortet werden sollen.

Tabellen und Texte

Zu den immer wiederkehrenden Aufgabe im Umgang mit (alten) Texten gehört es, ein Digitalisat in ein anderes digitales Format zu übertragen. Ein Ausschnitt des Nibelungenliedes in der Fassung der Handschrift A wurde von einem fleißigen Helfer sorgfältig abgetippt und ist in einer Datei mit der Endung .txt abgespeichert worden:

 
Ez wuohs in Burgonden ein schoene magedin
daz in allen landen niht schoeners mohte sin
Chriemhilt was si geheizzen vnde was ein schoene wip
darumbe mvosen degene vil verliesen den lip 

Diese Transkription soll jetzt auf einer Website angezeigt werden. Zusätzlich ist eine spätere Weiternutzung der für diesen Zweck erzeugten HTML-Fassung in einer E-Book-Publikation geplant. Die Abfolge der Verszeilen muss selbstverständlich jeweils und auf jedem gewählten Wiedergabegerät erkennbar bleiben. Es ist deshalb vorgesehen, dass die Verszeilen, die in der .txt-Datei je eine Zeile einnehmen, in der HTML-Fassung separat durch Markup ausgezeichnet werden. Ein (vereinfacht wiedergegebenes) Gerüst der HTML-Datei besteht bereits:

<!DOCTYPE html>
<html>
  <body>
<!-- weiterer Inhalt -->     
      <ol>
<!-- ... hier soll der mittelhochdeutsche Text eingefügt werden -->
     </ol>
<!-- weiterer Inhalt -->
   </body>
<html>

 

Jetzt geht es also nur noch darum, zwischen die beiden tags <ol> und </ol> (ol = ordererd list) den Text der Absätze einzufügen und jeweils ein Starttag <li> voran und ein Endtag </li> hinter sie zu stellen (li = list element). Das klingt allerdings nach einer reichlich monotonen Aufgabe. Der eine oder andere Fan der Serie mag sich bei solchen Aufgabenstellungen an die Stelle eines Bart Simpson zu Beginn jeder Folge versetzt fühlen, ein Stück Kreide in der Hand, die große leere Schultafel vor sich. Es gibt jedoch viele Möglichkeiten, eine nicht ganz so stupide Lösung zu finden, um das gewünschte Ziel zu erreichen. Vielleicht die simpelste ist es, eine Tabellenkalkulation zu diesem Zweck einzusetzen. Eine solche dürfte auf den meisten Arbeitsrechnern als Teil des dort installierten Office-Paketes vorhanden sein. Andernfalls gibt es für Calc, dem zu Libre Office (bzw. Open Office) gehörenden Programm, oder in dem von Google bereitgestellten Dienst Tabellen, die Möglichkeit, eine (kostenlose) Onlinelösung zu verwenden. Die im folgenden vorgestellte Methode funktioniert jedenfalls vollkommen identisch in Excel, Calc oder der Android-Variante.

Als erstes wird der Ausgangstext komplett in die Zwischenablage kopiert. Dann wird in einer leeren Arbeitsmappe der Tabellenkalkulation der eigenen Präferenz die zweite Zelle der ersten Zeile markiert (B1). Hierhin fügen wir den Text ohne weitere Formatierungsangaben ein: :

Die Tabellenkalkulation übernimmt die Absatzformatierung der Vorlage. Der Text wird zeilenweise in die Spalte B der Tabelle eingesetzt. Momentan sieht es so aus, als ob sich die Textzeilen über mehrere Spalten erstrecken würden. Tatsächlich sind sie jedoch auf Zellen der Spalte B beschränkt. Wir können uns davon überzeugen, indem wir die Breite der Spalte verändern. Dazu positionieren wir den Mauscursor in die Überschriftenzeile auf die Grenze zwischen die hinterlegten Kästchen mit den Buchstaben B und C und verschieben dann die Grenze zwischen den Spalten bei gedrückter linker Maustaste.

Vor die erste Zelle mit einem Textinhalt, in die Zelle A1, geben wir als Text <li>> ein. In die Zelle nach dem Text, also C1, schreiben wir </li>:

Nun setzen wir den Cursor in die Zelle D1 und schreiben folgende Anweisung, die wir durch die Eingabetaste abschließen:

=A1 & B1 & C1

Das Gleichheitszeichen zu Beginn der Eingabe signalisiert, dass der von uns eingegeben Text als Formel zu verstehen ist, die Leerzeichen sind nur als Erleichterung für unsere Augen verwendet worden und könnten auch wegbleiben. Nach dem Betätigen der Eingabetaste sollten wir das Ergebnis der Formelanwendung sehen. Es ist die Zeichenkette, die sich aus dem durch das „Kaufmannsund“ & signalisierten Zusammenfügen des Zelleninhalts von A1, B1 und C1 ergibt:

D1 enthält den durch das Markup ausgezeichneten Text der ersten Verszeile, so wie wir ihn in die HTML-Datei einsetzen wollen. Wir können ihn mit Kopieren ebenso leicht aus der Tabelle entnehmen, wie wir ihn zuvor per Einfügen in diese eingetragen haben, und dann umgekehrt den Inhalt der Zwischenablage wieder in die HTML-Datei einsetzen. Es wäre allerdings ein sehr mühseliges Verfahren, wollten wir die beschriebenen Arbeitsschritte für jede einzelne Verszeile des Textes wiederholen. Das müssen wir jedoch gar nicht! Denn jetzt können wir eine der zahlreichen kleinen Hilfestellungen nutzen, die Tabellenkalkulationen den Anwendern bei repetiven Aufgaben anbieten.

Wird eine Zelle der Tabelle angeklickt und damit markiert, dann wird sie von einem Rahmen umgeben, dessen rechte, untere Ecke eine quadratförmige Verdickung aufweist. Wir markieren die Zelle A1 und steuern das kleine Quadrat mit dem Mauscursor an, bis dieser sich in ein kleines (in Calc ist es nicht ganz so klein) schwarzes Kreuz oder Plussymbol verwandelt:

Wir können nun mit gedrückter linker Maustaste den markierten Rahmen in der Spalte herabziehen. Sobald wir den Mausknopf loslassen (äquivalent: den Finger vom Touchpad des Laptops nehmen), wird automatisch der Inhalt der Zelle A1 in alle Zellen übertragen, die nun von dem Rahmen umgeben sind. Auf diese Weise ist es uns ein leichtes, alle Zellen in Spalte A vor einer mit Text gefüllten Zelle in Spalte B mit dem Einleitungstag <li> zu füllen.

Auf gleiche Weise können wir nach den Textzeilen verfahren. Wir markieren diesmal allerdings gleich zwei Zellen der Tabelle, C1 und D1 (linken Mausknopf gedrückt halten und Cursor verschieben):

Wenn wir nun wie zuvor das Quadrat in der unteren rechten Ecke des Rahmens anklicken und den schwarzen Plus-Cursor nach unten ziehen, kopieren wir nicht nur den Textinhalt von C1 in die darunterliegenden Zellen, sondern auch die Formel in D1. Diese wird jedoch nicht buchstabengetreu übernommen. Das wollen wir auch gar nicht, denn es würde dazu führen, dass in jeder Zelle der Spalte D derselbe Text, nämlich die Aneinanderreihung von A1, B1, C1, zu finden wäre (Ez wuohs in Burgonden …). Tatsächlich reiht die Formel in Zeile 2 jedoch A2, B2 und C2, in der dritten Zeile A3, B3 und C3 usw.. Dieses adaptive Kopierverfahren erleichtert viele Arbeitsschritte beim Umgang mit Formeln in Tabellen. Tatsächlich muss man mehr Aufwand betreiben, falls man einmal ausdrücklich möchte, dass eine Formel „buchstäblich“, ohne Anpassung, in kopierte Zellen übernommen wird. Auch wir profitieren vom intelligenten Kopierverfahren und können nun per copy & paste sämtliche von tags umrahmte Verszeilen in die HTML-Datei übernehmen.

Da sich der Text der tags von Zeile zu Zeile nicht ändert, können wir für unser Beispiel sogar darauf verzichten , die tags in die Zellen der Spalten A und C einzuschreiben. Denn es genügt folgende Formel in D1, um zum selben Ergebnis zu gelangen:

="<li>" & B1 & "</li>

Unser zuerst verwendetes Verfahren mag ein wenig umständlicher erscheinen, ist aber vermutlich etwas einfacher für denjenigen nachzuvollziehen und für eigene Zwecke abzuwandeln, der bisher wenige Erfahrungen mit dieser Art von Programmen gesammelt hat.

Wir widmen uns jedoch abschließend einer Erweiterung der Aufgabenstellung, die es tatsächlich nötig macht, den Inhalt zweier Zellen in die Formel einzubeziehen. HTML ordnet einem Listenelement einer geordneten Liste einen Index zu. Da es sich beim Textausschnitt um ein Zitat handelt, wollen wir natürlich, dass stets die korrekte Zeilennummerierung verwendet wird. Eine geordnete Liste in HTML erhöht, von einem Startwert ausgehend, den Index der Folgeelemente automatisch jeweils um eins. Eigentlich bräuchten wir bei einem zusammenhängenden Textausschnitt also nur einmal einen Wert anzugeben. Wir haben uns jedoch entschlossen, die Zeilennummerierung jeder Verszeile einzeln zu erfassen und im <li>-Element festzuschreiben. Möglicherweise merkt man daran, wie sehr wir uns als Wissenschaftler einer gewissen Pedanterie verpflichtet fühlen. Wir denken aber auch an das künftige E-Book und erhalten uns mit dieser Maßnahme die Option, die Zitate aus dem Text für dieses umzustellen, zu portionieren und auf mehrere von anderen HTML-Elementen unterbrochene, geordnete Listen zu verteilen.

Die Zeilennummern werden wir in der inzwischen nicht mehr für Formatierungszwecke benötigten Spalte A notieren. Da die Abfolge der Textzeilen (vorerst) intakt ist, können wir wiederum das adaptive Kopierverfahren verwenden, um die Verse fortlaufend zu nummerieren. Dazu tragen wir in A1 und in A2 jeweils die aufeinander folgenden Versnummerierungen ein. Wenn wir nun die beiden Zellen gemeinsam markieren und danach den Rahmen nach unten ziehen, werden die vom Rahmen erfassten folgenden Zellen mit Zahlenwerten gefüllt, die das Intervall wiederholen, das sich zwischen A1 und A2 feststellen lässt.

Jetzt müssen wir nur noch unsere Formel in D1 anpassen. Der Index eines Listeneintrags in HTML wird im Attribut value gespeichert und wie alle Attribute zwischen Anführungszeichen eingeschlossen. Anführungszeichen haben aber auch in den Formeln der Tabellenkalkulationen eine Aufgabe haben. Wir haben sie bereits genutzt, um Zeichenketten („<li>“) dazwischen zu notieren. Um anzuzeigen, dass wir jetzt ein Anführungszeichen in einer Zeichenkette (und nicht zur äußeren Kennzeichnung der Zeichenkette) meinen, müssen eine besondere Kodierung verwenden. Die nun etwas sperrigere Formel in D1 lautet:

="li value="""&A1&""">"&B1&"&</li>"

Nachdem wir sie in die restlichen Zellen von D übernommen haben, können wir wie gewohnt, mit copy & paste unsere Arbeit (lange vor dem Pausenklingeln) abschließen:

Nach dem ersten mittelhochdeutschen Hörbuch

Diese Reflektionen beziehen sich auf ein Tutorial, in dem demonstriert wurde, wie sich aus einem mittelhochdeutschen Textausschnitt eine Sprachausgabe erzeugen lässt. Der Beginn des Tutorials findet sich hier.

Tastatur und Bildschirm haben sicher noch lange nicht ausgedient, aber immer seltener stellen sie die einzige Schnittstelle zur Computertechnologie dar. Die Fähigkeit einer Maschine, geschriebenen Text in gesprochene Sprache zu verwandeln, ist in Zeiten der persönlichen Assistentinnen ziemlich alltäglich geworden. Es ist insofern nicht verwunderlich, dass sich die Technologien zur Sprachsynthese mittlerweile mit relativ geringem Aufwand nutzen lassen. An der Sprache einer vergangenen Zeit scheitern die synthetischen Vorleser jedoch. Für diejenigen, die auf diese Technologie angewiesen sind und sich alleine mit ihrer Hilfe im Netz der Informationen bewegen, ergeben sich kaum zu überwindende Barrieren, sobald sie auf mittelhochdeutsche Texte treffen.

Wir haben in unserem Experiment demonstriert, dass es mit ein paar Zeilen Programmcode, allerdings durchaus möglich ist, aus einem geschriebenen mittelhochdeutschen Text eine verständliche und nachvollziehbare Sprachausgabe zu generieren. Die folgende Datei erlaubt es, die Ausgangslage und das Ergebnis bei Abschluss unseres Projektes zeilenweise zu vergleichen:

Der Übungstext, den wir für unseren Test verwendeten, war in der auf Lachmann und andere Pioniere der Mediävistik zurückgehenden normierten Orthographie des Mittelhochdeutschen verfasst. Diese kann im Wesentlichen als Lautschrift verstanden werden. Auf der Basis dieser Überlegung wurde für die Wörter des Textes algorithmisch eine phonetische Realisierung ermittelt, die von der Sprachsynthese wiedergegeben werden kann. Die Metrik mehrsilbiger Wörter ließ sich mit einer kleinen Gruppe von Regeln ziemlich zuverlässig ermitteln. Nur wenige Ausnahmen und Übergeneralisierungen mussten in einem Lexikon händisch eingetragen werden. Ebenfalls in einem Lexikon vermerkt wurden einsilbige Funktionswörter, deren Betonung kontextbedingt wechselt. Die Position im Vers ließ sich für eine verbesserte, sinngemäße Lesung der Akzentuierungen hinzuziehen. Ein weiterer Nutzen konnte aus den in die Edition eingetragenen Satzzeichen gezogen werden. Diese Verbesserungen auf rhythmischen Gebiet und die daraus resultierende größere inhaltliche Verständlichkeit der Lesung lässt sich an den im Verlauf des Tutorial entstandenen Audiodateien leicht nachvollziehen. Durch die doppelte Lesung ist dies an der obigen Datei nicht ganz so gut erkennbar.

Das im Tutorial entstandene Programm ist ohne weitere Änderung und Anpassung in der Lage einen sehr viel größeren Textausschnitt in eine Audiodatei einzulesen. Es wäre beispielsweise kein Problem, den Gesamttext, dem der Ausschnitt entnommen war, zu verwenden. Die Qualität der Lesung wird nur relativ geringfügig durch bisher unbekannte Worte und Konstellationen beeinträchtigt. Die eingangs formulierte Einsatzabsicht, die Erstellung eines Hörbuchs aus einem ausgewählten Text für private Zwecke lässt sich somit erreichen. Einige Modifikationen, etwa die Aufteilung der Audiodatei in Hörkapitel oder die bereits im Programm vorgenommene Umwandlung in transportablere MP3-Dateien würden den Komfort zwar steigern, sind aber nicht zwingend nötig.

Texte, die einer anderen Schreibnorm folgen, kann dieses Programm nicht besser lesen, als es die für das Neuhochdeutsche voreingestellten Routinen der Sprachsynthese tun würden. Ebenso wenig kann mit anderen Datenformaten als reinen Textdateien umgegangen werden. Um eine größere Flexibilität zu erreichen wäre es zwingend notwendig, die in das Programm unveränderbar eingeschriebenen Datenstrukturen, insbesonders die lexikalischen Daten, vom Programmcode zu trennen und damit (extern) editierbar zu machen. Das im Tutorial eingeführte aber keinesfalls erschöpfend behandelte Datenformat SSML bietet die benötigten Formalismen für solche Aufgaben. Es war nicht Absicht des Tutorials, eine fertige Lösung für komplexe Aufgaben im großen Maßstab zu erstellen. Viele Möglichkeiten wurden nur angedeutet und ausschnittsweise demonstriert. Selbstverständlich lassen sich sehr viel aufwendigere und treffsicherere Algorithmen zur Ermittlung von Lautstrukturen, Sinneinheiten und Akzentuierungen implementieren und differenziertere Strukturen in SSML kodieren. Mit größerer Ernsthaftigkeit und mehr Professionalität betrieben, als es der Rahmen eines Tutorials gestattet und vorsieht, wäre es möglich, jeden überlieferten und digitalisierten Text der mittelhochdeutschen Zeit wieder zum Klingen zu bringen. In einem gewissen Sinne wäre die Vision der frühen Mediävisten damit tatsächlich umgesetzt. Dieses Tutorial sollte anschaulich und unterhaltsam in die Thematik einführen, erste Kenntnisse der Technik vermitteln und zugleich demonstrieren, wie viel sich bereits mit recht bescheidenen Mitteln erreichen lässt. Es war durchaus Absicht, implizit darauf aufmerksam zu machen, dass angesichts der vorhandenen Möglichkeiten zur Aufhebung der Barrieren, die derzeitig fast ausschließlich den Sehenden vorbehaltene Präsentation der (wissenschaftlichen) Mediävistik im Internet eigentlich nicht akzeptabel ist.

Es wäre jedoch falsch, den Nutzen mit Hilfe der Computerprogramme erzeugter Sprachdateien, ausschließlich darin zu sehen, dass auf diesem Wege die alten Texte breiteren (weniger sehstarken) Schichten zugänglicher wären. Es sind Interpretationen und wenn sie auf dem Stand der wissenschaftlichen Forschung basieren, Editionen, anhand derer sich Theorien ebenso bilden und falsifizieren lassen, wie es Editionen in geschriebener Form erlauben. Die in diesem Tutorial verwendete und vorgestellte Methode erzeugt keine Audiodatei. Sie erstellt eine präzise und bis in phonetische Feinheiten ausgearbeitete Vorgabe, wie ein Text zu lesen ist und übergibt diese an ein Programm, das daraus Klänge erzeugt. Die Vorlage lässt sich speichern, kritisieren, kommentieren, diskutieren, korrigieren – und zur Kontrolle oder auch zu Unterhaltungs- und Informationszwecken lässt sich der dazugehörige Klang anhören.