5.5. 🚀 Analyse 2: Syntaktischer N-Gramme#

Hinweise zur AusfĂŒhrung des Notebooks

Dieses Notebook kann auf unterschiedlichen Levels erarbeitet werden (siehe Abschnitt “Technische Voraussetzungen”):

  1. Book-Only Mode: Sie lesen das Notebook hier im “Jupyter Book”, ohne den Code selbst auszufĂŒhren.

  2. Cloud Mode: Klicken Sie oben rechts in der MenĂŒleiste auf das Raketen-Symbol 🚀 und wĂ€hlen Sie “Colab”, um das Notebook auszufĂŒhren.

  3. Local Mode: Klicken Sie oben rechts in der MenĂŒleiste auf das Download-Symbol ↓ und wĂ€hlen Sie “.ipynb”, um das Notebook lokal auszufĂŒhren.

5.5.1. Übersicht#

Im Folgenden werden unsere beiden Korpora – Korpus I und Korpus II, die beiden Zufallsstichproben aus dem Abschnitt Sampling und Filterung des Korpus – mithilfe syntaktischer n-Gramme analysiert. Wie schon in der semantischen Feldanalyse werten wir beide Korpora parallel aus und vergleichen die Ergebnisse, um einschĂ€tzen zu können, welche Muster robust sind und welche von der konkreten Zufallsauswahl abhĂ€ngen. Ziel ist es, wiederkehrende grammatische Muster, insbesondere adjektivische Modifikationen von Substantiven, im Verlauf der Zeit zu untersuchen und damit ĂŒber rein lexikalische HĂ€ufigkeiten hinauszugehen. Im Unterschied zur Analyse semantischer Felder stehen hier syntaktisch motivierte Wortkombinationen auf Basis von AbhĂ€ngigkeitsbeziehungen im Fokus, etwa Adjektiv ← Substantiv-Relationen wie „verdorbene ← Luft“, „frischer ← Wind“ oder „dicker ← Qualm“. Untersucht wird, wie hĂ€ufig solche Konstruktionen in den beiden Korpora auftreten und wie sich ihr Vorkommen zeitlich entwickelt – um stilistische und diskursive VerĂ€nderungen in der Beschreibung bestimmter Konzepte sichtbar zu machen.

In diesem Notebook-Walkthrough beschrĂ€nken wir uns aus GrĂŒnden der Übersichtlichkeit auf das Substantiv „Luft“, der Code funktioniert jedoch ebenso mit einer ganzen Liste mehrerer Substantive.

Dazu werden die folgenden Schritte durchgefĂŒhrt:

  1. Einlesen des Korpus, der Metadaten sowie der bereits erzeugten spaCy-Annotationen

  2. Auswahl relevanter POS-tags & Dependency-Relationen zur Bildung syntaktischer n-Gramme

  3. Extraktion syntaktischer n-Gramme auf Basis der vorhandenen AbhÀngigkeitsinformationen

  4. Identifikation von Ausreißertexten, die auffĂ€llige Peaks in den Zeitreihen (mit-)verursachen

  5. KWIC-/Kontextansicht ausgewÀhlter Belegstellen aus diesen Texten zur qualitativen Einordnung der syntaktischen Muster

  6. VerÀnderungsorientierte Analyse: Identifikation aufkommender und verschwindender Modifikatoren sowie der ZeitrÀume mit dem stÀrksten Vokabularwandel

  7. Diskussion der Ergebnisse

5.5.2. Import der Bibliotheken#

import sys
!{sys.executable} -m pip install numpy pandas plotly itables requests tqdm spacy click nbformat
import requests
from pathlib import Path
import re
from typing import Dict, List, Union, Tuple
from collections import OrderedDict, Counter
from time import time

import numpy as np
import pandas as pd

import nbformat
import plotly.express as px
import plotly.io as pio
import plotly.graph_objects as go

from itables import show
from tqdm import tqdm

import spacy
from spacy.tokens import DocBin, Doc

if 'google.colab' in sys.modules:
  pio.renderers.default = "colab"
else:
  pio.renderers.default = "notebook+plotly_mimetype"

Bevor wir Daten herunterladen, definieren wir eine kleine Hilfsfunktion download_file. Sie lĂ€dt eine Datei plattformunabhĂ€ngig – also z.B. unter Windows, macOS oder Linux – aus dem Internet in einen Zielordner herunter und ersetzt damit das Kommando wget, das nicht auf allen Systemen verfĂŒgbar ist.

# helper: download a single file (cross-platform replacement for `! wget -P`)
def download_file(url, target_dir):
    """Download the file at `url` into `target_dir`, keeping its original name."""
    target_dir = Path(target_dir)
    target_dir.mkdir(parents=True, exist_ok=True)
    target_path = target_dir / url.split("/")[-1]
    response = requests.get(url)
    response.raise_for_status()
    target_path.write_bytes(response.content)
    return target_path

Laden des spaCy-Modells

Hinweis

Nach dem Herunterladen des Sprachmodells zeigt spaCy in Jupyter- und Colab-Umgebungen automatisch eine gelbe Warnung „Restart to reload dependencies“ an. Diese Warnung erscheint an dieser Stelle grundsĂ€tzlich immer – unabhĂ€ngig davon, ob ein Neustart tatsĂ€chlich nötig ist – und kann in aller Regel ignoriert werden: Fahren Sie einfach mit der nĂ€chsten Zelle fort.

Nur falls beim AusfĂŒhren der nĂ€chsten Zelle (spacy.load(...)) tatsĂ€chlich ein Fehler auftritt, wĂ€hlen Sie “Laufzeit neu starten” (Colab) bzw. “Kernel neu starten” (Jupyter) und fĂŒhren Sie anschließend alle Zellen dieses Notebooks von oben bis zu dieser Stelle erneut aus.

! {sys.executable} -m spacy download de_core_news_sm
nlp = spacy.load("de_core_news_sm")

5.5.3. Einlesen der Annotationen#

In diesem Schritt greifen wir auf die Vorarbeit aus dem Kapitel Korpusverarbeitung – von Strings zu Token zurĂŒck: Dort haben wir jeden Text unseres Korpus mit spaCy annotiert und die Ergebnisse gespeichert (siehe insbesondere Annotation mit spaCy → Dateien schreiben). Diese gespeicherten Annotationen lesen wir nun wieder ein, um darauf aufzubauen.

Zur Erinnerung: Beim Annotieren erzeugt spaCy fĂŒr jeden Text ein sogenanntes Doc-Objekt – den Text samt aller dort ermittelten linguistischen Annotationen (Tokens, Wortarten, Grundformen, syntaktische AbhĂ€ngigkeiten), so wie spaCy ihn im Arbeitsspeicher hĂ€lt. Um diese Doc-Objekte dauerhaft auf der Festplatte zu speichern, haben wir sie im Kapitel Korpusverarbeitung in ein kompaktes, spaCy-eigenes Containerformat namens DocBin gepackt – das sind unsere .spacy-Dateien, wobei eine einzelne Datei mehrere Docs enthalten kann. Beim Einlesen kehren wir diesen Vorgang nun um: Die gespeicherten DocBin-Dateien werden wieder zu vollstĂ€ndigen Doc-Objekten „entpackt” (rekonstruiert) und in einer Datenstruktur abgelegt, die eine weitere Analyse erlaubt.

In der folgenden Zelle definieren wir den Pfad zum Quellordner, in dem die spacy-Annotationen als Dateien gespeichert sind. Anschließend erstellen wir diesen Ordner (mit der Methode mkdir, die Ordner anlegen kann):

# 🚀 Create data directory path
# Change path here when using another corpus
annotation_dir = Path("../data/spacy")
annotation_dir.mkdir(parents=True, exist_ok=True)

In der folgenden Zelle erhalten wir die Liste der Dateien in dem Ordner auf GitHub, in dem die wÀhrend der Korpusverarbeitung erzeugten spaCy-Annotationen gespeichert sind. Die Liste der direkten URLs zu diesen Dateien wird in der Variable url_list gespeichert.

# 🚀 Create download list 
github_api_txt_dir_path = "https://api.github.com/repos/quadriga-dk/Text-Fallstudie-3/contents/data/spacy"
txt_dir_info = requests.get(github_api_txt_dir_path).json()
url_list = [entry["download_url"] for entry in txt_dir_info]

In der folgenden Zelle laden wir jede Datei herunter, indem wir ĂŒber die zuvor erstellte Liste url_list iterieren und jede Datei mit unserer Funktion download_file speichern.

# ⚠ Only execute, if you haven't downloaded the files yet!
# 🚀 Download all spacy files from github – this step will take a while
for url in tqdm(url_list, desc="Downloading spaCy files"):
    download_file(url, "../data/spacy")

In der folgenden Zelle iterieren wir ĂŒber die .spacy-Dateien und öffnen jede einzelne als spaCy-Objekt in Python (damit alle linguistischen Merkmale des Textes im weiteren Code programmatisch genutzt werden können). ⚠ Die Verarbeitung aller Annotationsdateien dauert je nach Computer bzw. Colab-Sitzung etwa 5–10 Minuten.

# Create dictionary to save the corpus data (filenames and tables)
annotated_docs = {}

start = time()
# Iterate over spacy files
for fp in tqdm(annotation_dir.iterdir(), desc="Reading annotated data"):
    # check if the entry is a file, not a directory
    if fp.is_file():
        # check if the file has the correct suffix spacy
        if fp.suffix == '.spacy':
            print( f"Loading file: {fp.name}" )
            # load spacy DocBin objects
            doc_bin = DocBin().from_disk(fp)
            chunk_docs = list(doc_bin.get_docs(nlp.vocab))
            # merge bins into one single document
            full_doc = Doc.from_docs(chunk_docs)

            # save the data frame to the dictionary, key=filename (without suffix), value=spacy.Doc
            annotated_docs[fp.stem] = full_doc
took = time() - start

Hide code cell output

Reading annotated data: 0it [00:00, ?it/s]
Loading file: Karl_Immermann_-_Die_Epigonen_(1836).spacy
Reading annotated data: 1it [00:01,  1.81s/it]
Loading file: Wilhelm_Raabe_-_Das_letzte_Recht_(1862).spacy
Reading annotated data: 2it [00:02,  1.11it/s]
Reading annotated data: 3it [00:02,  1.75it/s]
Loading file: Friedrich_Spielhagen_-_Die_Dorfcoquette_(1868).spacy
Loading file: Willibald_Alexis_-_Der_falsche_Woldemar_(1842).spacy
Reading annotated data: 4it [00:03,  1.01it/s]
Loading file: Hugo_von_Hofmannsthal_-_Reitergeschichte_(1899).spacy
Loading file: Ludwig_Aurbacher_-_Die_schwÀbische_Bauernhochzeit_(1832).spacy
Loading file: Jeremias_Gotthelf_-_Der_Geltstag_(1845).spacy
Reading annotated data: 7it [00:04,  1.80it/s]
Loading file: Heinrich_Laube_-_Das_Schloß_in_Franken_(1837).spacy
Loading file: Hans_Hoffmann_-_Das_Gymnasium_zu_Stolpenburg_(1891).spacy
Reading annotated data: 9it [00:05,  2.34it/s]
Loading file: Friedrich_GerstÀcker_-_Die_Ahnung_(1850).spacy
Loading file: Friedrich_de_la_Motte_Fouqué_-_Undine_(1811).spacy
Reading annotated data: 11it [00:05,  2.93it/s]
Loading file: Karl_Emil_Franzos_-_Moschko_von_Parma_(1880).spacy
Reading annotated data: 12it [00:05,  2.81it/s]
Reading annotated data: 13it [00:06,  3.24it/s]
Loading file: Fritz_Reuter_-_Memoiren_eines_alten_Fliegenschimmels_(1855).spacy
Loading file: Leopold_Kompert_-_Gottes_Annehmerin_(1865).spacy
Loading file: Fritz_Reuter_-_DörchlÀuchting_(1866).spacy
Reading annotated data: 15it [00:06,  2.92it/s]
Reading annotated data: 16it [00:07,  3.34it/s]
Loading file: Clemens_Brentano_-_Die_mehreren_WehmĂŒller_und_ungarischen_Nationalgesichter_(1817).spacy
Loading file: Christoph_von_Schmid_-_Das_TĂ€ubchen_(1854).spacy
Loading file: Oskar_Panizza_-_Das_Wirtshaus_zur_Dreifaltigkeit_(1893).spacy
Reading annotated data: 18it [00:07,  4.81it/s]
Loading file: Friedrich_GerstĂ€cker_-_Die_Flucht_ĂŒber_die_Kordilleren_(1859).spacy
Loading file: Friedrich_Spielhagen_-_In_Reih'_und_Glied._Zweiter_Theil_(1866).spacy
Reading annotated data: 20it [00:08,  2.66it/s]
Reading annotated data: 21it [00:08,  3.01it/s]
Loading file: Paul_Heyse_-_Spielmannslegende_(1883).spacy
Loading file: Gottfried_Keller_-_Pankraz,_der_Schmoller_(1856).spacy
Reading annotated data: 22it [00:08,  3.51it/s]
Loading file: Sophie_Wörishöffer_-_Onnen_Visser_-_Der_Schmugglersohn_von_Norderney_(1885).spacy
Reading annotated data: 23it [00:10,  1.71it/s]
Loading file: Otto_Ludwig_-_Zwischen_Himmel_und_Erde_(1856).spacy
Reading annotated data: 24it [00:10,  1.81it/s]
Loading file: Ernst_Eckstein_-_FĂŒrst_Arno_(1899).spacy
Loading file: Willibald_Alexis_-_Der_Werwolf_2_(1848).spacy
Reading annotated data: 26it [00:11,  2.19it/s]
Loading file: Johann_Gabriel_Seidl_-_Sie_ist_versorgt!_(1842).spacy
Loading file: Wilhelm_Hauff_-_Novellen_(1828).spacy
Reading annotated data: 28it [00:12,  2.12it/s]
Loading file: Heinrich_Heine_-_Florentinische_NĂ€chte_(1837).spacy
Reading annotated data: 29it [00:12,  2.33it/s]
Loading file: Edmund_Hoefer_-_Die_alte_Erlaucht_(1857).spacy
Reading annotated data: 30it [00:13,  2.49it/s]
Loading file: Helene_Böhlau_-_Der_schöne_Valentin_(1886).spacy
Reading annotated data: 31it [00:13,  2.77it/s]
Loading file: Clemens_Brentano_-_Die_Schachtel_mit_der_Friedenspuppe_(1815).spacy
Loading file: Oskar_Meding_-_Der_Todesgruß_der_Legionen_(1874).spacy
Reading annotated data: 33it [00:14,  2.02it/s]
Loading file: Theodor_Körner_-_Die_Harfe_(1811).spacy
Loading file: Felix_Dahn_-_Walhall_(1883).spacy
Reading annotated data: 35it [00:15,  1.85it/s]
Reading annotated data: 36it [00:16,  2.14it/s]
Loading file: Jeremias_Gotthelf_-_Wie_fĂŒnf_MĂ€dchen_im_Branntwein_jĂ€mmerlich_umkommen_(1838).spacy
Loading file: ETA_Hoffmann_-_Das_Majorat_(1817).spacy
Reading annotated data: 37it [00:16,  2.48it/s]
Loading file: Friedrich_Hebbel_-_Eine_Nacht_im_JĂ€gerhause_(1863).spacy
Loading file: Heinrich_von_Kleist_-_Geistererscheinung_(1811).spacy
Loading file: Jeremias_Gotthelf_-_Hans_Joggeli_der_Erbvetter_(1848).spacy
Reading annotated data: 40it [00:16,  4.19it/s]
Loading file: Karl_May_-_Scepter_und_Hammer_(1879).spacy
Reading annotated data: 41it [00:17,  2.19it/s]
Loading file: Gottfried_Keller_-_Das_Sinngedicht_(1881).spacy
Reading annotated data: 42it [00:18,  1.95it/s]
Reading annotated data: 43it [00:18,  2.34it/s]
Loading file: Ottilie_Wildermuth_-_MĂ€dchenbriefe_(1862).spacy
Loading file: Franz_Grillparzer_-_Der_arme_Spielmann_(1847).spacy
Reading annotated data: 44it [00:18,  2.88it/s]
Loading file: Hans_Hoffmann_-_Im_Lande_der_PhÀaken_(1884).spacy
Reading annotated data: 45it [00:19,  3.00it/s]
Reading annotated data: 46it [00:19,  3.43it/s]
Loading file: H._Clauren_-_Die_Großmutter_(1827).spacy
Loading file: Nataly_von_Eschstruth_-_Jung_gefreit_-_2_(1897).spacy
Reading annotated data: 47it [00:19,  2.88it/s]
Reading annotated data: 49it [00:19,  4.56it/s]
Loading file: Achim_von_Arnim_-_Die_Majoratsherren_(1820).spacy
Loading file: Berthold_Auerbach_-_Der_Kindesmord_(1848).spacy
Loading file: Johanna_Spyri_-_In_sicherer_Hut_(1882).spacy
Loading file: Karl_May_-_Der_Weg_zum_GlĂŒck._Zweiter_Band_(1886).spacy
Reading annotated data: 51it [00:21,  2.58it/s]
Reading annotated data: 52it [00:21,  3.00it/s]
Loading file: Theodor_Storm_-_Waldwinkel_(1874).spacy
Loading file: Sophie_Wörishöffer_-_Gerettet_aus_Sibirien_(1885).spacy
Reading annotated data: 53it [00:21,  2.74it/s]
Loading file: Fritz_Reuter_-_Eine_Heirathsgeschichte_(1855).spacy
Loading file: ETA_Hoffmann_-_Die_Elixiere_des_Teufels_(1815).spacy
Reading annotated data: 55it [00:22,  2.67it/s]
Loading file: Johann_Peter_Hebel_-_Reise_nach_Frankfurt_(1832).spacy
Loading file: Wilhelm_Jensen_-_Dietwald_Werneken_(1888).spacy
Reading annotated data: 57it [00:23,  3.19it/s]
Reading annotated data: 58it [00:23,  3.56it/s]
Loading file: Ferdinand_KĂŒrnberger_-_Flucht_und_Fund_(1859).spacy
Loading file: Richard_Voß_-_Villa_Falconieri_(1896).spacy
Reading annotated data: 59it [00:23,  2.98it/s]
Loading file: Peter_Rosegger_-_Die_Abelsberger_Chronik_(1898).spacy
Reading annotated data: 60it [00:24,  2.45it/s]
Loading file: Christoph_von_Schmid_-_Das_Rotkehlchen_(1854).spacy
Loading file: Henriette_Paalzow_-_Thomas_Thyrnau_–_Erster_Theil_(1843).spacy
Reading annotated data: 62it [00:24,  2.87it/s]
Loading file: Therese_Huber_-_Das_misslungene_Opfer_(1828).spacy
Loading file: Eugenie_Marlitt_-_Goldelse_(1866).spacy
Reading annotated data: 64it [00:25,  2.68it/s]
Reading annotated data: 66it [00:25,  3.68it/s]
Loading file: Friedrich_Hebbel_-_Matteo_(1841).spacy
Loading file: Christoph_von_Schmid_-_Gottfried,_der_junge_Einsiedler_(1829).spacy
Loading file: Georg_Ebers_-_Homo_sum_(1878).spacy
Reading annotated data: 67it [00:26,  2.94it/s]
Loading file: Ludwig_Ganghofer_-_Der_JĂ€ger_von_Fall_(1883).spacy
Reading annotated data: 68it [00:26,  2.81it/s]
Loading file: Carl_Spindler_-_Der_VogelhÀndler_von_Imst_(1841).spacy
Reading annotated data: 69it [00:28,  1.55it/s]
Loading file: Karl_Gutzkow_-_Die_Kurstauben_(1852).spacy
Loading file: Max_Eyth_-_Hinter_Pflug_und_Schraubstock_(1899).spacy
Reading annotated data: 71it [00:29,  1.57it/s]
Loading file: Leopold_Kompert_-_Ohne_Bewilligung_(1848).spacy
Loading file: E_Werner_-_GlĂŒck_auf!_(1874).spacy
Reading annotated data: 73it [00:30,  1.88it/s]
Reading annotated data: 74it [00:30,  2.21it/s]
Loading file: Adalbert_Stifter_-_Nachkommenschaften_(1864).spacy
Loading file: Heinrich_Zschokke_-_Das_Goldmacherdorf_(1817).spacy
Reading annotated data: 75it [00:30,  2.33it/s]
Loading file: Theodor_Meyer-Merian_-_Dienen_und_Verdienen_(1865).spacy
Reading annotated data: 76it [00:31,  2.55it/s]
Reading annotated data: 77it [00:31,  3.13it/s]
Loading file: Jeremias_Gotthelf_-_Die_Frau_Pfarrerin_(1854).spacy
Loading file: Jeremias_Gotthelf_-_Michels_Brautschau_(1849).spacy
Reading annotated data: 78it [00:31,  3.08it/s]
Reading annotated data: 81it [00:31,  5.95it/s]
Loading file: Willy_Pastor_-_Der_Tod_des_Judas_(1895).spacy
Loading file: Ludwig_Tieck_-_Der_Pokal_(1812).spacy
Loading file: Friedrich_GerstÀcker_-_Jack_und_Bill_(1858).spacy
Loading file: Hermann_Kurz_-_Der_Weihnachtsfund_(1856).spacy
Loading file: Adalbert_Stifter_-_Der_Nachsommer_(1857).spacy
Reading annotated data: 83it [00:33,  2.18it/s]
Reading annotated data: 84it [00:33,  2.54it/s]
Loading file: Ilse_Frapan_-_Weisse_Flamme_(1895).spacy
Loading file: Jean_Paul_-_Der_Maschinenmann_(1825).spacy
Loading file: Friedrich_GerstÀcker_-_Im_Busch_(1864).spacy
Reading annotated data: 86it [00:34,  2.81it/s]
Loading file: H._Clauren_-_Das_Dijon-Röschen_-_1_(1823).spacy
Reading annotated data: 87it [00:34,  2.77it/s]
Loading file: Maximilian_Schmidt_-_Die_Schwanjungfrau_(1885).spacy
Reading annotated data: 88it [00:35,  2.92it/s]
Loading file: Georg_Ebers_-_Die_Schwestern_(1880).spacy
Reading annotated data: 89it [00:35,  2.49it/s]
Reading annotated data: 91it [00:35,  3.70it/s]
Loading file: Theodor_Körner_-_Hans_Heilings_Felsen_(1811).spacy
Loading file: Adelbert_von_Chamisso_-_Peter_Schlemihls_wundersame_Geschichte_(1813).spacy
Loading file: Ottilie_Wildermuth_-_Die_alte_Freundin_(1877).spacy
Reading annotated data: 92it [00:36,  2.90it/s]
Loading file: Eduard_Mörike_-_Maler_Nolten_(1832).spacy
Reading annotated data: 93it [00:37,  2.01it/s]
Loading file: Franz_Grillparzer_-_Das_Kloster_bei_Sendomir_(1827).spacy
Loading file: Josephine_GrÀfin_Schwerin_-_Rodanseck_(1883).spacy
Reading annotated data: 95it [00:37,  2.74it/s]
Loading file: ETA_Hoffmann_-_Rat_Krespel_(1818).spacy
Loading file: Arthur_Schnitzler_-_Die_Braut_(1895).spacy
Loading file: Heinrich_Zschokke_-_Die_Rose_von_Disentis_(1822).spacy
Reading annotated data: 98it [00:38,  3.48it/s]
Loading file: Carl_Spitteler_-_Friedli,_der_Kolderi_(1891).spacy
Loading file: Eduard_Mörike_-_Aus_dem_Gebiete_der_Seelenkunde_(1861).spacy
Loading file: Jeremias_Gotthelf_-_Wie_Uli_der_Knecht_glĂŒcklich_wird_(1841).spacy
Reading annotated data: 101it [00:39,  3.33it/s]
Reading annotated data: 102it [00:39,  3.68it/s]
Loading file: Ferdinand_von_Saar_-_Innocens_(1866).spacy
Loading file: Christoph_von_Schmid_-_Rosa_von_Tannenburg_(1823).spacy
Reading annotated data: 103it [00:39,  3.77it/s]
Loading file: H._Clauren_-_Die_GrÀfin_Cherubim_(1824).spacy
Reading annotated data: 104it [00:40,  3.23it/s]
Reading annotated data: 105it [00:40,  3.50it/s]
Loading file: Heinrich_Schaumberger_-_GlĂŒckliches_UnglĂŒck_(1874).spacy
Loading file: Franz_Dingelstedt_-_Die_neuen_Argonauten_(1839).spacy
Reading annotated data: 106it [00:40,  3.49it/s]
Reading annotated data: 109it [00:40,  5.92it/s]
Loading file: Oskar_Panizza_-_Der_Goldregen_(1893).spacy
Loading file: Arthur_Schnitzler_-_Amerika_(1895).spacy
Loading file: Eugenie_Marlitt_-_Die_zwölf_Apostel_(1865).spacy
Loading file: Adalbert_Stifter_-_Der_Waldsteig_(1845).spacy
Reading annotated data: 110it [00:41,  6.13it/s]
Reading annotated data: 112it [00:41,  7.42it/s]
Loading file: ETA_Hoffmann_-_Die_Geschichte_vom_verlornen_Spiegelbilde_(1819).spacy
Loading file: Christoph_von_Schmid_-_Der_Weihnachtsabend_(1825).spacy
Loading file: Paul_Heyse_-_Barbarossa_(1869).spacy
Loading file: Berthold_Auerbach_-_Landolin_von_Reutershöfen_(1878).spacy
Reading annotated data: 114it [00:41,  5.52it/s]
Loading file: Franz_Grillparzer_-_Ein_Erlebnis_(1822).spacy
Loading file: Conrad_Ferdinand_Meyer_-_Plautus_im_Nonnenkloster_(1882).spacy
Loading file: Oskar_Meding_-_Die_Saxoborussen_(1885).spacy
Reading annotated data: 117it [00:42,  3.57it/s]
Loading file: Karl_May_-_Der_Schatz_im_Silbersee_(1890).spacy
Reading annotated data: 118it [00:44,  2.16it/s]
Loading file: Heinrich_Zschokke_-_Der_König_von_Akim_(1825).spacy
Loading file: Achim_von_Arnim_-_Novellen_(1810).spacy
Reading annotated data: 120it [00:44,  2.44it/s]
Loading file: Ludwig_Anzengruber_-_DorfgÀnge_(1879).spacy
Reading annotated data: 121it [00:45,  2.19it/s]
Loading file: Adalbert_Stifter_-_Ein_Gang_durch_die_Katakomben_(1844).spacy
Loading file: Wilhelm_Raabe_-_Ein_Besuch_(1884).spacy
Loading file: Franz_Pocci_-_Lustiges_KomödienbĂŒchlein_(1861).spacy
Reading annotated data: 124it [00:45,  3.26it/s]
Reading annotated data: 125it [00:46,  3.46it/s]
Loading file: Jeremias_Gotthelf_-_Das_Erdbeeri_Mareili_(1850).spacy
Loading file: Theodor_Storm_-_Eekenhof_(1879).spacy
Loading file: ETA_Hoffmann_-_Lebensansichten_des_Katers_Murr_(1820).spacy
Reading annotated data: 127it [00:47,  2.84it/s]
Reading annotated data: 130it [00:47,  4.41it/s]
Loading file: Oskar_Panizza_-_Die_Menschenfabrik_(1890).spacy
Loading file: Carl_Spitteler_-_Ei_Ole_(1887).spacy
Loading file: Paul_Heyse_-_Anfang_und_Ende_(1857).spacy
Loading file: Maximilian_Schmidt_-_'s_Almstummerl_(1888).spacy
Reading annotated data: 131it [00:47,  4.28it/s]
Loading file: FW_HacklÀnder_-_Namenlose_Geschichten_-_Erster_Band_(1851).spacy
Reading annotated data: 132it [00:48,  3.44it/s]
Loading file: Berthold_Auerbach_-_Auf_der_Höhe_Vierter_Band_(1865).spacy
Reading annotated data: 133it [00:48,  3.11it/s]
Loading file: Ludwig_Tieck_-_Eigensinn_und_Laune_(1836).spacy
Reading annotated data: 134it [00:48,  3.10it/s]
Loading file: Sir_John_Retcliffe_-_Magenta_und_Solferino_-_Band_1_(1864).spacy
Reading annotated data: 135it [00:49,  2.40it/s]
Loading file: Heinrich_Seidel_-_Leberecht_HĂŒhnchen_als_Großvater_(1890).spacy
Reading annotated data: 136it [00:49,  2.64it/s]
Loading file: Clemens_Brentano_-_Aus_der_Chronika_eines_fahrenden_SchĂŒlers_(Zweite_Fassung)_(1818).spacy
Loading file: Heinrich_Laube_-_Eine_Fahrt_nach_Pommern_und_der_Insel_RĂŒgen_(1837).spacy
Reading annotated data: 138it [00:50,  3.27it/s]
Loading file: Berthold_Auerbach_-_Auf_der_Höhe_Band_I_(1865).spacy
Reading annotated data: 139it [00:50,  2.90it/s]
Loading file: Achim_von_Arnim_-_Isabella_von_Ägypten_(1812).spacy
Reading annotated data: 140it [00:50,  3.11it/s]
Loading file: Emerenz_Meier_-_Der_Brechelbrei_(1897).spacy
Loading file: ETA_Hoffmann_-_Haimatochare_(1819).spacy
Loading file: Rudolph_Stratz_-_Unter_den_Linden_(1893).spacy
Reading annotated data: 143it [00:51,  4.29it/s]
Reading annotated data: 145it [00:51,  5.58it/s]
Loading file: Eduard_Mörike_-_Lucie_Gelmeroth_(1834).spacy
Loading file: Gottfried_Keller_-_Die_drei_gerechten_Kammacher_(1856).spacy
Loading file: Wilhelm_Raabe_-_Nach_dem_großen_Kriege_(1861).spacy
Reading annotated data: 146it [00:51,  5.15it/s]
Loading file: Ludwig_Ganghofer_-_Die_MĂŒhle_am_Fundensee_(1880).spacy
Loading file: Maximilian_Schmidt_-_Humor_(erste_Reihe)_(1899).spacy
Reading annotated data: 148it [00:52,  4.75it/s]
Reading annotated data: 149it [00:52,  4.92it/s]
Loading file: Johanna_Spyri_-_Wie_Wiselis_Weg_gefunden_wird_(1878).spacy
Loading file: Berthold_Auerbach_-_Das_Landhaus_am_Rhein_-_Band_III_(1869).spacy
Reading annotated data: 150it [00:52,  4.02it/s]
Loading file: Wilhelm_Fischer_-_Wastel_(1898).spacy
Loading file: Theodor_MĂŒgge_-_Afraja_(1854).spacy
Reading annotated data: 152it [00:54,  2.39it/s]
Reading annotated data: 154it [00:54,  3.45it/s]
Loading file: H._Clauren_-_Der_selige_Papier-MĂŒller_(1820).spacy
Loading file: Ottilie_Wildermuth_-_Der_Peterli_von_Emmental_(1862).spacy
Loading file: Hanns_von_Gumppenberg_-_Vom_Fenster_aus_(1895).spacy
Loading file: Ludwig_Tieck_-_Weihnacht-Abend_(1835).spacy
Loading file: Wilhelm_Heinrich_Riehl_-_Durch_tausend_Jahre_–_Vierter_Band_(1897).spacy
Reading annotated data: 157it [00:55,  3.31it/s]
Reading annotated data: 158it [00:55,  3.63it/s]
Loading file: Ottilie_Wildermuth_-_Ein_sonnenloses_Leben_(1855).spacy
Loading file: Ludwig_Tieck_-_Der_Aufruhr_in_den_Cevennen_(1826).spacy
Reading annotated data: 159it [00:55,  3.13it/s]
Reading annotated data: 160it [00:56,  3.64it/s]
Loading file: Ludwig_Tieck_-_Die_Verlobung_(1823).spacy
Loading file: Joseph_Baumann_-_Ulli_und_Elsi_(1829).spacy
Loading file: Theodor_Fontane_-_Cécile_(1887).spacy
Reading annotated data: 162it [00:56,  3.76it/s]
Loading file: Friedrich_de_la_Motte_Fouqué_-_Die_wunderbaren_Begebenheiten_des_Grafen_Alethes_von_Lindenstein_(1817).spacy
Reading annotated data: 163it [00:56,  3.31it/s]
Loading file: Willibald_Alexis_-_Der_Roland_von_Berlin_–_Zweiter_Band_(1840).spacy
Reading annotated data: 164it [00:57,  3.03it/s]
Loading file: Jeremias_Gotthelf_-_Wie_Anne_BÀbi_JowÀger_haushaltet_-_Teil_2_(1843).spacy
Reading annotated data: 165it [00:58,  2.02it/s]
Reading annotated data: 167it [00:58,  3.10it/s]
Loading file: Heinrich_von_Kleist_-_Der_Findling_(1811).spacy
Loading file: Friedrich_GerstĂ€cker_-_Schwarz_und_Weiß_(1848).spacy
Loading file: Julius_Stinde_-_Frau_Buchholz_im_Orient_(1888).spacy
Reading annotated data: 168it [00:59,  2.68it/s]
Loading file: Louise_Aston_-_Lydia_(1848).spacy
Reading annotated data: 169it [00:59,  2.58it/s]
Reading annotated data: 170it [00:59,  2.97it/s]
Loading file: Karl_Immermann_-_Der_Karneval_und_die_Somnambule_(1830).spacy
Loading file: Johannes_Scherr_-_Die_Tochter_der_Luft_(1874).spacy
Reading annotated data: 171it [01:00,  2.61it/s]
Reading annotated data: 173it [01:00,  4.17it/s]
Loading file: Ludwig_Tieck_-_Der_Gelehrte_(1827).spacy
Loading file: Wilhelm_Busch_-_Kurze_Geschichten_(1864).spacy
Loading file: Ludwig_Steub_-_Der_schwarze_Gast_(1863).spacy
Loading file: Joseph_Victor_von_Scheffel_-_Ekkehard_(1855).spacy
Reading annotated data: 175it [01:01,  2.68it/s]
Loading file: FW_HacklÀnder_-_Feuerwerker_Wortmann_und_andere_Soldatengeschichten_(1877).spacy
Reading annotated data: 176it [01:01,  2.77it/s]
Reading annotated data: 177it [01:01,  3.30it/s]
Loading file: CĂ€sar_Flaischlen_-_Schattenspiel_(1897).spacy
Loading file: Nataly_von_Eschstruth_-_Jung_gefreit_-_1_(1897).spacy
Reading annotated data: 178it [01:02,  3.02it/s]
Loading file: George_Meredith_-_Richard_Feverel_(1859).spacy
Reading annotated data: 179it [01:03,  1.71it/s]
Loading file: Friedrich_GerstÀcker_-_Die_Regulatoren_in_Arkansas_(1845).spacy
Reading annotated data: 180it [01:04,  1.50it/s]
Loading file: Friedrich_Spielhagen_-_Noblesse_oblige_(1888).spacy
Reading annotated data: 181it [01:05,  1.41it/s]
Loading file: Paul_Heyse_-_Unheilbar_(1862).spacy
Reading annotated data: 182it [01:05,  1.76it/s]
Loading file: Peter_Rosegger_-_Als_Großvater_freien_ging_(1874).spacy
Loading file: Ida_Hahn-Hahn_-_Peregrin_(1864).spacy
Reading annotated data: 184it [01:06,  1.78it/s]
Loading file: Felix_Dahn_-_Vom_Chiemgau_(1896).spacy
Reading annotated data: 185it [01:07,  1.93it/s]
Loading file: Edmund_Hoefer_-_Auf_der_UniversitÀt_(1846).spacy
Loading file: Heinrich_Laube_-_Die_Novelle_in_der_Theaterloge_(1837).spacy
Loading file: Robert_Hamerling_-_Aspasia_(1875).spacy
Reading annotated data: 188it [01:08,  1.96it/s]
Loading file: Heinrich_Laube_-_Reisenovellen_-_Band_4_(1836).spacy
Reading annotated data: 189it [01:09,  2.02it/s]
Loading file: ETA_Hoffmann_-_Der_Sandmann_(1817).spacy
Loading file: Richard_Voß_-_Die_Sabinerin_(1889).spacy
Reading annotated data: 191it [01:09,  2.75it/s]
Reading annotated data: 192it [01:09,  3.15it/s]
Loading file: Gottfried_Keller_-_Dietegen_(1874).spacy
Loading file: Ottilie_Wildermuth_-_Cherubino_und_Zephirine_(1862).spacy
Loading file: Ludwig_Tieck_-_Hexensabbat_(1831).spacy
Reading annotated data: 194it [01:09,  3.36it/s]
Loading file: Charles_Sealsfield_-_Das_blutige_Blockhaus_(1834).spacy
Reading annotated data: 195it [01:10,  2.34it/s]
Reading annotated data: 196it [01:11,  2.73it/s]
Loading file: Theodor_Storm_-_Carsten_Curator_(1878).spacy
Loading file: Anastasius_GrĂŒn_-_Der_Eremit_auf_der_Sierra_Morena_(1827).spacy
Reading annotated data: 198it [01:11,  3.96it/s]
Loading file: Joseph_von_Eichendorff_-_Die_EntfĂŒhrung_(1839).spacy
Loading file: Ludwig_Tieck_-_Der_wiederkehrende_griechische_Kaiser_(1831).spacy
Reading annotated data: 199it [01:11,  3.52it/s]
Loading file: Wilhelmine_Heimburg_-_Trudchens_Heirat_(1894).spacy
Reading annotated data: 200it [01:12,  2.97it/s]
Loading file: ETA_Hoffmann_-_Seltsame_Leiden_eines_Theaterdirektors_(1818).spacy
Reading annotated data: 201it [01:12,  3.15it/s]
Loading file: Ludwig_Tieck_-_GlĂŒck_giebt_Verstand_(1826).spacy
Reading annotated data: 202it [01:12,  3.44it/s]
Loading file: Willibald_Alexis_-_Die_Hosen_des_Herrn_von_Bredow_(1846).spacy
Reading annotated data: 203it [01:13,  2.23it/s]
Reading annotated data: 204it [01:13,  2.77it/s]
Loading file: Wilhelm_Hauff_-_Phantasien_im_Bremer_Ratskeller_(1827).spacy
Loading file: Ferdinand_KĂŒrnberger_-_Wie_ein_prosaischer_Mann_ein_poetisches_BrĂ€utchen_gewinnt_(1877).spacy
Loading file: Leopold_von_Sacher-Masoch_-_Der_Capitulant_(1875).spacy
Reading annotated data: 206it [01:13,  4.27it/s]
Reading annotated data: 207it [01:13,  4.86it/s]
Loading file: Marie_von_Ebner-Eschenbach_-_Die_Freiherren_von_Gemperlein_(1889).spacy
Loading file: Jeremias_Gotthelf_-_Jakobs_des_Handwerksgesellen_Wanderungen_durch_die_Schweiz_(1846).spacy
Reading annotated data: 208it [01:14,  2.24it/s]
Loading file: Gottfried_Keller_-_Der_Landvogt_von_Greifensee_(1877).spacy
Reading annotated data: 209it [01:15,  2.55it/s]
Loading file: Heinrich_von_Kleist_-_Der_Zweikampf_(1811).spacy
Loading file: Achim_von_Arnim_-_ErzÀhlungen_(1831).spacy
Reading annotated data: 211it [01:15,  3.53it/s]
Loading file: Julius_Wolff_-_Das_schwarze_Weib_(1894).spacy
Reading annotated data: 212it [01:15,  2.98it/s]
Loading file: Friedrich_Spielhagen_-_Sturmflut_(1877).spacy
Reading annotated data: 213it [01:16,  2.28it/s]
Reading annotated data: 214it [01:16,  2.82it/s]
Loading file: Achim_von_Arnim_-_HollÀndische_Liebhabereien_(1826).spacy
Loading file: Ludwig_Tieck_-_Der_MondsĂŒchtige_(1832).spacy
Reading annotated data: 215it [01:16,  3.39it/s]
Loading file: Wilhelm_Jensen_-_Nach_Sonnenuntergang_–_Zweites_Buch_(1879).spacy
Reading annotated data: 216it [01:17,  3.06it/s]
Reading annotated data: 217it [01:17,  3.71it/s]
Loading file: Johann_Gabriel_Seidl_-_Die_Schweden_vor_OlmĂŒtz_(1843).spacy
Loading file: Levin_SchĂŒcking_-_Die_Rheider_Burg_(1859).spacy
Reading annotated data: 218it [01:18,  2.80it/s]
Loading file: Ferdinand_von_Saar_-_Marianne_(1873).spacy
Loading file: Johanna_Spyri_-_Heidi_kann_brauchen,_was_es_gelernt_hat_(1881).spacy
Reading annotated data: 220it [01:18,  3.76it/s]
Loading file: Clemens_Brentano_-_Der_arme_Raimondin_(1814).spacy
Loading file: Marie_von_Ebner-Eschenbach_-_Die_schönsten_ErzÀhlungen_(1889).spacy
Reading annotated data: 222it [01:18,  3.71it/s]
Loading file: Peter_Rosegger_-_Jakob_der_Letzte_(1889).spacy
Reading annotated data: 223it [01:19,  2.81it/s]
Loading file: Karl_von_Holtei_-_Der_letzte_Komödiant_-_Dritter_Teil_(1863).spacy
Reading annotated data: 224it [01:20,  2.61it/s]
Reading annotated data: 227it [01:20,  4.84it/s]
Loading file: Friedrich_Hebbel_-_Die_Kuh_(1849).spacy
Loading file: Jeremias_Gotthelf_-_Eine_alte_Geschichte_zu_neuer_Erbauung_(1849).spacy
Loading file: Ludwig_Ganghofer_-_Die_Rittersleut_(1880).spacy
Loading file: David_Heß_-_Der_Tonkunst_Wettstreit_mit_der_Malerei_(1816).spacy
Loading file: Wilhelm_Heinrich_Riehl_-_Durch_tausend_Jahre_–_Zweiter_Band_(1897).spacy
Reading annotated data: 229it [01:21,  3.14it/s]
Reading annotated data: 230it [01:21,  3.56it/s]
Loading file: Ernst_Eckstein_-_Preisgekrönt_(1899).spacy
Loading file: ETA_Hoffmann_-_Das_Sanctus_(1817).spacy
Loading file: Ludwig_Uhland_-_Lied_der_Nibelungen_(1840).spacy
Loading file: Bertha_von_Suttner_-_Eva_Siebeck_(1892).spacy
Reading annotated data: 233it [01:22,  3.84it/s]
Loading file: Franz_von_Gaudy_-_Venetianische_Novellen_(1838).spacy
Reading annotated data: 234it [01:22,  3.03it/s]
Loading file: Marie_von_Ebner-Eschenbach_-_Er_lasst_die_Hand_kĂŒssen_(1886).spacy
Loading file: Paul_Heyse_-_Die_kleine_Mama_(1865).spacy
Reading annotated data: 236it [01:23,  3.86it/s]
Loading file: Ernst_von_Wolzogen_-_Der_Thronfolger_-_Erster_Band_(1892).spacy
Reading annotated data: 237it [01:23,  3.44it/s]
Reading annotated data: 238it [01:23,  3.89it/s]
Loading file: ETA_Hoffmann_-_Die_Geheimnisse_-_MerkwĂŒrdige_Korrespondenz_des_Autors_mit_vers_(1821).spacy
Loading file: Karl_Gutzkow_-_Die_Nihilisten_(1853).spacy
Reading annotated data: 239it [01:23,  3.86it/s]
Reading annotated data: 240it [01:24,  4.13it/s]
Loading file: Heinrich_Zschokke_-_Die_Branntweinpest_(1837).spacy
Loading file: Carl_Franz_van_der_Velde_-_Das_Liebhaber-Theater_(1824).spacy
Reading annotated data: 241it [01:24,  3.99it/s]
Loading file: Ottilie_Wildermuth_-_Das_Feental_(1862).spacy
Loading file: Theodor_Fontane_-_Irrungen_Wirrungen_(1888).spacy
Reading annotated data: 243it [01:24,  3.85it/s]
Loading file: Friedrich_Spielhagen_-_In_Reih'_und_Glied._Erster_Theil_(1866).spacy
Reading annotated data: 244it [01:26,  2.10it/s]
Loading file: Ferdinand_KĂŒrnberger_-_Die_Last_des_Schweigens_(1866).spacy
Loading file: Berthold_Auerbach_-_BarfĂŒĂŸele_(1856).spacy
Reading annotated data: 246it [01:26,  2.60it/s]
Reading annotated data: 247it [01:26,  3.09it/s]
Loading file: ETA_Hoffmann_-_Das_fremde_Kind_(1817).spacy
Loading file: H._Clauren_-_Der_Blutschatz_(1823).spacy
Reading annotated data: 248it [01:26,  3.13it/s]
Loading file: Wilhelm_Jensen_-_Die_Pfeifer_vom_Dusenbach_(1886).spacy
Reading annotated data: 249it [01:27,  2.55it/s]
Loading file: August_Becker_-_Die_Nonnensusel_(1886).spacy
Reading annotated data: 250it [01:28,  1.84it/s]
Loading file: Balduin_Möllhausen_-_Westliche_FÀhrten_(1873).spacy
Reading annotated data: 251it [01:29,  1.73it/s]
Loading file: Jodocus_Donatus_Hubertus_Temme_-_In_einer_Brautnacht_(1873).spacy
Loading file: FW_HacklÀnder_-_Handel_und_Wandel_(1850).spacy
Reading annotated data: 253it [01:29,  2.07it/s]
Loading file: Heinrich_Laube_-_Eine_Tyroler_Geschichte_(1837).spacy
Loading file: Adalbert_Stifter_-_Wirkungen_eines_weißen_Mantels_-_Der_arme_WohltĂ€ter_-_Der_Pförtner_(1848).spacy
Reading annotated data: 255it [01:30,  2.96it/s]
Loading file: Balduin_Möllhausen_-_Das_MormonenmÀdchen._Band_I_(1864).spacy
Reading annotated data: 256it [01:30,  2.86it/s]
Loading file: Friedrich_Rochlitz_-_Amtsbericht_des_Pfarrers_zu_EichengrĂŒn_(1821).spacy
Loading file: Berthold_Auerbach_-_Das_Landhaus_am_Rhein_-_Band_II_(1869).spacy
Reading annotated data: 258it [01:31,  2.93it/s]
Loading file: Friedrich_de_la_Motte_Fouqué_-_Der_Zauberring_(1813).spacy
Reading annotated data: 259it [01:32,  2.05it/s]
Loading file: Charles_Sealsfield_-_Die_ErzÀhlung_des_Obersten_Morse_(1841).spacy
Reading annotated data: 260it [01:32,  2.35it/s]
Reading annotated data: 261it [01:32,  2.83it/s]
Loading file: Paul_Heyse_-_Das_Bild_der_Mutter_(1858).spacy
Loading file: Ottilie_Wildermuth_-_Eine_Königin_(1862).spacy
Reading annotated data: 262it [01:32,  3.47it/s]
Reading annotated data: 263it [01:32,  3.95it/s]
Loading file: Anna_Rothpletz_-_Der_Vorabend_des_Weihnachtsfestes_(1830).spacy
Loading file: Felix_Hollaender_-_Sturmwind_im_Westen_(1896).spacy
Reading annotated data: 264it [01:33,  3.30it/s]
Loading file: Therese_Huber_-_Alte_Zeit_und_neue_Zeit_(1828).spacy
Loading file: Franz_von_Gaudy_-_Novellen_und_ErzÀhlungen_1_(1840).spacy
Reading annotated data: 266it [01:33,  3.21it/s]
Loading file: Theodor_Fontane_-_Die_Poggenpuhls_(1896).spacy
Reading annotated data: 267it [01:34,  3.41it/s]
Loading file: Friedrich_von_Sallet_-_Kontraste_und_Paradoxen_(1843).spacy
Reading annotated data: 268it [01:34,  2.90it/s]
Reading annotated data: 269it [01:34,  3.56it/s]
Loading file: Fritz_Reuter_-_Ein_grÀflicher_Geburtstag_-_1_(1847).spacy
Loading file: Fanny_zu_Reventlow_-_Ultimo_(1897).spacy
Loading file: Friedrich_GerstÀcker_-_Alle_jagen_John_Mulligan_(1860).spacy
Reading annotated data: 271it [01:35,  3.81it/s]
Loading file: Carl_Spindler_-_Herbstviolen_(1834).spacy
Reading annotated data: 272it [01:35,  3.73it/s]
Loading file: Hedwig_Schobert_-_KĂŒnstlerblut_(1892).spacy
Reading annotated data: 273it [01:36,  2.57it/s]
Loading file: FW_HacklĂ€nder_-_Eugen_Stillfried_–_Zweiter_Band_(1852).spacy
Reading annotated data: 274it [01:36,  2.20it/s]
Reading annotated data: 276it [01:37,  3.39it/s]
Loading file: Heinrich_Seidel_-_Lang,_lang_ist's_her_(1880).spacy
Loading file: Franz_Stelzhamer_-_Groß-Piesenham_(1874).spacy
Loading file: Johann_Peter_Hebel_-_Der_Zundelheiner_(1839).spacy
Loading file: Ulrich_Hegner_-_Saly's_Revolutionstage_(1814).spacy
Reading annotated data: 278it [01:37,  3.78it/s]
Loading file: Ludwig_Tieck_-_Die_Gesellschaft_auf_dem_Lande_(1825).spacy
Reading annotated data: 279it [01:37,  3.87it/s]
Loading file: Ludwig_Thoma_-_Kirta!_(1895).spacy
Loading file: FW_HacklÀnder_-_Vier_Könige_-_Bilder_aus_dem_Soldatenleben_(1841).spacy
Reading annotated data: 281it [01:38,  4.09it/s]
Loading file: Bertha_von_Suttner_-_Die_Waffen_nieder!_(1889).spacy
Reading annotated data: 282it [01:39,  2.54it/s]
Reading annotated data: 283it [01:39,  2.99it/s]
Loading file: Heinrich_Heine_-_Schnabelewopski_(1834).spacy
Loading file: Friedrich_GerstÀcker_-_Unter_den_Pehuenchen_(1867).spacy
Reading annotated data: 284it [01:40,  2.13it/s]
Reading annotated data: 285it [01:40,  2.53it/s]
Loading file: Julius_Stettenheim_-_Muckenich's_Reden_und_Thaten_(1885).spacy
Loading file: Christoph_von_Schmid_-_Die_Ostereier_(1816).spacy
Loading file: Theodor_Fontane_-_Schach_von_Wuthenow_(1883).spacy
Reading annotated data: 287it [01:40,  2.94it/s]
Loading file: FW_HacklÀnder_-_Namenlose_Geschichten_-_Zweiter_Band_(1851).spacy
Reading annotated data: 288it [01:41,  2.67it/s]
Loading file: Adalbert_Stifter_-_Der_Condor_(1840).spacy
Loading file: Johann_David_Wyss_-_Der_schweizerische_Robinson_(1812).spacy
Reading annotated data: 290it [01:42,  2.31it/s]
Reading annotated data: 291it [01:42,  2.73it/s]
Loading file: Annette_von_Droste-HĂŒlshoff_-_Die_Judenbuche_(1842).spacy
Loading file: Heinrich_Zschokke_-_Addrich_im_Moos_(1825).spacy
Reading annotated data: 292it [01:43,  2.22it/s]
Loading file: Balduin_Möllhausen_-_Der_Schatz_von_Quivira_(1879).spacy
Reading annotated data: 293it [01:44,  1.53it/s]
Loading file: Wilhelm_Raabe_-_Meister_Autor_oder_Die_Geschichten_vom_versunkenen_Garten_(1874).spacy
Reading annotated data: 294it [01:44,  1.76it/s]
Loading file: Oskar_Panizza_-_Die_gelbe_Kröte_(1896).spacy
Loading file: Karl_May_-_Der_Weg_zum_GlĂŒck._Sechster_Band_(1886).spacy
Reading annotated data: 296it [01:45,  1.71it/s]
Loading file: Charles_Sealsfield_-_Nathan_der_Squatter_(1835).spacy
Reading annotated data: 297it [01:46,  1.81it/s]
Reading annotated data: 298it [01:46,  2.26it/s]
Loading file: Ludwig_Tieck_-_Der_Wassermensch_(1835).spacy
Loading file: Adolf_Schöll_-_Der_arme_Stephan_(1827).spacy
Reading annotated data: 299it [01:46,  2.79it/s]
Loading file: Philipp_Galen_-_Der_Strandvogt_von_Jasmund_-_Zweiter_Band_(1859).spacy
Reading annotated data: 300it [01:47,  2.65it/s]
Reading annotated data: 302it [01:47,  4.26it/s]
Loading file: Ulrich_Hegner_-_Aus_dem_Leben_eines_Geringen_(1840).spacy
Loading file: Johann_Gottfried_Seume_-_Die_Weinlese_(1810).spacy
Loading file: FW_HacklĂ€nder_-_Eugen_Stillfried_–_Dritter_Band_(1852).spacy
Reading annotated data: 303it [01:47,  3.48it/s]
Reading annotated data: 305it [01:47,  5.18it/s]
Loading file: Theodor_Storm_-_Hinzelmeier_(1855).spacy
Loading file: Wilhelm_Heinrich_Riehl_-_Rheingauer_Deutsch_(1897).spacy
Loading file: Theodor_MĂŒgge_-_Der_Vogt_von_Sylt_(1851).spacy
Loading file: Christoph_von_Schmid_-_Das_Blumenkörbchen_(1823).spacy
Reading annotated data: 307it [01:48,  3.50it/s]
Loading file: Eugenie_Marlitt_-_Die_zweite_Frau_(1874).spacy
Reading annotated data: 308it [01:49,  2.49it/s]
Loading file: Felix_Dahn_-_Ein_Kampf_um_Rom_(1876).spacy
Reading annotated data: 309it [01:51,  1.18it/s]
Loading file: FW_HacklĂ€nder_-_Der_Augenblick_des_GlĂŒcks_(1857).spacy
Reading annotated data: 310it [01:52,  1.21it/s]
Loading file: Ludwig_Tieck_-_Eine_Sommerreise_(1834).spacy
Reading annotated data: 311it [01:52,  1.46it/s]
Loading file: ETA_Hoffmann_-_Die_Serapions-BrĂŒder_(1821).spacy
Reading annotated data: 312it [01:55,  1.16s/it]
Loading file: Wilhelm_Hauff_-_Der_Mann_im_Mond_(1826).spacy
Reading annotated data: 313it [01:55,  1.02it/s]
Reading annotated data: 314it [01:56,  1.31it/s]
Loading file: Rudolf_Lindau_-_Schweigen_(1895).spacy
Loading file: Theodor_Körner_-_Die_Reise_nach_Schandau_(1810).spacy
Loading file: Rudolf_Lindau_-_Liquidiert_(1877).spacy
Reading annotated data: 316it [01:56,  2.11it/s]
Loading file: Adalbert_Stifter_-_Bunte_Steine_(1853).spacy
Reading annotated data: 317it [01:56,  2.00it/s]
Loading file: Johann_Gabriel_Seidl_-_Der_tödliche_Knopf_(1839).spacy
Loading file: Jean_Paul_-_Der_Komet_(1820).spacy
Reading annotated data: 319it [01:58,  1.89it/s]
Loading file: Heinrich_von_Kleist_-_Michael_Kohlhaas_(1810).spacy
Reading annotated data: 320it [01:58,  2.16it/s]
Reading annotated data: 322it [01:58,  3.19it/s]
Loading file: Jean_Paul_-_Mein_Aufenthalt_in_der_Nepomukskirche_wÀhrend_der_Belagerung_(1810).spacy
Loading file: ETA_Hoffmann_-_Die_Irrungen_-_Verloren_und_Gefunden_(1820).spacy
Loading file: Adolf_Streckfuß_-_Der_Herr_PrĂ€sident_(1871).spacy
Reading annotated data: 323it [01:58,  2.93it/s]
Loading file: Charles_Sealsfield_-_Das_KajĂŒtenbuch_oder_Nationale_Charakteristiken_(1843).spacy
Reading annotated data: 324it [01:59,  2.28it/s]
Loading file: Gottfried_Keller_-_Spiegel,_das_KĂ€tzchen_(1856).spacy
Loading file: Robert_Kraft_-_Die_Vestalinnen_-_Band_5_(1895).spacy
Reading annotated data: 326it [02:01,  1.50it/s]
Loading file: Eduard_Mörike_-_Traumseele_(1875).spacy
Loading file: Ernst_von_Wolzogen_-_Die_Gloriahose_und_andere_Novellen_(1897).spacy
Reading annotated data: 328it [02:02,  2.03it/s]
Loading file: Ottilie_Wildermuth_-_Krieg_und_Frieden_(1862).spacy
Loading file: Wilhelm_Meinhold_-_Die_Bernsteinhexe_Maria_Schweidler_(1841).spacy
Reading annotated data: 330it [02:02,  2.39it/s]
Reading annotated data: 331it [02:02,  2.67it/s]
Loading file: Johannes_Scherr_-_Werther-Graubart_(1873).spacy
Loading file: Leopold_von_Sacher-Masoch_-_Mondnacht_(1875).spacy
Reading annotated data: 332it [02:02,  3.09it/s]
Loading file: Otto_Julius_Bierbaum_-_Die_Lavendel-Ehe_(1895).spacy
Loading file: Otto_Ruppius_-_Das_VermÀchtnis_des_Pedlars_(1859).spacy
Reading annotated data: 334it [02:03,  3.38it/s]
Reading annotated data: 336it [02:03,  4.66it/s]
Loading file: Adalbert_Stifter_-_Der_Kuss_von_Sentze_(1866).spacy
Loading file: Paul_Heyse_-_Die_Witwe_von_Pisa_(1865).spacy
Loading file: Ludwig_Salomon_-_Die_BlĂŒchertrompete_(1871).spacy
Reading annotated data: 337it [02:03,  4.38it/s]
Loading file: Willibald_Alexis_-_Walladmor_(1824).spacy
Reading annotated data: 338it [02:04,  2.39it/s]
Reading annotated data: 339it [02:05,  2.82it/s]
Loading file: ETA_Hoffmann_-_Das_FrÀulein_von_Scuderi_(1819).spacy
Loading file: Berthold_Auerbach_-_Das_Landhaus_am_Rhein_-_Band_IV_(1869).spacy
Reading annotated data: 340it [02:05,  2.58it/s]
Loading file: Friedrich_GerstÀcker_-_Blau_Wasser_(1858).spacy
Reading annotated data: 341it [02:06,  1.64it/s]
Loading file: Berthold_Auerbach_-_Das_Landhaus_am_Rhein_-_Band_I_(1869).spacy
Reading annotated data: 342it [02:07,  1.80it/s]
Loading file: Ludwig_Anzengruber_-_Kalendergeschichten_(1882).spacy
Reading annotated data: 343it [02:07,  1.90it/s]
Reading annotated data: 344it [02:07,  2.37it/s]
Loading file: Theodor_Storm_-_Aquis_submersus_(1877).spacy
Loading file: Heinrich_Laube_-_Reisenovellen_-_Band_6_(1837).spacy
Reading annotated data: 345it [02:08,  2.27it/s]
Loading file: Johann_Jakob_Reithard_-_Die_Frauen_in_Burgdorf,_oder_Entstehung_der_HĂŒhnersuppe_(1860).spacy
Loading file: Julius_Stinde_-_Buchholzens_in_Italien_(1883).spacy
Reading annotated data: 347it [02:08,  2.97it/s]
Loading file: Friedrich_Theodor_Vischer_-_Auch_Einer_(1879).spacy
Reading annotated data: 348it [02:09,  1.79it/s]
Loading file: Stanislaw_Przybyszewski_-_Satans_Kinder_(1897).spacy
Reading annotated data: 349it [02:10,  1.99it/s]
Reading annotated data: 351it [02:10,  3.07it/s]
Loading file: Achim_von_Arnim_-_Frau_von_Saverne_(1817).spacy
Loading file: Paul_Heyse_-_Die_Pfadfinderin_(1870).spacy
Loading file: Georg_Weerth_-_Leben_und_Taten_des_berĂŒhmten_Ritters_Schnapphahnski_(1849).spacy
Reading annotated data: 352it [02:10,  2.88it/s]
Loading file: Jeremias_Gotthelf_-_Leiden_und_Freuden_eines_Schulmeisters_(1838).spacy
Reading annotated data: 353it [02:11,  2.28it/s]
Loading file: Wilhelm_Heinrich_Riehl_-_Der_Stadtpfeifer_(1847).spacy
Loading file: Karl_May_-_Deutsche_Herzen_-_Deutsche_Helden._6._Der_Engel_der_Verbannten-_(1885).spacy
Reading annotated data: 355it [02:13,  1.49it/s]
Reading annotated data: 356it [02:13,  1.83it/s]
Loading file: Wilhelm_Raabe_-_Die_schwarze_Galeere_(1865).spacy
Loading file: Karl_May_-_Ein_StĂŒcklein_vom_alten_Dessauer_(1875).spacy
Loading file: Richard_Voß_-_Felice_Leste_(1889).spacy
Loading file: Clemens_Brentano_-_Die_Chronika_des_fahrenden_SchĂŒlers_(Urfassung)_(1818).spacy
Reading annotated data: 359it [02:13,  3.17it/s]
Reading annotated data: 360it [02:14,  3.56it/s]
Loading file: Joseph_Schreyvogel_-_Samuel_Brinks_letzte_Liebesgeschichte_(1821).spacy
Loading file: Ignaz_Franz_Castelli_-_Tobias_Guarnerius_(1839).spacy
Loading file: Wilhelm_Raabe_-_Deutscher_Adel_(1878).spacy
Reading annotated data: 362it [02:14,  3.87it/s]
Loading file: Ludwig_Aurbacher_-_ErzĂ€hlungen,_Lieder_und_SprĂŒche_aus_dem_Allerley_(1847).spacy
Loading file: Ludwig_Tieck_-_Das_Zauberschloß_(1830).spacy
Reading annotated data: 364it [02:14,  4.69it/s]
Reading annotated data: 365it [02:14,  4.76it/s]
Loading file: Heinrich_Smidt_-_Meeresstille_und_hohe_See_(1861).spacy
Loading file: Adalbert_Stifter_-_Das_alte_Siegel_(1844).spacy
Reading annotated data: 366it [02:15,  5.25it/s]
Reading annotated data: 369it [02:15,  8.56it/s]
Loading file: Paul_Heyse_-_Ein_Ring_(1862).spacy
Loading file: Peter_Rosegger_-_Die_schöne_Lenerl_(1874).spacy
Loading file: Ludwig_Steub_-_Die_falsche_Mutter_Gottes_(1871).spacy
Loading file: Wilhelm_Raabe_-_Der_gute_Tag_(1876).spacy
Loading file: Johann_Wolfgang_von_Goethe_-_Wilhelm_Meisters_Wanderjahre_(1821).spacy
Reading annotated data: 371it [02:16,  4.02it/s]
Loading file: Leopold_Kompert_-_Judith_die_Zweite_(1848).spacy
Loading file: Peter_Rosegger_-_Die_Wallfahrer_(1874).spacy
Loading file: FW_HacklÀnder_-_Der_letzte_Bombardier_(1870).spacy
Reading annotated data: 374it [02:18,  2.59it/s]
Loading file: Julius_Mosen_-_Georg_Venlot_(1831).spacy
Reading annotated data: 375it [02:18,  2.46it/s]
Reading annotated data: 378it [02:18,  3.78it/s]
Loading file: Friedrich_GerstÀcker_-_Die_Silbermine_in_den_Ozarkgebirgen_(1847).spacy
Loading file: Heinrich_Zschokke_-_Das_blaue_Wunder_(1829).spacy
Loading file: Ludwig_Tieck_-_AbendgesprÀche_(1839).spacy
Loading file: Heinrich_Seidel_-_Das_Atelier_(1899).spacy
Reading annotated data: 380it [02:18,  4.65it/s]
Loading file: Wilhelm_Heinrich_Riehl_-_GrÀfin_Ursula_(1856).spacy
Loading file: Peter_Rosegger_-_Der_Pfarrersbub_(1874).spacy
Loading file: Levin_SchĂŒcking_-_Eine_dunkle_Tat_(1846).spacy
Reading annotated data: 382it [02:19,  4.55it/s]
Loading file: Friedrich_GerstĂ€cker_-_Unter_dem_Äquator_(1861).spacy
Reading annotated data: 383it [02:20,  2.55it/s]
Reading annotated data: 384it [02:20,  2.95it/s]
Loading file: Karl_Wilhelm_Salice_Contessa_-_Die_SchatzgrÀber_(1825).spacy
Loading file: Ludwig_Ganghofer_-_Die_Brautfahrt_des_Damian_Zagg_(1880).spacy
Reading annotated data: 385it [02:20,  3.45it/s]
Reading annotated data: 386it [02:20,  3.87it/s]
Loading file: ETA_Hoffmann_-_Die_Brautwahl_(1818).spacy
Loading file: Wilhelm_Raabe_-_Gedelöcke_(1866).spacy
Reading annotated data: 387it [02:21,  4.56it/s]
Loading file: Wilhelm_Raabe_-_Wunnigel_(1877).spacy
Reading annotated data: 388it [02:21,  3.54it/s]
Loading file: Adolf_Glassbrenner_-_Die_Königsstraße_(1838).spacy
Loading file: Johannes_Scherr_-_Michel_(1858).spacy
Reading annotated data: 390it [02:22,  2.42it/s]
Loading file: Julius_Stinde_-_Die_Familie_Buchholz._Aus_dem_Leben_der_Hauptstadt_(1884).spacy
Reading annotated data: 391it [02:23,  2.35it/s]
Reading annotated data: 393it [02:23,  3.41it/s]
Loading file: Friedrich_GerstÀcker_-_Die_Vertreibung_der_Mormonen_aus_Missouri_(1845).spacy
Loading file: Heinrich_Hansjakob_-_Afra_(1897).spacy
Loading file: Otto_Julius_Bierbaum_-_Die_Mondmarie_(1893).spacy
Loading file: Balduin_Möllhausen_-_Das_MormonenmÀdchen._Band_II_(1864).spacy
Reading annotated data: 395it [02:23,  3.85it/s]
Reading annotated data: 396it [02:23,  4.10it/s]
Loading file: Otto_Julius_Bierbaum_-_Josephine_(1893).spacy
Loading file: Ludwig_Rellstab_-_1812_–_Ein_historischer_Roman_(1834).spacy
Reading annotated data: 397it [02:26,  1.37it/s]
Reading annotated data: 399it [02:26,  2.14it/s]
Loading file: Heinrich_Laube_-_Johanna_(1837).spacy
Loading file: Wilhelm_Raabe_-_Keltische_Knochen_(1864).spacy
Loading file: Gustav_Freytag_-_Verlorene_Handschrift_(1864).spacy
Reading annotated data: 400it [02:28,  1.31it/s]
Reading annotated data: 401it [02:28,  1.65it/s]
Loading file: Johann_Rudolf_Wyß_der_JĂŒngere_-_Viel_Noth_und_viel_HĂŒlf_(1825).spacy
Loading file: Marie_Nathusius_-_Elisabeth_–_Zweiter_Band_(1858).spacy
Reading annotated data: 402it [02:28,  1.66it/s]
Reading annotated data: 403it [02:29,  2.09it/s]
Loading file: Hermann_Stehr_-_Der_Schindelmacher_(1899).spacy
Loading file: Richard_Voß_-_Die_Auferstandenen_–_Erster_Band_(1887).spacy
Reading annotated data: 404it [02:29,  2.08it/s]
Loading file: Joachim_Nettelbeck_-_Des_Seefahrers_Nettelbeck_Lebensgeschichte_(1821).spacy
Reading annotated data: 405it [02:29,  2.44it/s]
Loading file: Adalbert_Stifter_-_Witiko_(1865).spacy
Reading annotated data: 406it [02:31,  1.23it/s]
Loading file: Gustav_Freytag_-_Die_Ahnen_(1872).spacy
Reading annotated data: 407it [02:35,  1.75s/it]
Loading file: Nataly_von_Eschstruth_-_Hofluft_-_Band_1_(1889).spacy
Reading annotated data: 408it [02:36,  1.35s/it]
Loading file: Wilhemine_von_Hillern_-_Die_Geier-Wally_(1875).spacy
Reading annotated data: 409it [02:36,  1.06s/it]
Loading file: ETA_Hoffmann_-_Ignaz_Denner_(1817).spacy
Reading annotated data: 410it [02:36,  1.23it/s]
Loading file: Berthold_Auerbach_-_Auf_der_Höhe_Dritter_Band_(1865).spacy
Reading annotated data: 411it [02:37,  1.48it/s]
Reading annotated data: 412it [02:37,  1.99it/s]
Loading file: Adolf_Stern_-_Vor_Leyden_(1866).spacy
Loading file: ETA_Hoffmann_-_Letzte_StĂŒcke_(1822).spacy
Reading annotated data: 413it [02:38,  1.48it/s]
Loading file: Carl_Weisflog_-_BĂŒrgerliche_Historien_(1828).spacy
Reading annotated data: 414it [02:38,  1.68it/s]
Loading file: Sir_John_Retcliffe_-_Nena_Sahib_(1858).spacy
Reading annotated data: 415it [02:40,  1.14it/s]
Loading file: Eugenie_Marlitt_-_ThĂŒringer_ErzĂ€hlungen_(1869).spacy
Reading annotated data: 416it [02:41,  1.07it/s]
Reading annotated data: 417it [02:41,  1.44it/s]
Loading file: Ottilie_Wildermuth_-_Todte_Treue_(1877).spacy
Loading file: Marie_Nathusius_-_Elisabeth._I._Band_(1858).spacy
Reading annotated data: 418it [02:41,  1.61it/s]
Loading file: Karl_Gutzkow_-_Der_Zauberer_von_Rom._I._Buch_(1858).spacy
Reading annotated data: 419it [02:42,  1.58it/s]
Loading file: Karl_May_-_Der_Schatz_der_Inkas_(1890).spacy
Reading annotated data: 420it [02:43,  1.22it/s]
Loading file: Moritz_Gottlieb_Saphir_-_Album_geselliger_Thorheiten_(1858).spacy
Reading annotated data: 421it [02:44,  1.41it/s]
Loading file: Adolf_Schmitthenner_-_Der_Handwerksbursche_(1883).spacy
Loading file: Rainer_Maria_Rilke_-_ErzĂ€hlungen_aus_dem_Nachlaß_(1826).spacy
Reading annotated data: 423it [02:44,  2.30it/s]
Loading file: Agnes_Franz_-_Seltene_Freundschaft_oder:_Bello_und_Miezchen_(1843).spacy
Loading file: Adalbert_Stifter_-_Der_Hochwald_(1841).spacy
Reading annotated data: 425it [02:44,  3.29it/s]
Loading file: Gustav_Freytag_-_Soll_und_Haben_(1855).spacy
Reading annotated data: 426it [02:46,  1.50it/s]
Reading annotated data: 427it [02:46,  1.82it/s]
Loading file: Joseph_von_Eichendorff_-_Viel_LĂ€rmen_um_Nichts_(1833).spacy
Loading file: Franz_Stelzhamer_-_Reisel,_der_WildschĂŒtz_und_Geiger_(1874).spacy
Loading file: Karl_Wilhelm_Salice_Contessa_-_Das_Gastmahl_(1815).spacy
Reading annotated data: 430it [02:46,  3.48it/s]
Reading annotated data: 432it [02:46,  4.54it/s]
Loading file: Rainer_Maria_Rilke_-_Die_NĂ€herin_(1895).spacy
Loading file: ETA_Hoffmann_-_Der_Elementargeist_(1819).spacy
Loading file: Friedrich_GerstÀcker_-_Die_Wolfsglocke_(1849).spacy
Loading file: Friedrich_GerstÀcker_-_Tahiti_(1854).spacy
Loading file: Franz_Xaver_Bronner_-_Ein_Mönchsleben_aus_der_empfindsamen_Zeit_(1850).spacy
Reading annotated data: 434it [02:48,  2.40it/s]
Loading file: Jeremias_Gotthelf_-_Wie_Joggeli_eine_Frau_sucht_(1841).spacy
Loading file: Heinrich_Seidel_-_Ein_Skizzenbuch_(1878).spacy
Reading annotated data: 436it [02:48,  2.99it/s]
Reading annotated data: 437it [02:49,  3.26it/s]
Loading file: Ludwig_Tieck_-_Die_Reisenden_(1824).spacy
Loading file: Heinrich_Schaumberger_-_Gesalzene_Krapfen_(1874).spacy
Reading annotated data: 439it [02:49,  4.32it/s]
Loading file: Adalbert_Stifter_-_Prokopus_(1847).spacy
Loading file: Ottilie_Wildermuth_-_UnabhÀngigkeit_(1855).spacy
Reading annotated data: 440it [02:49,  4.63it/s]
Reading annotated data: 441it [02:49,  5.06it/s]
Loading file: Karl_Wilhelm_Salice_Contessa_-_Haushahn_und_Paradiesvogel_(1813).spacy
Loading file: Ludwig_Tieck_-_Die_GemÀlde_(1821).spacy
Reading annotated data: 442it [02:49,  4.65it/s]
Reading annotated data: 445it [02:49,  8.09it/s]
Loading file: Ludwig_Steub_-_Benno_und_Kriemhilde_(1879).spacy
Loading file: Johann_Peter_Hebel_-_Zwei_Sprichwörter_(1811).spacy
Loading file: Leopold_Kompert_-_Eisik's_Brille_(1860).spacy
Loading file: Levin_SchĂŒcking_-_Hart_am_Rande_(1887).spacy
Loading file: Julius_Wolff_-_Der_SĂŒlfmeister_(1883).spacy
Reading annotated data: 447it [02:51,  3.53it/s]
Loading file: Heinrich_Smidt_-_Seemanns-Sagen_und_Schiffer-MĂ€rchen_(1835).spacy
Reading annotated data: 448it [02:51,  3.29it/s]
Reading annotated data: 450it [02:51,  4.54it/s]
Loading file: Franz_von_Gaudy_-_Die_Brenta-Blume_(1838).spacy
Loading file: Ferdinand_von_Saar_-_Die_Steinklopfer_-_1_(1874).spacy
Loading file: Wilhelm_von_Polenz_-_Der_Pfarrer_von_Breitendorf_Erster_Band_(1893).spacy
Reading annotated data: 451it [02:52,  3.78it/s]
Loading file: Friedrich_GerstÀcker_-_Die_Nacht_auf_dem_Walfisch_(1858).spacy
Loading file: Oskar_Meding_-_Zwei_Kaiserkronen_(1872).spacy
Reading annotated data: 453it [02:53,  2.30it/s]
Loading file: Johanna_Spyri_-_Einer_vom_Hause_Lesa_(1890).spacy
Reading annotated data: 454it [02:54,  2.36it/s]
Reading annotated data: 455it [02:54,  2.76it/s]
Loading file: Johannes_Schlaf_-_Papa_Hamlet_(1889).spacy
Loading file: Paul_Heyse_-_Im_Grafenschloß_(1861).spacy
Reading annotated data: 456it [02:54,  3.21it/s]
Loading file: Julius_Wolff_-_Der_Raubgraf_(1884).spacy
Reading annotated data: 457it [02:55,  2.30it/s]
Reading annotated data: 458it [02:55,  2.80it/s]
Loading file: Karl_Gottlieb_Samuel_Heun_-_Die_Versuchung_(1827).spacy
Loading file: Oskar_Panizza_-_Der_operierte_Jud'_(1893).spacy
Loading file: Georg_Engel_-_Die_Last_(1898).spacy
Reading annotated data: 460it [02:55,  3.48it/s]
Loading file: Ernst_von_Wolzogen_-_Die_Erbschleicherinnen,_Band_1_(1895).spacy
Reading annotated data: 461it [02:56,  3.31it/s]
Reading annotated data: 463it [02:56,  4.82it/s]
Loading file: Clemens_Brentano_-_Geschichte_vom_braven_Kasperl_und_dem_schönen_Annerl_(1838).spacy
Loading file: Christoph_von_Schmid_-_Das_hölzerne_Kreuz_(1826).spacy
Loading file: Joseph_von_Eichendorff_-_Die_GlĂŒcksritter_(1841).spacy
Reading annotated data: 465it [02:56,  5.56it/s]
Loading file: Christoph_von_Schmid_-_Wie_Heinrich_von_Eichenfels_zur_Erkenntnis_Gottes_kam_(1817).spacy
Loading file: Conrad_Ferdinand_Meyer_-_Das_Leiden_eines_Knaben_(1883).spacy
Reading annotated data: 466it [02:56,  5.97it/s]
Reading annotated data: 469it [02:56,  9.29it/s]
Loading file: Friedrich_GerstÀcker_-_John_Wells_(1859).spacy
Loading file: Heinrich_Laube_-_Die_Karlisten_(1837).spacy
Loading file: Theodor_Storm_-_Am_Kamin_(1861).spacy
Loading file: Christoph_von_Schmid_-_Ludwig,_der_kleine_Auswanderer_(1834).spacy
Reading annotated data: 471it [02:56,  9.51it/s]
Loading file: Joseph_von_Eichendorff_-_Das_Marmorbild_(1819).spacy
Loading file: Friedrich_GerstÀcker_-_Das_alte_Haus_(1857).spacy
Reading annotated data: 473it [02:57,  6.93it/s]
Loading file: Ludwig_Tieck_-_Das_Fest_zu_Kenelworth_(1828).spacy
Loading file: Isabella_Braun_-_Gesammelte_ErzÀhlungen_(1886).spacy
Reading annotated data: 474it [02:57,  5.58it/s]
Loading file: Ludwig_Tieck_-_Dichterleben,_zweiter_Theil_(1831).spacy
Reading annotated data: 475it [02:57,  4.87it/s]
Loading file: Berthold_Auerbach_-_SchwarzwÀlder_Dorfgeschichten_(1843).spacy
Reading annotated data: 476it [03:03,  1.46s/it]
Loading file: Heinrich_Laube_-_Reisenovellen_-_Band_3_(1836).spacy
Reading annotated data: 477it [03:04,  1.18s/it]
Loading file: Brigitte_Augusti_-_MĂ€dchenlose_(1882).spacy
Reading annotated data: 478it [03:04,  1.06it/s]
Reading annotated data: 479it [03:04,  1.35it/s]
Loading file: ETA_Hoffmann_-_Der_Magnetiseur_(1814).spacy
Loading file: Achim_von_Arnim_-_Owen_Tudor_(1821).spacy
Loading file: Johanna_Spyri_-_Heidis_Lehr-_und_Wanderjahre_(1880).spacy
Reading annotated data: 481it [03:04,  1.99it/s]
Reading annotated data: 482it [03:04,  2.45it/s]
Loading file: Adalbert_Stifter_-_Der_beschriebene_TĂ€nnling_(1846).spacy
Loading file: Adalbert_Stifter_-_Das_Haidedorf_(1840).spacy
Loading file: Wilhelm_Raabe_-_Der_Hungerpastor_(1864).spacy
Reading annotated data: 484it [03:06,  2.22it/s]
Loading file: Marie_von_Ebner-Eschenbach_-_Lotti,_die_Uhrmacherin_(1880).spacy
Reading annotated data: 485it [03:06,  2.49it/s]
Reading annotated data: 487it [03:06,  3.71it/s]
Loading file: Johann-Conrad_Appenzeller_-_Ein_Tag_in_der_Diligence_(1812).spacy
Loading file: Ludwig_Tieck_-_Die_schoene_Magelone_(1812).spacy
Loading file: Karl_Gutzkow_-_Der_SadducÀer_von_Amsterdam_(1843).spacy
Reading annotated data: 488it [03:06,  4.24it/s]
Loading file: Eduard_Mörike_-_BruchstĂŒcke_eines_Romans_(1875).spacy
Loading file: Karl_Gutzkow_-_Die_Ritter_vom_Geiste_(1851).spacy
Reading annotated data: 490it [03:11,  1.18s/it]
Loading file: Friedrich_Spielhagen_-_Susi_(1895).spacy
Reading annotated data: 491it [03:12,  1.02s/it]
Loading file: Johanna_Spyri_-_Moni_der_Geißbub_(1887).spacy
Loading file: Fritz_Mauthner_-_Böhmische_Novellen_(1897).spacy
Reading annotated data: 493it [03:13,  1.31it/s]
Reading annotated data: 494it [03:13,  1.59it/s]
Loading file: Hermann_Sudermann_-_Jolanthes_Hochzeit_(1892).spacy
Loading file: Wilhelm_Hauff_-_Der_junge_EnglÀnder_(1827).spacy
Loading file: Joseph_von_Eichendorff_-_Auch_ich_war_in_Arkadien!_(1834).spacy
Loading file: Friedrich_GerstĂ€cker_-_In_der_SĂŒdsee_(1860).spacy
Reading annotated data: 497it [03:13,  2.60it/s]
Loading file: Jakob_Christoph_Heer_-_An_heiligen_Wassern_(1898).spacy
Reading annotated data: 498it [03:14,  2.36it/s]
Loading file: Ernst_Barlach_-_Fragmente_aus_frĂŒherer_Zeit_(1895).spacy
Reading annotated data: 499it [03:14,  2.25it/s]
Loading file: Arthur_Schnitzler_-_Der_Witwer_(1894).spacy
Loading file: Louise_von_François_-_Die_letzte_Reckenburgerin_(1871).spacy
Reading annotated data: 501it [03:15,  2.51it/s]
Loading file: Ernst_Dronke_-_Die_Maikönigin_(1846).spacy
Reading annotated data: 502it [03:15,  2.70it/s]
Loading file: Karl_May_-_Freuden_und_Leiden_eines_Vielgelesenen_(1896).spacy
Loading file: Ossip_Schubin_-_Toter_FrĂŒhling_(1893).spacy
Reading annotated data: 504it [03:16,  2.84it/s]
Reading annotated data: 506it [03:16,  3.88it/s]
Loading file: Hugo_von_Hofmannsthal_-_Das_Dorf_im_Gebirge_(1896).spacy
Loading file: Ottilie_Wildermuth_-_Morgen,_Mittag_und_Abend_(1855).spacy
Loading file: Wilhelm_Heinrich_Riehl_-_Die_Werke_der_Barmherzigkeit_(1856).spacy
Loading file: Sophie_Wörishöffer_-_Robert_des_Schiffsjungen_Fahrten_und_Abenteuer_(1877).spacy
Reading annotated data: 508it [03:17,  2.30it/s]
Loading file: Eugenie_Marlitt_-_Das_Geheimnis_der_alten_Mamsell_(1867).spacy
Reading annotated data: 509it [03:18,  2.04it/s]
Loading file: Carl_Spindler_-_Der_Jude_(1827).spacy
Reading annotated data: 510it [03:20,  1.38it/s]
Loading file: Karl_Gutzkow_-_Der_Zauberer_von_Rom._IV._Buch_(1858).spacy
Reading annotated data: 511it [03:20,  1.45it/s]
Loading file: Wilhelm_Raabe_-_Das_Odfeld_(1889).spacy
Reading annotated data: 512it [03:21,  1.61it/s]
Reading annotated data: 513it [03:21,  1.95it/s]
Loading file: Ludwig_Tieck_-_Die_Ahnenprobe_(1833).spacy
Loading file: Wilhelm_Raabe_-_Das_Horn_von_Wanza_(1881).spacy
Reading annotated data: 514it [03:21,  2.00it/s]
Loading file: Otto_Ludwig_-_Die_Heiterethei_und_ihr_Widerspiel_(1857).spacy
Reading annotated data: 515it [03:22,  1.82it/s]
Reading annotated data: 516it [03:22,  2.28it/s]
Loading file: Jeremias_Gotthelf_-_Die_Wassernot_im_Emmental_(1838).spacy
Loading file: Johann_Gabriel_Seidl_-_Das_goldene_Ringlein_(1842).spacy
Loading file: Wilhelm_Jensen_-_Karin_von_Schweden_(1872).spacy
Reading annotated data: 518it [03:23,  3.18it/s]
Loading file: Johanna_Spyri_-_Heimatlos_(1878).spacy
Reading annotated data: 519it [03:23,  2.95it/s]
Reading annotated data: 520it [03:23,  3.45it/s]
Loading file: Ernst_Wichert_-_Ewe_(1880).spacy
Loading file: Fritz_Reuter_-_Montecchi_un_Capuletti_oder_De_Reis'_nah_Konstantinopel_(1868).spacy
Reading annotated data: 521it [03:24,  2.66it/s]
Reading annotated data: 522it [03:24,  3.32it/s]
Loading file: Leopold_Kompert_-_Die_Jahrzeit_(1865).spacy
Loading file: Joseph_von_Eichendorff_-_Aus_dem_Leben_eines_Taugenichts_(1826).spacy
Reading annotated data: 523it [03:24,  3.38it/s]
Loading file: Fritz_Reuter_-_De_Urgeschicht_von_Meckelnborg_(1874).spacy
Reading annotated data: 524it [03:24,  3.49it/s]
Loading file: Conrad_Ferdinand_Meyer_-_Angela_Borgia_(1891).spacy
Reading annotated data: 525it [03:25,  3.63it/s]
Loading file: Friedrich_Hebbel_-_Barbier_Zitterlein_(1836).spacy
Loading file: Ludwig_Tieck_-_Dichterleben_(1825).spacy
Reading annotated data: 527it [03:25,  4.64it/s]
Loading file: Heinrich_Seidel_-_Das_alte_Haus_(1899).spacy
Loading file: Friedrich_GerstÀcker_-_General_Franco_(1865).spacy
Reading annotated data: 529it [03:26,  3.13it/s]
Loading file: Johanna_Spyri_-_Artur_und_Squirrel_(1888).spacy
Reading annotated data: 530it [03:26,  3.28it/s]
Reading annotated data: 531it [03:26,  3.86it/s]
Loading file: Wilhelm_Raabe_-_Des_Reiches_Krone_(1870).spacy
Loading file: Ludwig_Tieck_-_Der_Alte_vom_Berge_(1828).spacy
Reading annotated data: 532it [03:26,  4.09it/s]
Loading file: Robert_Schweichel_-_Die_Falkner_von_St._Vigil_(1881).spacy
Reading annotated data: 533it [03:28,  1.64it/s]
Loading file: Peter_Rosegger_-_Das_Felsenbildnis_(1874).spacy
Loading file: Friedrich_J_Pajeken_-_Bob_der_Fallensteller_(1890).spacy
Reading annotated data: 535it [03:28,  2.28it/s]
Loading file: Leopold_von_Sacher-Masoch_-_Der_Wanderer_(1895).spacy
Loading file: Karl_Immermann_-_MĂŒnchhausen_(1839).spacy
Reading annotated data: 537it [03:30,  1.65it/s]
Loading file: JJA_Pffyfer_zu_Neueck_-_O_ma_patrie!_(1853).spacy
Loading file: Karl_Gutzkow_-_Wally,_die_Zweiflerin_(1835).spacy
Reading annotated data: 539it [03:31,  2.27it/s]
Loading file: Adolf_Glassbrenner_-_Der_Gensd'armen-Markt_(1838).spacy
Loading file: Philipp_Galen_-_Der_Strandvogt_von_Jasmund_-_Erster_Band_(1859).spacy
Reading annotated data: 541it [03:31,  2.60it/s]
Loading file: Heinrich_Laube_-_Ein_Liebespaar_(1837).spacy
Loading file: Otto_Julius_Bierbaum_-_To-lu-to-lo_oder_Wie_Emil_TĂŒrke_wurde_(1897).spacy
Loading file: ETA_Hoffmann_-_Lebensansichten_des_Katers_Murr_(1819).spacy
Reading annotated data: 544it [03:32,  2.75it/s]
Reading annotated data: 547it [03:32,  4.12it/s]
Loading file: Oskar_Panizza_-_Indianer-Gedanken_(1893).spacy
Loading file: Johanna_Spyri_-_Rosenresli_(1882).spacy
Loading file: Edmund_Hoefer_-_Das_verlassene_Haus_(1845).spacy
Loading file: Ottilie_Wildermuth_-_Die_Lehrjahre_der_zwei_Schwestern_(1855).spacy
Reading annotated data: 549it [03:32,  4.61it/s]
Loading file: Louise_Aston_-_Aus_dem_Leben_einer_Frau_(1847).spacy
Loading file: Friedrich_GerstÀcker_-_Herrn_Mahlhuber's_Reiseabenteuer_(1857).spacy
Reading annotated data: 550it [03:33,  4.57it/s]
Loading file: Auguste_von_der_Decken_-_Brausejahre_(1885).spacy
Reading annotated data: 551it [03:33,  3.55it/s]
Loading file: Eugenie_Marlitt_-_Im_Schillingshof_(1880).spacy
Reading annotated data: 552it [03:34,  2.37it/s]
Loading file: Wilhelm_Raabe_-_Der_SchĂŒdderump_(1870).spacy
Reading annotated data: 553it [03:35,  1.94it/s]
Loading file: Ferdinand_von_Saar_-_Die_Geigerin_(1875).spacy
Loading file: Eugenie_Marlitt_-_Das_Heideprinzeßchen_(1872).spacy
Reading annotated data: 555it [03:36,  2.08it/s]
Reading annotated data: 556it [03:36,  2.41it/s]
Loading file: Ludwig_Tieck_-_Die_Klausenburg_(1837).spacy
Loading file: Hermann_Kurz_-_Gesammelte_kleinere_ErzĂ€hlungen_–_Vierter_Teil_(1858).spacy
Reading annotated data: 557it [03:37,  2.33it/s]
Reading annotated data: 558it [03:37,  2.82it/s]
Loading file: Theodor_Storm_-_Auf_der_UniversitÀt_(1863).spacy
Loading file: Bertha_von_Suttner_-_Langeweile_(1895).spacy
Loading file: Ludwig_Steub_-_Die_Rose_der_Sewi_(1879).spacy
Reading annotated data: 560it [03:37,  3.80it/s]
Loading file: Wilhelm_Raabe_-_Die_Leute_aus_dem_Walde_(1863).spacy
Reading annotated data: 561it [03:38,  2.43it/s]
Reading annotated data: 562it [03:38,  2.85it/s]
Loading file: Gottfried_Keller_-_Die_mißbrauchten_Liebesbriefe_(1860).spacy
Loading file: Karl_Gutzkow_-_Eine_Phantasieliebe_(1845).spacy
Reading annotated data: 563it [03:38,  3.32it/s]
Reading annotated data: 564it [03:38,  3.72it/s]
Loading file: Wilhelm_Raabe_-_Zum_wilden_Mann_(1873).spacy
Loading file: Sir_John_Retcliffe_-_Magenta_und_Solferino_-_Band_3_(1864).spacy
Reading annotated data: 565it [03:39,  2.43it/s]
Loading file: Michael_Georg_Conrad_-_Die_bayrische_Königstragödie_im_BĂŒrgerhause_(1886).spacy
Loading file: Ulrich_Hegner_-_Die_Molkenkur_(1812).spacy
Reading annotated data: 567it [03:40,  3.00it/s]
Loading file: Willibald_Alexis_-_Der_Werwolf_1_(1848).spacy
Reading annotated data: 568it [03:40,  2.82it/s]
Loading file: Charles_Sealsfield_-_Der_Legitime_und_die_Republikaner_(1833).spacy
Reading annotated data: 569it [03:41,  1.91it/s]
Loading file: Ludwig_Tieck_-_Das_alte_Buch_und_die_Reise_ins_Blaue_hinein_(1835).spacy
Reading annotated data: 570it [03:41,  2.22it/s]
Loading file: Edmund_Hoefer_-_Der_Alte_von_Menkendorf_(1882).spacy
Reading annotated data: 571it [03:42,  1.88it/s]
Reading annotated data: 572it [03:42,  2.44it/s]
Loading file: Heinrich_Heine_-_Der_Rabbi_von_Bacherach_(1840).spacy
Loading file: Heinrich_Laube_-_Reisenovellen_-_Band_5_(1837).spacy
Reading annotated data: 573it [03:43,  2.23it/s]
Reading annotated data: 574it [03:43,  2.83it/s]
Loading file: August_Gottlieb_Meißner_-_Die_Seelen-Folter_(1814).spacy
Loading file: Johanna_Spyri_-_Schloss_Wildenstein_(1892).spacy
Reading annotated data: 575it [03:43,  2.72it/s]
Loading file: Georg_Ebers_-_Per_aspera_(1892).spacy
Reading annotated data: 576it [03:45,  1.52it/s]
Reading annotated data: 577it [03:45,  1.99it/s]
Loading file: Joseph_von_Eichendorff_-_Eine_Meerfahrt_(1835).spacy
Loading file: Adalbert_Stifter_-_Die_Mappe_meines_Urgroßvaters_(1841).spacy
Reading annotated data: 578it [03:45,  2.09it/s]
Loading file: Louise_Anklam_-_Kindergeschichten_(1898).spacy
Reading annotated data: 579it [03:45,  2.35it/s]
Loading file: Otto_Julius_Bierbaum_-_Letzte_Musterung_(1893).spacy
Loading file: Friedrich_GerstÀcker_-_Der_erkaufte_Henker_(1845).spacy
Loading file: Otto_Julius_Bierbaum_-_Die_Schlangendame_(1896).spacy
Reading annotated data: 582it [03:46,  4.41it/s]
Loading file: FW_HacklÀnder_-_Humoristische_ErzÀhlungen_(1847).spacy
Reading annotated data: 583it [03:46,  3.61it/s]
Reading annotated data: 585it [03:46,  4.75it/s]
Loading file: Achim_von_Arnim_-_Der_tolle_Invalide_auf_dem_Fort_Ratonneau_(1818).spacy
Loading file: Leopold_von_Sacher-Masoch_-_Neue_ErzÀhlungen_(1893).spacy
Loading file: Johann_Gabriel_Seidl_-_Cornelia_Fieramonti_(1842).spacy
Loading file: Willibald_Alexis_-_Der_Roland_von_Berlin_–_Erster_Band_(1840).spacy
Reading annotated data: 587it [03:47,  4.15it/s]
Loading file: August_Hagen_-_Norika_(1829).spacy
Reading annotated data: 588it [03:47,  3.81it/s]
Reading annotated data: 589it [03:47,  4.31it/s]
Loading file: Wilhelm_Fischer_-_Das_Licht_im_Elendhause_(1898).spacy
Loading file: Wilhelm_Heinrich_Riehl_-_Meister_Martin_Hildebrand_(1847).spacy
Reading annotated data: 591it [03:48,  5.96it/s]
Loading file: Johanna_Spyri_-_Und_wer_nur_Gott_zum_Freunde_hat,_dem_hilft_er_immer_wieder_(1882).spacy
Loading file: Georg_Ebers_-_Serapis_(1885).spacy
Reading annotated data: 592it [03:48,  3.39it/s]
Loading file: Friedrich_GerstĂ€cker_-_Die_Flußpiraten_des_Mississippi_(1848).spacy
Reading annotated data: 593it [03:49,  2.07it/s]
Reading annotated data: 594it [03:49,  2.57it/s]
Loading file: Karl_Wilhelm_Salice_Contessa_-_Vergib_uns_unsere_Schuld_(1825).spacy
Loading file: Wilhelm_Raabe_-_Gutmanns_Reisen_(1891).spacy
Reading annotated data: 595it [03:50,  2.55it/s]
Loading file: Friedrich_GerstÀcker_-_Der_Flatbootmann_(1858).spacy
Reading annotated data: 596it [03:50,  2.73it/s]
Loading file: Ernst_Wichert_-_FĂŒr_tot_erklĂ€rt_(1867).spacy
Reading annotated data: 597it [03:50,  2.93it/s]
Loading file: Adolf_von_Winterfeld_-_Die_vier_Töchter_des_Rittmeister_Schimmelmann_(1873).spacy
Reading annotated data: 598it [03:51,  1.93it/s]
Loading file: Theodor_MĂŒgge_-_Erich_Randal_(1856).spacy
Reading annotated data: 599it [03:53,  1.12it/s]
Loading file: Arthur_Schnitzler_-_Der_Andere_(1895).spacy
Loading file: Levin_SchĂŒcking_-_Die_Marketenderin_von_Köln_(1861).spacy
Reading annotated data: 601it [03:54,  1.54it/s]
Loading file: Ludwig_Tieck_-_Tod_des_Dichters_(1845).spacy
Reading annotated data: 602it [03:54,  1.62it/s]
Loading file: Leopold_Kompert_-_Neue_Geschichten_aus_dem_Ghetto_(1860).spacy
Reading annotated data: 603it [03:55,  1.53it/s]
Loading file: Friedrich_GerstÀcker_-_Der_Kunstreiter_(1861).spacy
Reading annotated data: 604it [03:56,  1.51it/s]
Loading file: Sir_John_Retcliffe_-_Solferino_(1866).spacy
Reading annotated data: 605it [03:57,  1.43it/s]
Loading file: Moritz_Hartmann_-_Der_Krieg_um_den_Wald_-_1_(1850).spacy
Reading annotated data: 606it [03:57,  1.67it/s]
Reading annotated data: 607it [03:57,  2.15it/s]
Loading file: Johannes_Schlaf_-_In_Dingsda_(1892).spacy
Loading file: Jeremias_Gotthelf_-_Der_Besenbinder_von_Rychiswyl_(1852).spacy
Loading file: Eduard_Mörike_-_Der_Schatz_(1836).spacy
Reading annotated data: 609it [03:57,  3.35it/s]
Loading file: Detlev_von_Liliencron_-_Der_letzte_Gruß_(1899).spacy
Loading file: Adalbert_Stifter_-_Der_Hagestolz_(1845).spacy
Reading annotated data: 611it [03:58,  3.89it/s]
Loading file: Marie_von_Ebner-Eschenbach_-_Krambambuli_(1884).spacy
Loading file: Ludwig_Tieck_-_Der_Geheimnisvolle_(1822).spacy
Reading annotated data: 613it [03:58,  4.82it/s]
Loading file: Friedrich_GerstÀcker_-_StrÀflinge_(1857).spacy
Reading annotated data: 614it [03:59,  3.68it/s]
Loading file: Willibald_Alexis_-_Isegrimm_(1854).spacy
Reading annotated data: 615it [04:00,  1.77it/s]
Reading annotated data: 616it [04:00,  2.17it/s]
Loading file: H._Clauren_-_Die_GrÀnz-Kommission_(1825).spacy
Loading file: Edmund_Hoefer_-_Das_Wyler_SchlĂ¶ĂŸchen_(1865).spacy
Reading annotated data: 617it [04:01,  2.27it/s]
Reading annotated data: 619it [04:01,  3.60it/s]
Loading file: Moritz_Hartmann_-_Das_Schloß_im_Gebirge_(1866).spacy
Loading file: Friedrich_Halm_-_Die_Freundinnen_(1860).spacy
Loading file: Marie_von_Ebner-Eschenbach_-_Der_gute_Mond_(1886).spacy
Loading file: Ernst_Willkomm_-_ErzÀhlungen_eines_Wattenschiffers_(1854).spacy
Reading annotated data: 622it [04:01,  5.20it/s]
Loading file: Ernst_Wichert_-_Der_Schaktarp_(1881).spacy
Loading file: Jean_Paul_-_Leben_Fibels_(1812).spacy
Reading annotated data: 623it [04:01,  4.23it/s]
Loading file: Abraham_Manuel_Fröhlich_-_Der_Kinderball_(1833).spacy
Loading file: Ludwig_Tieck_-_Der_Runenberg_(1812).spacy
Loading file: Friedrich_Spielhagen_-_Hammer_und_Amboß_(1869).spacy
Reading annotated data: 626it [04:03,  2.37it/s]
Loading file: Hugo_von_Hofmannsthal_-_Gerechtigkeit_(1893).spacy
Loading file: Oskar_Panizza_-_Der_Korsetten-Fritz_(1893).spacy
Loading file: Claire_von_GlĂŒmer_-_GesĂŒhnt_(1882).spacy
Reading annotated data: 629it [04:04,  3.43it/s]
Reading annotated data: 630it [04:04,  3.68it/s]
Loading file: Wilhelm_Raabe_-_Die_GĂ€nse_von_BĂŒtzow_(1866).spacy
Loading file: ETA_Hoffmann_-_Das_GelĂŒbde_(1817).spacy
Loading file: Hermann_Kurz_-_Gesammelte_kleinere_ErzÀhlungen,_3._Teil_(1873).spacy
Reading annotated data: 632it [04:04,  4.05it/s]
Loading file: Theodor_Fontane_-_Meine_Kinderjahre_(1894).spacy
Reading annotated data: 633it [04:05,  3.41it/s]
Loading file: Karl_von_Perfall_-_Das_Königsliebchen_(1895).spacy
Reading annotated data: 634it [04:05,  3.33it/s]
Loading file: Maximilian_Schmidt_-_Glasmacherleut'_(1869).spacy
Reading annotated data: 635it [04:05,  3.30it/s]
Loading file: Heinrich_Steinhausen_-_Irmela_(1881).spacy
Reading annotated data: 636it [04:06,  2.77it/s]
Reading annotated data: 637it [04:06,  3.34it/s]
Loading file: Ludwig_Tieck_-_Der_Schutzgeist_(1839).spacy
Loading file: Ludwig_Tieck_-_Des_Lebens_Überfluss_(1837).spacy
Reading annotated data: 638it [04:06,  4.00it/s]
Reading annotated data: 639it [04:06,  4.64it/s]
Loading file: ETA_Hoffmann_-_Meister_Martin_der_KĂŒfner_und_seine_Gesellen_(1818).spacy
Loading file: Arthur_Schnitzler_-_GesprÀch_in_der_Kaffeehausecke_(1895).spacy
Loading file: Johann_Gabriel_Seidl_-_Die_Blaue_(1842).spacy
Loading file: Ludwig_Tieck_-_Die_Elfen_(1812).spacy
Loading file: Maximilian_Schmidt_-_Die_Jachenauer_in_Griechenland_(1888).spacy
Reading annotated data: 643it [04:07,  6.92it/s]
Reading annotated data: 644it [04:07,  6.60it/s]
Loading file: Wilhelm_Raabe_-_Eulenpfingsten_(1874).spacy
Loading file: Oskar_Klaußmann_-_Drei_KriminalerzĂ€hlungen_(1889).spacy
Reading annotated data: 645it [04:07,  6.28it/s]
Loading file: Theodor_Storm_-_In_St_JĂŒrgen_(1867).spacy
Loading file: Peter_Rosegger_-_Peter_Mayr_der_Wirt_an_der_Mahr_(1891).spacy
Reading annotated data: 647it [04:08,  3.94it/s]
Loading file: Justinus_Kerner_-_Geschichte_des_MĂ€dchens_von_Orlach_(1834).spacy
Loading file: Georg_Schirges_-_Der_BĂ€lgentreter_von_Eilersrode_(1845).spacy
Reading annotated data: 649it [04:08,  3.75it/s]
Reading annotated data: 650it [04:09,  3.96it/s]
Loading file: Theodor_Storm_-_Zur_Chronik_von_Grieshuus_(1884).spacy
Loading file: ETA_Hoffmann_-_Die_Jesuiterkirche_in_G._(1817).spacy
Loading file: Achim_von_Arnim_-_Armut,_Reichtum,_Schuld_und_Buße_der_GrĂ€fin_Dolores_(1810).spacy
Reading annotated data: 652it [04:10,  2.57it/s]
Loading file: Otto_Julius_Bierbaum_-_Die_falsche_Kindbetterin_(1893).spacy
Loading file: Wilhelm_Raabe_-_Deutscher_Mondschein_(1873).spacy
Loading file: Gottfried_Keller_-_Martin_Salander_(1886).spacy
Reading annotated data: 655it [04:11,  3.10it/s]
Loading file: Karl_May_-_Die_Juweleninsel_(1880).spacy
Reading annotated data: 656it [04:12,  2.04it/s]
Loading file: Johann_Gabriel_Seidl_-_Juana_(1842).spacy
Loading file: Heinrich_Schaumberger_-_Vater_und_Sohn_(1876).spacy
Reading annotated data: 658it [04:12,  2.36it/s]
Loading file: Ludwig_Bechstein_-_Der_Dunkelgraf_(1854).spacy
Reading annotated data: 659it [04:13,  1.88it/s]
Loading file: Heinrich_von_Kleist_-_Die_Verlobung_in_St._Domingo_(1811).spacy
Loading file: Gustav_Freytag_-_Die_verlorene_Handschrift_(1864).spacy
Reading annotated data: 661it [04:15,  1.48it/s]
Loading file: Armand_(Friedrich_Strubberg)_-_Saat_und_Ernte_(1866).spacy
Reading annotated data: 662it [04:17,  1.27it/s]
Loading file: Felix_Dahn_-_Felicitas_(1882).spacy
Reading annotated data: 663it [04:17,  1.50it/s]
Loading file: FW_HacklÀnder_-_Eugen_Stillfried_-_Erster_Band_(1852).spacy
Reading annotated data: 664it [04:17,  1.60it/s]
Reading annotated data: 665it [04:18,  1.94it/s]
Loading file: Wilhelm_Raabe_-_Höxter_und_Corvey_(1875).spacy
Loading file: Carl_Spindler_-_Der_Jesuit_(1829).spacy
Reading annotated data: 666it [04:18,  1.63it/s]
Loading file: Franz_Xaver_Bronner_-_Ein_Mönchsleben_aus_der_empfindsamen_Zeit_-_Band_2_(1850).spacy
Reading annotated data: 667it [04:19,  1.57it/s]
Loading file: Heinrich_Schaumberger_-_Fritz_Reinhardt_(1874).spacy
Reading annotated data: 668it [04:20,  1.36it/s]
Loading file: Franz_Kuenlin_-_Die_Ehen_werden_im_Himmel_geschlossen_(1840).spacy
Loading file: Hermann_Kurz_-_Schillers_Heimatjahre_(1843).spacy
Reading annotated data: 670it [04:22,  1.37it/s]
Reading annotated data: 672it [04:22,  2.10it/s]
Loading file: Heinrich_Laube_-_Nell_(1837).spacy
Loading file: Ludwig_Tieck_-_Der_fĂŒnfzehnte_November_(1827).spacy
Loading file: Gottfried_Keller_-_Das_verlorene_Lachen_(1874).spacy
Reading annotated data: 673it [04:22,  2.41it/s]
Reading annotated data: 674it [04:22,  2.84it/s]
Loading file: Heinrich_Zschokke_-_Jonathan_Frock_(1825).spacy
Loading file: Wilhelm_Raabe_-_Pfisters_MĂŒhle_(1884).spacy
Reading annotated data: 675it [04:22,  2.86it/s]
Loading file: Levin_SchĂŒcking_-_Der_Kampf_im_Spessart_(1875).spacy
Reading annotated data: 676it [04:23,  2.77it/s]
Loading file: Michael_Georg_Conrad_-_Anna-Mia_(1895).spacy
Loading file: Heinrich_Heine_-_Reisebilder_(1826).spacy
Reading annotated data: 678it [04:24,  2.09it/s]
Loading file: Theodor_Fontane_-_Jenseit_des_Tweed_(1860).spacy
Reading annotated data: 679it [04:25,  1.93it/s]
Loading file: August_Kopisch_-_Ein_Carnevalsfest_auf_Ischia_(1856).spacy
Loading file: Hermann_Heiberg_-_TodsĂŒnden_(1891).spacy
Reading annotated data: 681it [04:25,  2.26it/s]
Loading file: Ludwig_Ganghofer_-_Der_nette_Kerl_(1880).spacy
Loading file: Eduard_von_Keyserling_-_FrÀulein_Rosa_Herz_(1887).spacy
Reading annotated data: 683it [04:26,  2.34it/s]
Reading annotated data: 684it [04:26,  2.77it/s]
Loading file: Friedrich_Halm_-_Die_Marzipan-Lise_(1871).spacy
Loading file: Wilhelm_Jensen_-_Hunnenblut_(1892).spacy
Reading annotated data: 685it [04:26,  3.18it/s]
Loading file: Theodor_Fontane_-_Unterm_Birnbaum_(1885).spacy
Reading annotated data: 686it [04:27,  3.43it/s]
Loading file: Julius_Stinde_-_Die_Seerose_(1895).spacy
Loading file: Karl_Immermann_-_Der_Oberhof_(1839).spacy
Reading annotated data: 688it [04:28,  2.86it/s]
Loading file: Peter_Rosegger_-_Die_Schriften_des_Waldschulmeisters_(1875).spacy
Reading annotated data: 689it [04:28,  2.55it/s]
Loading file: Alexander_von_Ungern-Sternberg_-_Die_Zerrissenen_(1832).spacy
Reading annotated data: 690it [04:28,  2.56it/s]
Loading file: Karl_May_-_Lopez_Jordan_(1889).spacy
Reading annotated data: 691it [04:29,  1.97it/s]
Loading file: Wilhelm_Hauff_-_Phantasien_und_Skizzen_(1827).spacy
Reading annotated data: 692it [04:30,  2.08it/s]
Reading annotated data: 694it [04:30,  3.35it/s]
Loading file: ETA_Hoffmann_-_Die_Bergwerke_zu_Falun_(1816).spacy
Loading file: ETA_Hoffmann_-_Das_steinerne_Herz_(1817).spacy
Loading file: Charles_Sealsfield_-_In_der_PrÀrie_verirrt_(1841).spacy
Loading file: Julius_von_Voß_-_Die_Moden_der_guten_alten_Zeit_(1827).spacy
Reading annotated data: 696it [04:30,  3.95it/s]
Loading file: Theodor_Storm_-_Der_Schimmelreiter_(1888).spacy
Reading annotated data: 697it [04:30,  3.96it/s]
Loading file: Adalbert_Stifter_-_Feldblumen_(1841).spacy
Reading annotated data: 698it [04:31,  4.01it/s]
Reading annotated data: 699it [04:31,  4.40it/s]
Loading file: Otto_Roquette_-_Das_Eulenzeichen_(1884).spacy
Loading file: Theodor_Körner_-_Die_Reise_nach_Wörlitz_(1810).spacy
Loading file: Otto_Ruppius_-_Der_Pedlar_(1857).spacy
Reading annotated data: 701it [04:31,  3.94it/s]
Loading file: Ludwig_Ganghofer_-_Schloß_Hubertus_(1895).spacy
Reading annotated data: 702it [04:33,  2.19it/s]
Loading file: Johanna_Schopenhauer_-_Gabriele_(1819).spacy
Reading annotated data: 703it [04:33,  1.75it/s]
Loading file: Theodor_Fontane_-_Vor_dem_Sturm_(1878).spacy
Reading annotated data: 704it [04:35,  1.18it/s]
Reading annotated data: 705it [04:35,  1.55it/s]
Loading file: Wilhelm_Heinrich_Riehl_-_Die_Lehrjahre_eines_Humanisten_(1856).spacy
Loading file: H._Clauren_-_Mimili_(1816).spacy
Reading annotated data: 706it [04:35,  2.00it/s]
Loading file: ETA_Hoffmann_-_Des_Vetters_Eckfenster_(1822).spacy
Loading file: Nataly_von_Eschstruth_-_Der_Stern_des_GlĂŒcks_(1896).spacy
Reading annotated data: 708it [04:36,  2.31it/s]
Reading annotated data: 710it [04:36,  3.41it/s]
Loading file: ETA_Hoffmann_-_Das_öde_Haus_(1817).spacy
Loading file: Ferdinand_von_Saar_-_Tambi_(1897).spacy
Loading file: Wilhelm_Raabe_-_Abu_Telfan_(1868).spacy
Reading annotated data: 711it [04:37,  2.45it/s]
Loading file: Friedrich_RĂŒckert_-_Die_Makamen_des_Hariri_(1826).spacy
Reading annotated data: 712it [04:37,  2.30it/s]
Loading file: Joseph_Seligmann_Kohn_-_Der_jĂŒdische_Gil_Blas_(1834).spacy
Reading annotated data: 713it [04:38,  2.54it/s]
Reading annotated data: 716it [04:38,  4.64it/s]
Loading file: Heinrich_von_Kleist_-_Das_Bettelweib_von_Locarno_(1811).spacy
Loading file: Theodor_Storm_-_Beim_Vetter_Christian_(1874).spacy
Loading file: Ottilie_Wildermuth_-_Frau_Luna_(1862).spacy
Loading file: Gottfried_Keller_-_Kleider_machen_Leute_(1874).spacy
Loading file: Louise_von_François_-_FrÀulein_Muthchen_und_ihr_Hausmeier_(1859).spacy
Reading annotated data: 718it [04:38,  5.14it/s]
Reading annotated data: 719it [04:38,  5.55it/s]
Loading file: Paul_Heyse_-_Am_Tiberufer_(1855).spacy
Loading file: Friedrich_GerstÀcker_-_Das_Wrack_(1870).spacy
Reading annotated data: 721it [04:39,  6.58it/s]
Loading file: Paul_Heyse_-_Maria_Francisca_(1858).spacy
Loading file: Philipp_Galen_-_Der_Strandvogt_von_Jasmund_-_Dritter_Band_(1859).spacy
Reading annotated data: 722it [04:39,  4.89it/s]
Reading annotated data: 723it [04:39,  5.15it/s]
Loading file: Jeremias_Gotthelf_-_Der_Oberamtmann_und_der_Amtsrichter_(1853).spacy
Loading file: Achim_von_Arnim_-_Die_KronenwÀchter_(1817).spacy
Reading annotated data: 724it [04:40,  3.11it/s]
Reading annotated data: 724it [04:40,  2.58it/s]

print(f"Loading the data took: {round(took, 4)} seconds")
Loading the data took: 280.346 seconds

Diese Zelle gibt die ersten 20 Zeilen der Annotation des Textes aus, der zufÀllig der erste im Python-Dictionary ist, das die Annotationen aktuell im Arbeitsspeicher speichert.

print(f"Annotations of first 20 lines of the text: {list(annotated_docs.keys())[0]}:\n")
print("Token\tLemma\tPoS")
for token in annotated_docs[list(annotated_docs.keys())[0]][:20]:
    print(f"{token.text}\t{token.lemma_}\t{token.pos_}")
Annotations of first 20 lines of the text: Karl_Immermann_-_Die_Epigonen_(1836):

Token	Lemma	PoS
Die	der	DET
Epigonen	Epigon	NOUN
.	--	PUNCT
Familien-Memoiren	Familien-Memoir	NOUN
in	in	ADP
neun	neun	NUM
BĂŒchern	Buch	NOUN
.	--	PUNCT
Herausgegeben	Herausgegebe	VERB
von	von	ADP
Karl	Karl	PROPN
Immermann	Immermann	PROPN
.	--	PUNCT
━	━	DET
━	━	PROPN
━	━	PROPN
━	━	DET
━	━	DET
━	━	DET
━	━	DET

5.5.4. Einlesen der Metadaten#

Anschließend werden die zugehörigen Metadaten geladen und auf diejenigen Texte beschrĂ€nkt, fĂŒr die Annotationen vorliegen. Als zeitliche Angabe verwenden wir die Spalte DC.date, die fĂŒr jeden Text nur das Publikationsjahr als ganze Zahl enthĂ€lt – ein genaueres Datum liegt nicht vor. Darauf stĂŒtzen sich die spĂ€teren zeitbasierten Aggregationen und Visualisierungen.

Warum lesen wir hier ĂŒberhaupt Metadaten ein? Die spaCy-Annotationen aus dem vorigen Schritt enthalten nur sprachliche Information (Wortarten, Grundformen, syntaktische AbhĂ€ngigkeiten), aber keine bibliografischen Angaben dazu, wann ein Text erschienen ist oder von wem er stammt. Genau diese Angaben brauchen wir aber, um unsere Forschungsfrage nach dem Wandel ĂŒber die Zeit zu beantworten: Erst die Metadaten erlauben es uns, jedem Text sein Erscheinungsjahr bzw. Jahrzehnt zuzuordnen und die gefundenen Adjektive so ĂŒber die Zeit hinweg zu aggregieren. DarĂŒber hinaus liefern sie Titel und Autor:innennamen, die wir spĂ€ter in den KWIC-Tabellen (Belegstellen im Kontext) mit anzeigen. VerknĂŒpft werden Annotationen und Metadaten ĂŒber die Spalte DC.identifier, die in beiden DatensĂ€tzen dieselbe Text-ID enthĂ€lt.

Wie sind diese CSV-Dateien entstanden? Es handelt sich nicht um Rohdaten aus einer externen Quelle, sondern um Zwischenergebnisse, die wir in dieser Fallstudie selbst erzeugt haben. Im Abschnitt „Sampling und Filterung des Korpus“ sind wir von der vollstĂ€ndigen Metadatentabelle des Corpus of German-Language Fiction ausgegangen, haben sie auf das 19. Jahrhundert eingegrenzt und daraus pro Jahrzehnt jeweils bis zu 50 Texte zufĂ€llig gezogen. Das Ergebnis dieser Ziehung – zwei zeitlich balancierte Stichproben – wurde dort mit to_csv als Tabelle gespeichert. Genau diese beiden Dateien laden wir jetzt wieder ein, damit die Analyse auf demselben, reproduzierbar zusammengestellten Korpus aufsetzt.

Zur Erinnerung: Zwei-Stichproben-Ansatz#

FĂŒr die Robustheit der Analyse arbeiten wir mit zwei verschiedenen Stichproben (siehe Abschnitt „Sampling und Filterung des Korpus“) – unseren beiden Korpora:

  • Korpus I: ZufĂ€llige Auswahl von 50 Texten pro Jahrzehnt (random_state=42)

  • Korpus II: Alternative zufĂ€llige Auswahl von 50 Texten pro Jahrzehnt (random_state=31415)

Dieser Ansatz ermöglicht es, zu ĂŒberprĂŒfen, ob die beobachteten Muster robust gegenĂŒber unterschiedlichen Stichproben sind oder ob sie durch die spezifische Textauswahl beeinflusst werden.

In der folgenden Zelle definieren wir den Pfad zu dem Ordner, in dem die Metadatentabellen abgelegt werden sollen.

# 🚀 Create metadata directory path
metadata_dir = Path("../metadata")
metadata_dir.mkdir(parents=True, exist_ok=True)

In der folgenden Zelle laden wir die Metadaten-Dateien fĂŒr die beiden Korpora (Korpus I und Korpus II) mit download_file aus dem GitHub-Repository der Fallstudie herunter und legen sie im dafĂŒr vorgesehenen Ordner ab.

# 🚀 Load the metadata files from GitHub 
download_file("https://raw.githubusercontent.com/quadriga-dk/Text-Fallstudie-3/refs/heads/main/metadata/metadata_corpus-german_language_fiction_1810-1900_50-per-decade.csv", "../metadata")
download_file("https://raw.githubusercontent.com/quadriga-dk/Text-Fallstudie-3/refs/heads/main/metadata/metadata_corpus-german_language_fiction_1810-1900_50-per-decade_ALT.csv", "../metadata")

In den folgenden Zellen lesen wir die heruntergeladenen Metadaten mit der Python-Bibliothek pandas fĂŒr die tabellarische Verarbeitung ein und zeigen, wie die Tabellen aussehen.

Korpus I:

metadata_df = pd.read_csv(metadata_dir / "metadata_corpus-german_language_fiction_1810-1900_50-per-decade.csv")
metadata_df = metadata_df[metadata_df['DC.identifier'].isin(annotated_docs.keys())]
show(metadata_df)
Loading ITables v2.6.1 from the internet... (need help?)

Korpus II:

metadata_df_alt = pd.read_csv(metadata_dir / "metadata_corpus-german_language_fiction_1810-1900_50-per-decade_ALT.csv")
metadata_df_alt = metadata_df_alt[metadata_df_alt['DC.identifier'].isin(annotated_docs.keys())]
show(metadata_df_alt)
Loading ITables v2.6.1 from the internet... (need help?)

5.5.5. Syntaktische N-Gramme extrahieren#

In einem weiteren Schritt können wir die Adjektive extrahieren, die mit dem Nomen Luft in Verbindung stehen (siehe Syntaktische N-Gramme). Wir suchen in den annotierten Texten nach allen FĂ€llen, in denen Luft durch ein Adjektiv nĂ€her bestimmt wird – wie in frische Luft, schlechte Luft oder verdorbene Luft.

Syntactic Bigram

Wir machen dabei Gebrauch von den Dependenzstrukturen, die sich durch das spaCy-eigene Doc einfach navigieren lassen – das heißt, wir können von einem Wort aus gezielt zu den syntaktisch mit ihm verbundenen Wörtern gelangen (etwa von einem Substantiv zu den Adjektiven, die es nĂ€her bestimmen). In den Standard-spaCy-Modellen fĂŒr die deutsche Sprache wird die syntaktische Position eines solchen adjektivischen Modifikators – anders als im Englischen und einigen anderen Sprachen, wo das Label „amod“ verwendet wird – aus historischen GrĂŒnden mit „nk“ (noun kernel element) annotiert.

In unserer Implementierung stĂŒtzen wir uns daher auf die Kombination aus dem Dependency-Label „nk“ und dem POS-Tag „ADJ“, um Adjektive zu identifizieren, die unser Zielsubstantiv „Luft“ nĂ€her bestimmen (in diesem Beispiel-Szenario; weiter unten zeigen wir, wie sich stattdessen auch eigene Wörter untersuchen lassen).

In der folgenden Zelle definieren wir die Funktion, die die eigentliche Extraktion der abhĂ€ngigen Adjektive durchfĂŒhrt. FĂŒr jeden Text im Korpus sammelt sie alle Adjektive, die das Zielsubstantiv ĂŒber die Relation „nk“ nĂ€her bestimmen, und zĂ€hlt deren HĂ€ufigkeit. Das Ergebnis ist eine Tabelle, die fĂŒr jeden Text festhĂ€lt, wie oft jedes beobachtete Adjektiv mit dem Zielsubstantiv auftritt – die Grundlage fĂŒr die spĂ€tere Analyse der HĂ€ufigkeiten im Zeitverlauf.

def extract_dependent_adjective_list(spacy_docs: Dict, metadata_df: pd.DataFrame,
                                     noun_input: Union[str, List[str]], top_n: int = 10) -> Tuple[pd.DataFrame, List[str]]:
    """
    Extract adjective modifiers (nk) for a noun or list of nouns and track their frequency over time.

    Parameters:
    -----------
    spacy_docs : dict
        Dictionary with file_ids as keys and spaCy Doc objects as values
    metadata_df : pd.DataFrame
        DataFrame with columns: 'lastname', 'firstname', 'DC.title', 'DC.date', 'volume', 'ID', 'decade'
    noun_input : str or list of str
        Single noun lemma (e.g., 'liebe') or list of noun lemmata (e.g., ['liebe', 'leidenschaft'])
    top_n : int
        Size of the returned top_adjectives list (default: 10).
        The returned DataFrame always contains ALL observed adjectives — top_n only
        controls the convenience list returned alongside it.

    Returns:
    --------
    tuple : (pd.DataFrame, list)
        - DataFrame with columns: filename, DC.title, DC.date, adjective, count, noun_count
          (one row per (file, observed adjective) for every file in which the target
          noun appears at least once; count may be 0)
        - List of the top N most frequent adjectives across the corpus
    """
    # Convert single noun to list for uniform processing
    if isinstance(noun_input, str):
        noun_list = [noun_input]
    else:
        noun_list = noun_input

    # Convert to lowercase for case-insensitive matching
    noun_list_lower = [noun.lower() for noun in noun_list]

    # Single token-scanning pass: for each metadata-matched doc, compute its
    # per-document adjective counts once and simultaneously accumulate them into
    # the corpus-wide counter. (Previously this token walk was done twice — once
    # globally, once per document — which doubled the expensive spaCy work.)
    # Building the global vocabulary only from metadata-matched docs also avoids
    # phantom always-zero adjective columns from docs that are dropped below.
    all_adjectives = Counter()
    per_doc = []  # (file_id, meta_row, adjective_counts, noun_count)

    for file_id, doc in spacy_docs.items():
        # Get metadata for this file
        meta_row = metadata_df[metadata_df['DC.identifier'] == file_id]

        if meta_row.empty:
            continue

        # Count adjectives modifying the target nouns in this document
        adjective_counts = Counter()
        noun_count = 0

        for token in doc:
            # Check if this token is one of our target nouns
            if token.lemma_.lower() in noun_list_lower and token.pos_ == 'NOUN':
                noun_count += 1
                # Find adjective modifiers (nk dependency)
                for child in token.children:
                    if child.dep_ == 'nk' and child.pos_ == 'ADJ':
                        adjective_counts[child.lemma_.lower()] += 1

        all_adjectives.update(adjective_counts)
        per_doc.append((file_id, meta_row, adjective_counts, noun_count))

    # Full set of adjectives observed in the corpus (no cutoff — used to populate the DataFrame)
    all_observed_adjectives = list(all_adjectives.keys())
    # Top N most frequent — returned as a convenience list for downstream filtering
    top_adjectives = [adj for adj, count in all_adjectives.most_common(top_n)]

    # Densify: emit one row per (document, observed adjective). No spaCy work here —
    # we only read the cached per-document counts computed in the pass above.
    results = []

    for file_id, meta_row, adjective_counts, noun_count in per_doc:
        # Create a row for each observed adjective in the corpus when the noun
        # appears in this document (count may be 0 — needed by downstream
        # time-series averaging, which divides by the number of texts in a year).
        for adjective in all_observed_adjectives:
            count = adjective_counts.get(adjective, 0)
            if noun_count > 0 or count > 0:  # Include if we have nouns or this adjective
                results.append({
                    'filename': file_id,
                    'DC.title': meta_row['DC.title'].values[0],
                    'DC.date': meta_row['DC.date'].values[0],
                    'adjective': adjective,
                    'count': count,
                    'noun_count': noun_count
                })

    return pd.DataFrame(results), top_adjectives

Die obige Funktion lĂ€sst sich mit einem einzelnen Substantiv oder einer Liste von Substantiven verwenden. In diesem Beispiel nutzen wir lediglich das einzelne Substantiv „Luft“:

noun = "Luft"

Wenn Sie dieses Notebook jedoch lokal verwenden, können Sie die Variable fĂŒr das Substantiv neu definieren, zum Beispiel so:

noun = "Nebel"

oder so:

noun = ["Luft", "Nebel", "Rauch"]

In der folgenden Zelle fĂŒhren wir die zuvor definierte Funktion extract_dependent_adjective_list aus und extrahieren die vom ausgewĂ€hlten Substantiv abhĂ€ngigen Adjektive (aus Korpus I). Wir erhalten eine Liste (einen DataFrame, adj_df), in der fĂŒr jedes Buch die HĂ€ufigkeit derjenigen Adjektive aufgefĂŒhrt ist, die in unserem Korpus gemeinsam mit dem Substantiv ein syntaktisches Bigramm bilden. Zudem erhalten wir eine Gesamtliste (top_adjs) der am hĂ€ufigsten vorkommenden Adjektive dieser Art fĂŒr das gesamte Korpus.

⚠ Die AusfĂŒhrung dieser Zelle dauert etwa eine Minute.

adj_df, top_adjs = extract_dependent_adjective_list(annotated_docs, 
                                                    metadata_df, 
                                                    noun, 
                                                    top_n=10)

Nun fĂŒhren wir denselben Vorgang fĂŒr Korpus II durch (die AusfĂŒhrung dauert wiederum etwa eine Minute).

adj_df_alt, top_adjs_alt = extract_dependent_adjective_list(annotated_docs, 
                                                            metadata_df_alt, 
                                                            noun, 
                                                            top_n=10)

Ergebnisse der Extraktion syntaktischer N-Gramme#

Nun liegen fĂŒr jede Stichprobe zwei Arten von Ergebnissen vor. ZunĂ€chst die Liste der top_n hĂ€ufigsten Adjektive in der jeweiligen Stichprobe:

Korpus I:

# Print the top adjectives 
for adj in top_adjs:
    print('* ', adj)
*  frisch
*  frei
*  rein
*  blau
*  kalt
*  leer
*  klar
*  still
*  warm
*  heiß

Korpus II:

# Print the top adjectives (alternative sample)
for adj in top_adjs_alt:
    print('* ', adj)
*  frisch
*  frei
*  rein
*  blau
*  leer
*  klar
*  kalt
*  warm
*  still
*  heiß

Zwischenergebnis#

Hier lĂ€sst sich bereits erkennen, dass die beiden Stichproben recht Ă€hnliche Ergebnisse liefern. So enthalten beispielsweise die beiden Listen der zehn hĂ€ufigsten Wörter dieselben Begriffe, wobei sich lediglich die Reihenfolge geringfĂŒgig unterscheidet. Wir werden im Weiteren analysieren, wie stark die HĂ€ufigkeiten jener Wörter variieren, die in dieser Rangliste unterschiedliche PlĂ€tze belegen.

Die folgenden Tabellen enthalten die HĂ€ufigkeiten dieser Adjektive (und des/der Zielsubstantiv(e) – siehe Spalte noun_count) in den einzelnen BĂŒchern – jeweils eine pro Stichprobe:

Korpus I:

show(adj_df)
Loading ITables v2.6.1 from the internet... (need help?)

Hinweis: Die interaktive Tabelle wird vollstĂ€ndig in das Notebook eingebettet; bei sehr großen Tabellen zeigt itables daher nur eine verkleinerte Auswahl der Zeilen an („downsampled“), damit das Notebook nicht zu groß und langsam wird.

Korpus II:

show(adj_df_alt)
Loading ITables v2.6.1 from the internet... (need help?)

Speichern der Ergebnisse als Dateien#

Die Ergebnisse einer solchen Extraktion stellen bereits ein gewisses Zwischenergebnis der Forschung dar. Speichern wir sie als Dateien:

# Create intermediate directory
interm_data_synt_ngrams_dir = Path("interm_data_synt_ngrams")
interm_data_synt_ngrams_dir.mkdir(parents=True, exist_ok=True)
# Save adj_df to CSV
adj_df.to_csv(interm_data_synt_ngrams_dir / "adj_df_luft.csv", index=False)
print(f"Saved adj_df to interm_data_synt_ngrams/adj_df_luft.csv ({len(adj_df)} rows)")

# Save adj_df_alt to CSV
adj_df_alt.to_csv(interm_data_synt_ngrams_dir / "adj_df_alt_luft.csv", index=False)
print(f"Saved adj_df_alt to interm_data_synt_ngrams/adj_df_alt_luft.csv ({len(adj_df_alt)} rows)")

Laden gespeicherter Ergebnisse (Optional)#

Falls die Ergebnisse bereits extrahiert und als CSV gespeichert wurden, können sie hier geladen werden, anstatt die Extraktion erneut durchzufĂŒhren:

# Optional: Load previously saved results from CSV

# Load adj_df
adj_df = pd.read_csv(interm_data_synt_ngrams_dir / "adj_df_luft.csv")

# Load adj_df_alt
adj_df_alt = pd.read_csv(interm_data_synt_ngrams_dir / "adj_df_alt_luft.csv")

# Recreate top_adjs lists from the dataframes
top_adjs = adj_df.groupby('adjective')['count'].sum().sort_values(ascending=False).head(10).index.tolist()
top_adjs_alt = adj_df_alt.groupby('adjective')['count'].sum().sort_values(ascending=False).head(10).index.tolist()

5.5.6. Analyse und Visualisierung#

Korpusweite HĂ€ufigkeiten adjektivischer Modifikatoren#

ZunĂ€chst betrachten wir die Gesamtverteilung der adjektivischen Modifikatoren. Bevor zeitliche Entwicklungen analysiert werden, ist es sinnvoll, einen Überblick darĂŒber zu gewinnen, welche Adjektive im gesamten Korpus am hĂ€ufigsten als syntaktische Modifikatoren der untersuchten Substantive auftreten. Diese aggregierte Betrachtung erlaubt es, dominante Beschreibungs- und Bewertungsmuster zu identifizieren und dient zugleich als Ausgangspunkt fĂŒr die nachfolgenden diachronen Analysen.

Hide code cell content

def get_top_adjectives_list(adj_df: pd.DataFrame, top_n: int = 10) -> list:
    """
    Get the top N most frequent adjectives from the adjective dataframe.

    Parameters:
    -----------
    adj_df : pd.DataFrame
        DataFrame returned by extract_adjective_modifiers_list()
    top_n : int
        Number of most frequent adjectives to return

    Returns:
    --------
    list
        List of top N adjectives
    """
    total_counts = adj_df.groupby('adjective')['count'].sum().sort_values(ascending=False)
    return total_counts.head(top_n).index.tolist()


def plot_top_adjective_ranking(
    adj_df: pd.DataFrame,
    top_n: int = 20,
    noun_input=None,
    metric: str = "count",   # "count" or "share"
):
    """
    Show a simple ranking of the most frequent adjective modifiers.

    metric:
      - "count": total raw modifier counts across corpus
      - "share": percentage share among all modifier counts (sums to 100)
    """
    totals = (
        adj_df.groupby("adjective")["count"]
              .sum()
              .sort_values(ascending=False)
              .head(top_n)
              .reset_index()
              .rename(columns={"count": "total_count"})
    )
    n_shown = len(totals)

    if metric == "share":
        totals["value"] = (totals["total_count"] / totals["total_count"].sum()) * 100
        xcol = "value"
        xlabel = "Share of all adjective modifiers (%)"
        hover = {"total_count": True, "value": ":.2f"}
    else:
        totals["value"] = totals["total_count"]
        xcol = "value"
        xlabel = "Total count (across corpus)"
        hover = {"total_count": True}

    # Make a readable title noun
    if isinstance(noun_input, str):
        title_noun = f'"{noun_input}"'
    elif isinstance(noun_input, list) and noun_input:
        noun_str = ", ".join(noun_input[:3]) + (f", 
 ({len(noun_input)})" if len(noun_input) > 3 else "")
        title_noun = f"[{noun_str}]"
    else:
        title_noun = ""

    fig = px.bar(
        totals[::-1],               # reverse for top at top in horizontal bar
        x=xcol,
        y="adjective",
        orientation="h",
        title=f"Top {n_shown} adjective modifiers of {title_noun}",
        labels={xcol: xlabel, "adjective": "Adjective"},
        hover_data=hover,
    )

    fig.update_layout(
        height=450 + n_shown * 12,  # scales nicely
        margin=dict(l=120, r=40, t=60, b=40),
        yaxis=dict(categoryorder="total ascending"),
    )

    fig.show()
    return totals


def show_top_adjectives_table(adj_df: pd.DataFrame, top_n: int = 20):
    totals = (
        adj_df.groupby("adjective")["count"]
              .sum()
              .sort_values(ascending=False)
              .head(top_n)
              .reset_index()
              .rename(columns={"count": "total_count"})
    )
    totals["rank"] = range(1, len(totals) + 1)
    totals = totals[["rank", "adjective", "total_count"]]

    fig = go.Figure(data=[go.Table(
        header=dict(values=list(totals.columns)),
        cells=dict(values=[totals[c] for c in totals.columns])
    )])
    fig.update_layout(title=f"Top {len(totals)} adjective modifiers (total counts)", height=400)
    fig.show()
    #return totals


def plot_top_adjectives_by_decade(adj_df: pd.DataFrame, metadata_df: pd.DataFrame, top_n: int = 8):
    # attach decade via filename/ID
    dec = metadata_df[["DC.identifier", "decade"]].rename(columns={"DC.identifier": "filename"})
    df = adj_df.merge(dec, on="filename", how="left").dropna(subset=["decade"]).copy()

    # totals per decade
    g = (df.groupby(["decade", "adjective"])["count"].sum().reset_index())
    # find global top_n adjectives (across all decades)
    top_adjs = (df.groupby("adjective")["count"].sum().sort_values(ascending=False).head(top_n).index.tolist())
    g = g[g["adjective"].isin(top_adjs)]

    fig = px.bar(
        g,
        x="decade",
        y="count",
        color="adjective",
        barmode="group",
        title=f"Top {len(top_adjs)} adjective modifiers by decade (raw counts)",
        labels={"count": "Count", "decade": "Decade", "adjective": "Adjective"},
    )
    fig.update_layout(height=500, hovermode="x unified")
    fig.show()
    #return g

Korpus I:#

totals = plot_top_adjective_ranking(adj_df, top_n=20, noun_input=noun, metric="count")

Alternativ könnten wir dieselben ZÀhlwerte auch in tabellarischer Form darstellen, um die genauen Zahlen besser erkennen zu können:

show_top_adjectives_table(adj_df)

Korpus II:#

totals_alt = plot_top_adjective_ranking(adj_df_alt, top_n=20, noun_input=noun, metric="count")

Tabellarische Form:

show_top_adjectives_table(adj_df_alt)

Hier zeigt sich erneut, dass sich die Ergebnisse der HĂ€ufigkeitsverteilung zwischen den beiden Stichproben nicht wesentlich unterscheiden – oder dass zumindest die allgemeine Rangfolge der Adjektive Ă€hnlich ist. „Frisch“ steht eindeutig an der Spitze, und „Frei“ ist in beiden Korpora zweifellos das zweithĂ€ufigste Adjektiv. Die ĂŒbrigen Adjektive weisen deutlich geringere HĂ€ufigkeiten auf, und auch die Unterschiede zwischen ihren HĂ€ufigkeitswerten sind weitaus geringer.

Diachrone Analyse adjektivisch-substantivischer Konstruktionen#

Im nĂ€chsten Schritt wird die Analyse um eine diachrone Perspektive erweitert. Anstatt ausschließlich korpusweite GesamthĂ€ufigkeiten zu betrachten, wird nun untersucht, wie sich die Verwendung der zuvor identifizierten adjektivischen Modifikatoren im Zeitverlauf entwickelt. Die zeitliche Aggregation erlaubt es, Verschiebungen in Beschreibungs- und Bewertungsmustern nachzuzeichnen und diese mit historischen Prozessen in Beziehung zu setzen.

Die y-Achse der folgenden Diagramme gibt fĂŒr jedes Adjektiv an, welcher Anteil der Luft-Vorkommen (in Prozent) jeweils durch dieses Adjektiv nĂ€her bestimmt wird – also etwa, wie viele aller „Luft“-ErwĂ€hnungen eines Jahres als „frische Luft“ auftreten. Da die Werte einzelner Jahre stark schwanken, glĂ€tten wir sie mit einem gleitenden Durchschnitt ĂŒber ein Fenster von 10 Jahren: Jeder Punkt ist der Mittelwert der umliegenden Jahre, sodass der lĂ€ngerfristige Trend deutlicher hervortritt als die jĂ€hrlichen AusschlĂ€ge.

Hide code cell content

def plot_adjective_trends_moving_avg_plotly(
    adj_df: pd.DataFrame,
    top_adjectives: list,
    noun_input,
    window_years: int = 10,
    n_plot: int = 8,
    value_col: str = "rel_freq",
    show_points: bool = True,
):
    """
    Plotly lineplot per year for adjective dependents + centered moving average window.

    Expects adj_df to have at least: year, adjective, count, noun_count
    If value_col (default: rel_freq) is missing, it will be computed as (count / noun_count) * 100.
    """

    df = adj_df.copy()

    # --- Ensure year is integer year (avoid datetime nanoseconds weirdness) ---
    if "DC.date" not in df.columns:
        raise ValueError("adj_df must contain a 'DC.date' column.")

    if pd.api.types.is_datetime64_any_dtype(df["DC.date"]):
        df["DC.date"] = df["DC.date"].dt.year
    else:
        df["DC.date"] = pd.to_numeric(df["DC.date"], errors="coerce")

    df = df.dropna(subset=["DC.date"])
    df["DC.date"] = df["DC.date"].astype(int)

    # --- Compute relative frequency if needed ---
    if value_col not in df.columns:
        if not {"count", "noun_count"}.issubset(df.columns):
            raise ValueError(
                f"adj_df must contain '{value_col}' or both 'count' and 'noun_count'."
            )
        df[value_col] = df.apply(
            lambda row: (row["count"] / row["noun_count"]) * 100 if row["noun_count"] else 0,
            axis=1,
        )

    # --- Filter adjectives ---
    df = df[df["adjective"].isin(top_adjectives)].copy()
    if df.empty:
        raise ValueError("After filtering by top_adjectives, no rows remain.")

    # --- Yearly aggregate (mean across texts) ---
    yearly = (
        df.groupby(["DC.date", "adjective"])[value_col]
          .mean()
          .unstack("adjective")
          .sort_index()
    )

    # --- Moving average on yearly aggregates ---
    moving = yearly.rolling(window=window_years, center=True, min_periods=1).mean()

    # --- Limit to n_plot adjectives (keep original top_adjectives order if possible) ---
    cols_in_data = [a for a in top_adjectives if a in moving.columns]
    cols_to_plot = cols_in_data[:n_plot] if cols_in_data else list(moving.columns)[:n_plot]
    moving_plot = moving[cols_to_plot].copy()

    # --- Build title ---
    if isinstance(noun_input, str):
        title_noun = f'"{noun_input}"'
    else:
        noun_str = ", ".join(noun_input[:3])
        if len(noun_input) > 3:
            noun_str += f", ... ({len(noun_input)} total)"
        title_noun = f"[{noun_str}]"

    # --- Long format for plotly ---
    moving_long = (
        moving_plot.reset_index()
                  .melt(id_vars="DC.date", var_name="adjective", value_name=value_col)
    )

    # --- Plotly line chart ---
    fig = px.line(
        moving_long,
        x="DC.date",
        y=value_col,
        color="adjective",
        markers=show_points,
        title=f"Top {min(n_plot, len(cols_to_plot))} Adjektive – gleitender {window_years}-Jahres-Durchschnitt – {title_noun}",
        labels={
            "DC.date": "Jahr",
            value_col: "Anteil der Nomen-Vorkommen (%)",
            "adjective": "Adjektiv",
        },
    )

    # Make x axis show integer years cleanly (no scientific notation)
    fig.update_xaxes(
        tickmode="linear",
        dtick=10,          # change to 5/1 if you want denser ticks
        tickformat="d",
    )

    fig.update_layout(
        width=1000,
        height=500,
        legend_title_text="",
        hovermode="x unified",
        margin=dict(l=40, r=40, t=70, b=40),
    )

    fig.show()
    return yearly, moving

def plot_adjective_trends_list(adj_df: pd.DataFrame, top_adjectives: list,
                               noun_input: Union[str, List[str]]):
    """
    Create a plot showing adjective modifier trends over time for a noun or noun list.

    Parameters:
    -----------
    adj_df : pd.DataFrame
        DataFrame returned by extract_adjective_modifiers_list()
    top_adjectives : list
        List of adjectives to plot (e.g., from get_top_adjectives_list())
    noun_input : str or list of str
        The noun(s) being analyzed
    show_individual_texts : bool
        If True, show individual text data points with titles; if False, show yearly means only

    Returns:
    --------
    
    .graph_objects.Figure
        The figure object (will display automatically in Jupyter)
    """
    # Filter for only the top adjectives
    filtered_df = adj_df[adj_df['adjective'].isin(top_adjectives)].copy()

    # Calculate relative frequency (per 100 noun occurrences)
    # Handle division by zero
    filtered_df['rel_freq'] = filtered_df.apply(
        lambda row: (row['count'] / row['noun_count']) * 100 if row['noun_count'] > 0 else 0,
        axis=1
    )

    # Create figure
    fig = go.Figure()


    # Show individual texts as scatter points
    for adj in top_adjectives:
        adj_data = filtered_df[filtered_df['adjective'] == adj]

        fig.add_trace(go.Scatter(
            x=adj_data['DC.date'],
            y=adj_data['rel_freq'],
            mode='markers',
            name=adj,
            text=adj_data['DC.title'],
            hovertemplate='<b>%{fullData.name}</b><br>' +
                         '<b>%{text}</b><br>' +
                         'Year: %{x}<br>' +
                         'Frequency: %{y:.2f} per 100 occurrences<br>' +
                         '<extra></extra>',
            marker=dict(size=8, opacity=0.7)
        ))

    # Create title based on input
    if isinstance(noun_input, str):
        title_noun = f'"{noun_input}"'
    else:
        noun_str = ', '.join(noun_input[:3])
        if len(noun_input) > 3:
            noun_str += f', ... ({len(noun_input)} total)'
        title_noun = f'[{noun_str}]'

    # Update layout
    fig.update_layout(
        title=f'Adjective Syntactic Dependents of {title_noun} Over Time',
        xaxis_title='Year',
        yaxis_title=f'Relative Frequency (per 100 noun occurrences)',
        hovermode='closest',
        height=600,
        legend=dict(
            title='Adjectives',
            yanchor="top",
            y=0.99,
            xanchor="right",
            x=0.99
        )
    )

    return fig

Korpus I#

# yearly lineplots + moving average
yearly_1, moving_1 = plot_adjective_trends_moving_avg_plotly(
    adj_df, top_adjs, noun_input=noun, window_years=10, n_plot=8
)

Korpus II:#

# NEW: yearly lineplots + moving average
yearly_2, moving_2 = plot_adjective_trends_moving_avg_plotly(
    adj_df_alt, top_adjs_alt, noun_input=noun, window_years=10, n_plot=8
)

Ausreißertexte und Kontextanalyse#

Welche konkreten Texte sind fĂŒr die AusschlĂ€ge in den Zeitreihen verantwortlich?

Um diese Frage transparent zu beantworten, identifizieren wir sogenannte „Ausreißertexte“ (aber nicht ĂŒber einen komplexen statistischen Test, sondern ĂŒber eine nachvollziehbare ZĂ€hl- und Ranking-Logik). FĂŒr jedes Werk zĂ€hlen wir (1) noun_count, also wie oft das Lemma Luft im Text vorkommt, und (2) count, also wie oft ein bestimmtes Adjektiv (z.B. frisch) in der Dependenzannotation als attributiver Modifikator von Luft erscheint (ADJ → Luft, z.B. frische Luft). Daraus berechnen wir pro Text eine normalisierte Kennzahl rel_freq = (count / noun_count) * 100, also den Anteil der Luft-Vorkommen, die mit diesem Adjektiv modifiziert werden.

Anschließend bestimmen wir fĂŒr jedes Adjektiv zunĂ€chst die Dekaden, in denen der Durchschnitt dieser relativen HĂ€ufigkeit besonders hoch ist (Peak-Dekaden), und listen innerhalb dieser Zeitfenster die Texte mit den höchsten rel_freq-Werten (Top-k) als „Ausreißertexte“ auf. Um instabile Extremwerte zu vermeiden, filtern wir Texte mit sehr wenigen Luft-Belegen (z.B. noun_count < 5) aus. ErgĂ€nzend berechnen wir pro Dekade den Anteil eines einzelnen Textes an allen Adjektiv→Luft-Treffern (share_of_adj_count_in_decade), um sichtbar zu machen, ob ein Ausschlag der Zeitreihe vor allem von wenigen Werken getragen wird. Diese identifizierten Texte werden anschließend mithilfe von KWIC- bzw. Satzkontexten qualitativ ĂŒberprĂŒft, um die semantische Funktion der jeweiligen Konstruktionen genauer einzuordnen.

Was bedeutet KWIC?

KWIC steht fĂŒr Keyword in Context (deutsch etwa „Stichwort im Kontext“) – eine klassische, konkordanzartige Darstellungsform der Korpuslinguistik. Dabei wird der gesuchte Ausdruck – hier die jeweilige Adjektiv–Nomen-Konstruktion wie frische Luft – in der Mitte einer Zeile angezeigt, flankiert von einigen Wörtern unmittelbar davor und danach. So lĂ€sst sich auf einen Blick lesen, in welchem unmittelbaren sprachlichen Umfeld ein Ausdruck tatsĂ€chlich vorkommt.

Der Vorteil: Wir können die Treffer nicht nur zĂ€hlen, sondern ihre konkrete Verwendung im Satz nachlesen und ihre Bedeutung so qualitativ einordnen. Reicht der enge KWIC-Ausschnitt fĂŒr die Interpretation nicht aus, ziehen wir ergĂ€nzend den grĂ¶ĂŸeren Satzkontext heran.

Hide code cell content

# --- small detokenizer for KWIC left/right contexts ---
_punct_fix = re.compile(r"\s+([.,;:!?])")

def detok(tokens):
    """Join tokens with spaces and fix spacing before punctuation."""
    return _punct_fix.sub(r"\1", " ".join(tokens)).strip()


def enrich_adj_df_with_decade_and_relfreq(adj_df: pd.DataFrame, metadata_df: pd.DataFrame) -> pd.DataFrame:
    """
    Adds:
      - year_int (int)
      - decade (from metadata)
      - rel_freq = (count / noun_count) * 100
    """
    df = adj_df.copy()

    # year → int
    if pd.api.types.is_datetime64_any_dtype(df["DC.date"]):
        df["year_int"] = df["DC.date"].dt.year
    else:
        df["year_int"] = pd.to_numeric(df["DC.date"], errors="coerce").astype("Int64")

        ()
    meta = metadata_df[["DC.identifier", "decade"]].copy()
    df = df.merge(meta, left_on="filename", right_on="DC.identifier", how="left").drop(columns=["DC.identifier"])

    # rel_freq per text
    df["rel_freq"] = df.apply(
        lambda r: (r["count"] / r["noun_count"]) * 100 if r["noun_count"] else 0,
        axis=1,
    )
    return df


def peak_decades_for_adjective(
    df_enriched: pd.DataFrame,
    adjective: str,
    metric: str = "rel_freq",
    top_n: int = 3,
    min_noun_count: int = 5,
) -> pd.DataFrame:
    """
    Returns the decades where an adjective is strongest (by decade mean of metric),
    filtering out texts with very few noun occurrences (min_noun_count).
    """
    sub = df_enriched[(df_enriched["adjective"] == adjective) & (df_enriched["noun_count"] >= min_noun_count)].copy()
    if sub.empty:
        return pd.DataFrame(columns=["decade", "decade_mean", "n_texts"])

    dec = (
        sub.groupby("decade")[metric]
           .agg(decade_mean="mean", n_texts="count")
           .reset_index()
           .sort_values("decade_mean", ascending=False)
           .head(top_n)
    )
    return dec


def top_outlier_texts(
    df_enriched: pd.DataFrame,
    adjective: str,
    decades: list,
    metric: str = "rel_freq",
    k: int = 5,
    min_noun_count: int = 5,
) -> pd.DataFrame:
    """
    For a given adjective and a list of decades:
    returns top-k texts per decade (sorted by metric), plus a few diagnostic columns.
    """
    sub = df_enriched[
        (df_enriched["adjective"] == adjective) &
        (df_enriched["decade"].isin(decades)) &
        (df_enriched["noun_count"] >= min_noun_count)
    ].copy()

    if sub.empty:
        return pd.DataFrame(columns=[
            "decade","year_int","DC.title","filename","count","noun_count","rel_freq",
            "share_of_adj_count_in_decade"
        ])

    # share of raw adjective count within that decade (helps detect "one text drives it")
    sub["share_of_adj_count_in_decade"] = sub["count"] / sub.groupby("decade")["count"].transform("sum").replace(0, np.nan)
    #print(sub.head())
    out = (
        sub.sort_values(["decade", metric], ascending=[True, False])
           .groupby("decade", as_index=False)
           .head(k)
           .sort_values(["decade", metric], ascending=[True, False])
    )
    #print(out.head())
    cols = ["decade", "year_int", "DC.title", "filename", "count", "noun_count", "rel_freq", "share_of_adj_count_in_decade"]
    return out[cols]


def kwic_adj_noun(
    spacy_docs: Dict[str, "spacy.tokens.Doc"],
    metadata_df: pd.DataFrame,
    noun_lemma: str,
    adj_lemma: str,
    dep_label: str = "nk",
    window: int = 7,
    max_examples: int = 30,
    file_ids: list | None = None,
    random_state: int = 0,
) -> pd.DataFrame:
    """
    Extract KWIC lines for cases where adj_lemma is a dependent adjective (dep_label)
    of noun_lemma.

    Returns a dataframe with left / keyword / right + sentence + metadata.
    """
    noun_lemma = noun_lemma.lower()
    adj_lemma = adj_lemma.lower()

    meta = metadata_df.set_index("DC.identifier")[["DC.title", "DC.date", "decade", "lastname", "firstname"]]

    rows = []
    for file_id, doc in spacy_docs.items():
        if file_ids is not None and file_id not in file_ids:
            continue
        if file_id not in meta.index:
            continue

        m = meta.loc[file_id]
        year_int = int(m["DC.date"])

        for token in doc:
            if token.pos_ == "NOUN" and token.lemma_.lower() == noun_lemma:
                for child in token.children:
                    if child.pos_ == "ADJ" and child.dep_ == dep_label and child.lemma_.lower() == adj_lemma:
                        i = token.i
                        left = detok([t.text for t in doc[max(0, i - window): i]])
                        right = detok([t.text for t in doc[i + 1: i + 1 + window]])

                        rows.append({
                            "left context": left,
                            "keyword": token.text,
                            "right context": right,
                            "modifier": child.text,
                            "DC.title": m["DC.title"],
                            "author": f'{m["firstname"]} {m["lastname"]}'.strip(),
                            "decade": int(m["decade"]),
                            "DC.date": year_int,
                            "filename": file_id,
                            "sentence": token.sent.text.strip() if token.sent is not None else ""
                        })

    df = pd.DataFrame(rows)
    if df.empty:
        return df

    # sample if too many (keeps notebook readable)
    if len(df) > max_examples:
        df = df.sample(n=max_examples, random_state=random_state)

    return df.sort_values(["decade", "DC.date", "DC.title"]).reset_index(drop=True)

Hide code cell content

# --- KORPUS I ---
adj_df_enriched_1 = enrich_adj_df_with_decade_and_relfreq(adj_df, metadata_df)
# choose which adjectives to inspect (use the ones you plotted)
adjs_to_inspect_1 = top_adjs[:8]  # adjust if you want more/less

all_outliers_1 = []
all_kwic_1 = []

for adj in adjs_to_inspect_1:
    peaks = peak_decades_for_adjective(
        adj_df_enriched_1,
        adjective=adj,
        metric="rel_freq",
        top_n=2,            # take the 2 strongest decades
        min_noun_count=5,   # avoid extreme ratios from very few Luft occurrences
    )

    peak_decades = peaks["decade"].tolist()
    outliers = top_outlier_texts(
        adj_df_enriched_1,
        adjective=adj,
        decades=peak_decades,
        metric="rel_freq",
        k=5,                # top 5 texts per decade
        min_noun_count=5,
    )

    outliers["adjective"] = adj
    all_outliers_1.append(outliers)

    # KWIC only for the outlier filenames (keeps it small and interpretable)
    outlier_files = outliers["filename"].unique().tolist()
    kw = kwic_adj_noun(
        annotated_docs, metadata_df,
        noun_lemma=noun, adj_lemma=adj,
        dep_label="nk",
        window=7,
        max_examples=25,
        file_ids=outlier_files,
        random_state=0
    )
    if not kw.empty:
        kw["adjective"] = adj
        all_kwic_1.append(kw)

outliers_table_1 = pd.concat(all_outliers_1, ignore_index=True) if all_outliers_1 else pd.DataFrame()
kwic_table_1 = pd.concat(all_kwic_1, ignore_index=True) if all_kwic_1 else pd.DataFrame()

outliers_table_1.to_csv(interm_data_synt_ngrams_dir / "outliers_luft_method1.csv", index=False)
kwic_table_1.to_csv(interm_data_synt_ngrams_dir / "kwic_luft_method1.csv", index=False)
metadata_df.columns
Index(['lastname', 'firstname', 'DC.title', 'DC.date', 'volume',
       'DC.identifier', 'decade'],
      dtype='object')

Hide code cell content

outliers_table_1 = pd.read_csv(interm_data_synt_ngrams_dir / "outliers_luft_method1.csv")
kwic_table_1 = pd.read_csv(interm_data_synt_ngrams_dir / "kwic_luft_method1.csv")

Die folgende Tabelle listet die identifizierten Ausreißertexte fĂŒr die jeweiligen Adjektiv–Nomen-Konstruktionen auf, also jene Werke, die maßgeblich zu den beobachteten AusschlĂ€gen in den Zeitreihen beitragen (in Korpus I).

show(outliers_table_1)
Loading ITables v2.6.1 from the internet... (need help?)

Die KWIC-Ansicht zeigt ausgewĂ€hlte Satzkontexte der Adjektiv–Nomen-Konstruktionen aus diesen Ausreißertexten und ermöglicht eine qualitative Einordnung ihrer semantischen Verwendung.

show(kwic_table_1)
Loading ITables v2.6.1 from the internet... (need help?)

Hide code cell content

# --- KORPUS II ---
adj_df_enriched_2 = enrich_adj_df_with_decade_and_relfreq(adj_df_alt, metadata_df_alt)

adjs_to_inspect_2 = top_adjs_alt[:8]

all_outliers_2 = []
all_kwic_2 = []

for adj in adjs_to_inspect_2:
    peaks = peak_decades_for_adjective(
        adj_df_enriched_2,
        adjective=adj,
        metric="rel_freq",
        top_n=2,
        min_noun_count=5,
    )
    peak_decades = peaks["decade"].tolist()

    outliers = top_outlier_texts(
        adj_df_enriched_2,
        adjective=adj,
        decades=peak_decades,
        metric="rel_freq",
        k=5,
        min_noun_count=5,
    )

    outliers["adjective"] = adj
    all_outliers_2.append(outliers)

    outlier_files = outliers["filename"].unique().tolist()
    kw = kwic_adj_noun(
        annotated_docs, metadata_df_alt,
        noun_lemma=noun, adj_lemma=adj,
        dep_label="nk",
        window=7,
        max_examples=25,
        file_ids=outlier_files,
        random_state=0
    )
    if not kw.empty:
        kw["adjective"] = adj
        all_kwic_2.append(kw)

outliers_table_2 = pd.concat(all_outliers_2, ignore_index=True) if all_outliers_2 else pd.DataFrame()
kwic_table_2 = pd.concat(all_kwic_2, ignore_index=True) if all_kwic_2 else pd.DataFrame()

outliers_table_2.to_csv(interm_data_synt_ngrams_dir / "outliers_luft_method2.csv", index=False)
kwic_table_2.to_csv(interm_data_synt_ngrams_dir / "kwic_luft_method2.csv", index=False)

Hide code cell content

outliers_table_2 = pd.read_csv(interm_data_synt_ngrams_dir / "outliers_luft_method2.csv")
kwic_table_2 = pd.read_csv(interm_data_synt_ngrams_dir / "kwic_luft_method2.csv")

Die folgende Tabelle listet die identifizierten Ausreißertexte fĂŒr die jeweiligen Adjektiv–Nomen-Konstruktionen auf, also jene Werke, die maßgeblich zu den beobachteten AusschlĂ€gen in den Zeitreihen beitragen (in Korpus II).

show(outliers_table_2)
Loading ITables v2.6.1 from the internet... (need help?)

Die KWIC-Ansicht zeigt ausgewĂ€hlte Satzkontexte der Adjektiv–Nomen-Konstruktionen aus diesen Ausreißertexten und ermöglicht eine qualitative Einordnung ihrer semantischen Verwendung.

show(kwic_table_2)
Loading ITables v2.6.1 from the internet... (need help?)

5.5.7. Diskussion der syntaktischen N-Gramm-Analyse#

Die syntaktische N-Gramm-Analyse verschiebt den Blick von der bloßen HĂ€ufigkeit des Begriffs Luft hin zur Frage, wie ĂŒber Luft gesprochen wird – also welche Adjektive als Modifikatoren in Konstruktionen wie frische Luft, reine Luft oder freie Luft auftreten. Über beide Stichproben hinweg zeigt sich, dass einige Modifikatoren sehr stabil und dominant sind – insbesondere frisch (und in Teilen auch frei).

Offensichtlich spiegeln sich in dieser Liste der Adjektive keinerlei Anzeichen fĂŒr schlechte LuftqualitĂ€t wider. Vielmehr deutet die Dominanz positiv konnotierter Adjektive wie frisch, rein und frei darauf hin, dass die Literatur eher in jene Richtung reagiert, die wir in der Operationalisierung als utopischen Gegenentwurf beschrieben haben – mit einer herausgehoben positiven Semantik von „Luft”.