<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Clement |</title><link>https://clementgodbarge.com/de/authors/clement/</link><atom:link href="https://clementgodbarge.com/de/authors/clement/index.xml" rel="self" type="application/rss+xml"/><description>Clement</description><generator>HugoBlox Kit (https://hugoblox.com)</generator><language>de-de</language><lastBuildDate>Sun, 06 Sep 2026 00:00:00 +0000</lastBuildDate><image><url>https://clementgodbarge.com/media/authors/clement_hu_3c9b888d0ca9e974.webp</url><title>Clement</title><link>https://clementgodbarge.com/de/authors/clement/</link></image><item><title>Der Zaun, nicht das Feuer</title><link>https://clementgodbarge.com/de/post/fence-not-fire/</link><pubDate>Sun, 06 Sep 2026 00:00:00 +0000</pubDate><guid>https://clementgodbarge.com/de/post/fence-not-fire/</guid><description>&lt;p&gt;In einer Lagerhalle in North Las Vegas betreibt Amazon eine Maschine, die gebrauchten Büchern den Rücken abschneidet. Die losen Blätter wandern durch einen Scanner, das Papier danach in die Altpapierpresse. Die
sah darin eine Bücherverbrennung unserer Tage und ließ kein Klischee aus: Anspielungen auf Savonarola, Symbolfotos vermeintlich seltener Bücher und, versteht sich, der Scheiterhaufen auf dem Berliner Opernplatz. Die seriösen Blätter blieben erwartungsgemäß kühler, ließen denselben Vergleich aber im Raum stehen. Bei aller Entrüstung gehen diese Artikel mit der KI-Industrie erstaunlich schonend um. Wer soll über das Wissen verfügen, das da gescannt wird? Diese Frage muss warten, bis wir den Unfug von der Bücherverbrennung abgeräumt haben.&lt;/p&gt;
&lt;h2 id="ein-scanner-ist-kein-scheiterhaufen"&gt;Ein Scanner ist kein Scheiterhaufen&lt;/h2&gt;
&lt;p&gt;Dass ein physisches Exemplar zerstört wird, macht destruktives Scannen noch lange nicht zum modernen Gegenstück von Savonarolas Scheiterhaufen oder der Bücherverbrennung der Nazis. Jene Akte bezogen ihren Sinn daraus, was verdammt wurde und weshalb. Der arme Mönch Savonarola, der in jede Debatte über Bücherverbrennungen hineingezerrt wird, forderte die Leute auf, einen Teil ihres Besitzes als öffentlichen Bußakt zu verbrennen. Die Scheiterhaufen der Nazis inszenierten eine Verstoßung anderer Art: Wer die Bücher öffentlich verbrannte, erklärte damit, dass ihre Verfasser im deutschen Kulturleben nichts mehr zu suchen hätten. In beiden Fällen war die Zerstörung eine Geste. Destruktives Scannen, in der Digitalisierung ein gängiges Verfahren, dient einem anderen Zweck: Das Exemplar wird geopfert, damit sein Inhalt bleibt. Das Buch wird vernichtet, der Text entmaterialisiert. Wer nach &lt;em&gt;Fahrenheit 451&lt;/em&gt; greift, möge sich erinnern, dass Bradburys Feuerwehrleute den Text nicht für später aufhoben.&lt;/p&gt;
&lt;p&gt;
schürte die Aufregung, indem es „seltene Bücher“ in die Schlagzeile hob – eine Formel, die andere Medien brav nachbeteten. Dabei sagte ein Buchhändler, den die Recherche selbst zitiert, diese Großbestellungen hätten
; es geht also überwiegend um Ausgaben, die seit Einführung der ISBN um 1970 erschienen sind. Das ist die Ware der Flohmärkte und Wohltätigkeitsläden, die oft schon beim nächsten Ausmisten im Altpapier landet. Bevor man die Kulturkatastrophe ausruft, könnte man in den Bibliothekskatalog schauen: Genau für solche Publikationen gibt es Pflichtexemplarbibliotheken. Zugegeben, eine ISBN bürgt nicht für ein erhaltenes Pflichtexemplar – aber Knappheit auf dem Gebrauchtmarkt beweist auch nicht, dass ein Text verschwunden ist.&lt;/p&gt;
&lt;p&gt;Beim Einstampfen geht das physische Exemplar verloren, mit allen Widmungen und Marginalien. Exemplare mit historisch bedeutsamen Anmerkungen oder Provenienzen sollten erkannt und bewahrt werden, am besten, bevor sie auf dem Gebrauchtmarkt landen. Man darf sich auch sorgen, dass die gedruckten Exemplare vergriffener Titel knapper werden. Dann aber müsste man ebenso fragen, warum die Rechteinhaber sie weder nachdrucken noch den Zugang zu bereits vorhandenen digitalen Faksimiles freigeben. Forschende kennen den Ärger: Google Books findet die gesuchte Stelle und zeigt dann einen Schnipsel aus einem Buch, das man weder neu kaufen noch online lesen kann. Hier gibt es Verluste, über die sich streiten lässt. Aus einem Scanner machen sie keinen Nazi-Scheiterhaufen.&lt;/p&gt;
&lt;p&gt;Der Buchhandel wiederum stampft unverkaufte Bücher seit jeher routinemäßig ein. Allein in Frankreich wurden
, rund 60 Prozent dessen, was als Remittenden an die Auslieferungen zurückging. Das nennt man Lagerbereinigung. Überschüssige Exemplare und rare Gebrauchttitel werfen je eigene Fragen des Zugangs auf; Papier zu vernichten ist aber für sich genommen weder Zensur noch Tyrannei.&lt;/p&gt;
&lt;h2 id="mehr-bücher-bessere-ki"&gt;Mehr Bücher, bessere KI?&lt;/h2&gt;
&lt;p&gt;Dass KI-Unternehmen Bücher kaufen und scannen, ist in Wahrheit eine gute Nachricht. Eine Technologie, der man ständig ihr flaches Verständnis menschlicher Kultur vorhält, eignet sich mehr davon an – man hätte erwarten dürfen, dass die Wissenschaft das begrüßt.&lt;/p&gt;
&lt;p&gt;Das Web ist ein dürftiger Ersatz für das aufgehäufte Schriftgut einer Sprache. Ein großer Teil ihres aufgezeichneten Lebens, von Romanen und Memoiren bis zu populären Liedern und transkribierten Gesprächen, hat den Weg vom Druck ins Netz nie gefunden. Viele dieser Bücher haben ihre Verlage überlebt. Sie in Trainingsdaten aufzunehmen zählt dort am meisten, wo sonst wenig vorhanden ist. Ein paar englische Bücher mehr bringen vielleicht geringfügige Verbesserungen; in einer schwach vertretenen Sprache können dieselben Bücher den Unterschied zwischen einem brauchbaren und einem unbrauchbaren System ausmachen. Ob diese Werkzeuge in unsere öffentlichen Dienste oder in unseren Alltag gehören, ist eine Frage der öffentlichen Debatte. Wo immer wir uns aber für sie entscheiden, sollten wir sie in unserer eigenen Sprache benutzen können.&lt;/p&gt;
&lt;p&gt;Was sprachlich auf dem Spiel steht, zeigen die aus Spanien und den Niederlanden gemeldeten Bestellungen. Im Mai berichtete
von einem Buchhändler in Badalona, der wiederholt Bestellungen erhielt, vor allem für katalanische Sachbücher: Geschichtswerke, technische Handbücher, alte Tagungsbände. Im August meldeten niederländische Medien eine Anfrage an De Slegte über
. Die Sprache dieser Bücher verdient mindestens so viel Aufmerksamkeit wie das Schicksal ihrer Einbände. Von der Daily Mail mag das zu viel verlangt sein; aber auch die nüchterneren Blätter hatten zu den betroffenen Sprachen wenig zu sagen.&lt;/p&gt;
&lt;p&gt;Auch Lizenzverträge mit großen Verlagen können wertvolles Material liefern, doch deren digitale Kataloge decken nur einen Bruchteil dessen ab, was je gedruckt wurde. Bücher, die nie digitalisiert wurden oder deren Rechte der Verlag nicht mehr hält, gehören nicht zum Angebot. Selbst der großzügigste Lizenzvertrag kann nicht für die Geschichte des Verlagswesens einstehen, geschweige denn für die Geschichte einer Kultur. Gebrauchte Exemplare zu kaufen ist ein Weg, über diese kommerziellen Grenzen hinauszureichen.&lt;/p&gt;
&lt;h2 id="diebstahl-ist-kein-argument"&gt;„Diebstahl“ ist kein Argument&lt;/h2&gt;
&lt;p&gt;Von „Diebstahl“ zu reden hilft ebenso wenig. Im Juni 2025 befanden zwei US-Bezirksgerichte, dass die Nutzung von Büchern zum Training von Sprachmodellen in den ihnen vorliegenden Fällen unter Fair Use fällt. In
hob das Gericht den transformativen Charakter des Trainings hervor: Die Bücher dienten dazu, ein System zu bauen, das neuen Ausdruck hervorbringen kann. Modelle können sich Passagen merken, doch ein Buch zum Training zu verwenden macht nicht den ganzen Text auf Abruf verfügbar. Umgekehrt erledigt das Fehlen wörtlicher Wiedergabe nicht jeden Einwand. In
warnte der Richter, KI-generierte Werke könnten den Markt überschwemmen, und Belege für einen solchen Schaden könnten eine Fair-Use-Verteidigung zu Fall bringen; nur hatten diese Kläger für einen solchen Schaden an ihren eigenen Werken keine belastbaren Belege beigebracht. Keines der beiden Urteile stellt den KI-Unternehmen einen Freibrief aus oder entscheidet den ethischen Streit. Beide verlangen von uns zu unterscheiden, wie Bücher beschafft, wie Kopien aufbewahrt werden und was das Training mit ihnen anstellt. Wer das alles „Diebstahl“ nennt, lässt diese Fragen offen.&lt;/p&gt;
&lt;p&gt;Nebenbei liefert das Anthropic-Urteil auch die Begründung für die Guillotine. Das Gericht billigte die Digitalisierung gekaufter Exemplare und verwarf die Anhäufung raubkopierter Bücher in einer dauerhaften Bibliothek, für die das Unternehmen später
. Die Digitalisierung ging unter anderem deshalb durch, weil jedes gedruckte Exemplar bei der Umwandlung zerstört wurde: Die digitale Kopie trat an seine Stelle und blieb im Haus. Eben jene Zerstörung, die manche so empört, half Anthropic zu belegen, dass sein Digitalisierungsprogramm Fair Use war. Kaufen, scannen, entsorgen – das war in diesem Fall ein rechtmäßiger Weg. Die Guillotine ist hier ein Werkzeug der Rechtstreue. Exemplare zu kaufen löst das Problem der Beschaffung; das Recht, das entstandene Korpus weiterzugeben, verschafft es für sich genommen niemandem.&lt;/p&gt;
&lt;p&gt;Es gibt gute Gründe, sich eine KI zu wünschen, die aus mehr Sprachen, mehr Forschung und mehr von jener Welt schöpft, die es vor dem Internet gab. Diese Gründe verschwinden nicht, nur weil ein Unternehmen, das wir nicht mögen, darin ein Geschäft entdeckt hat.&lt;/p&gt;
&lt;h2 id="geliehene-empörung"&gt;Geliehene Empörung&lt;/h2&gt;
&lt;p&gt;Zurück also zur Daily Mail. Ihr Artikel gehört zu
, einer Kampagne von Zeitungseigentümern und Verlagen, die
für KI anstreben. Zwei bequeme Gleichsetzungen leisten die Arbeit: Big Tech steht für KI, die Rechteinhaber stehen für die britische Kreativität. Die Leser sollen die Kultur verteidigen, während die Verlage die Konditionen ihres Verkaufs aushandeln. Forschende, die die Geschichte weiterreichen, dürfen sich fragen, wessen Sache ihre Empörung dient.&lt;/p&gt;
&lt;p&gt;Big Tech und die
streiten um die Pacht, aber gegen den Zaun hat keiner von beiden etwas. Die Geschichte vom einsamen Autor, den ein Technologieriese ausplündert, verdeckt, was teure Lizenzverträge beiden Lagern bescheren: Die Verlage werden bezahlt, und Big Tech bekommt einen Markt, auf dem sich seine kleineren Konkurrenten den Wettbewerb nicht leisten können. Peter Thiel hat die Vorliebe des Silicon Valley unverblümter formuliert:
.&lt;/p&gt;
&lt;p&gt;Lizenzierung muss nicht darauf hinauslaufen. Erschwinglicher, nicht-exklusiver Zugang könnte kleineren Entwicklern helfen. Ein System aber, das jeden Neuling zwingt, mit den großen Rechteinhabern kostspielige Verträge auszuhandeln, macht die Kaufkraft zur Eintrittskarte. Eine Zahlung, die als Zugeständnis an die Kulturwirtschaft daherkommt, erkauft am Ende den Schutz vor künftigen Konkurrenten.&lt;/p&gt;
&lt;h2 id="ki-gehört-nicht-big-tech"&gt;KI gehört nicht Big Tech&lt;/h2&gt;
&lt;p&gt;Dahinter steckt ein tieferes Problem. Zu viel KI-Kritik hält die größten kommerziellen Anbieter für das ganze Feld. Die Produkte beherrschen die Schlagzeilen; Forschung und Entwicklung jenseits dieser Konzerne geraten aus dem Blick. Ein nützlicheres Missverständnis könnte sich Big Tech kaum wünschen: Sein Anspruch, das Feld zu besitzen, wird zur Prämisse der Kritik, die sich gegen ihn richtet. Das Monopol ist noch nicht unter Dach und Fach. Wer so tut, als wäre es das, erweist diesen Unternehmen einen gewaltigen Gefallen.&lt;/p&gt;
&lt;p&gt;Open-Source-KI erlaubt es, Systeme zu bauen und anzupassen, die der Vielfalt von Sprachen, Kulturen und Ausdrucksformen besser gerecht werden. Für die Länder Europas, Afrikas und Lateinamerikas ebenso wie für Südkorea, Japan und Indien ist das eine handfeste Grundlage technologischer und kultureller Souveränität: selbst zu bestimmen, wie Systeme arbeiten, welchen Sprachen sie dienen und wo sie zum Einsatz kommen. Ob man KI nutzt und wozu, sollte eine öffentliche Entscheidung bleiben – keine, die die Abhängigkeit von einem ausländischen Lieferanten diktiert.&lt;/p&gt;
&lt;p&gt;Doch die Freiheit, ein System zu verändern, ist wenig wert ohne die Mittel dazu. Unabhängige Arbeit braucht Fachwissen, Rechenkapazität und Zugang zu Trainingsmaterial. Womit wir wieder bei den Büchern wären. Muss jedes Forschungsteam und jede öffentliche Einrichtung eigene Verlagsverträge aushandeln oder eine eigene Privatbibliothek zusammentragen, bleibt Unabhängigkeit ein Privileg derer, die sie sich leisten können.&lt;/p&gt;
&lt;h2 id="die-bücher-sind-längst-da"&gt;Die Bücher sind längst da&lt;/h2&gt;
&lt;p&gt;Bibliotheken und Archive haben über Generationen genau das Material gesammelt, das diese Systeme brauchen. Ihre Bestände gibt es, weil der Zugang zum Wissen das kommerzielle Interesse an seinem Verkauf überdauern soll. Vieles ist längst gescannt:
hält rund neunzehn Millionen digitalisierte Bände aus Forschungsbibliotheken, viele davon noch urheberrechtlich geschützt. Eine Bibliothek scannt ein Buch und behält es; eine Guillotine braucht dort niemand. HathiTrust
, hat aber zugleich
angekündigt, ein Projekt, das nichtkommerzieller KI-Forschung und -Entwicklung Zugang zum Korpus verschaffen soll. Auch zu diesen Bedingungen blieben manche unabhängigen Entwickler außen vor.&lt;/p&gt;
&lt;p&gt;Nur: Wer die Bücher besitzt, darf ihren geschützten Inhalt deshalb noch nicht als Trainingskorpus verbreiten. Das
erlaubt Forschungseinrichtungen und Bibliotheken das Text- und Data-Mining rechtmäßig zugänglicher Werke zu wissenschaftlichen Zwecken und gestattet ein weiter gefasstes Mining dort, wo sich die Rechteinhaber ihre Rechte nicht vorbehalten haben.
: Seine Mining-Ausnahme gilt für nichtkommerzielle Forschung und beschränkt die Weitergabe von Kopien. Keiner der beiden Rechtsrahmen gibt Bibliotheken ein allgemeines Recht, ihre geschützten Bestände zu teilen, damit andere darauf aufbauen.&lt;/p&gt;
&lt;p&gt;Man könnte auch neu überdenken, wie lange Rechteinhaber die maschinelle Nutzung von Büchern kontrollieren sollten. Arzneimittelpatente bieten einen Vergleichsmaßstab: Ihre übliche Laufzeit von zwanzig Jahren ist weit kürzer als der Urheberrechtsschutz, der die Lebenszeit des Autors und siebzig Jahre darüber hinaus währt. Könnten Bücher, sagen wir, zwanzig Jahre nach ihrem Erscheinen ohne Lizenzgebühren für Text- und Data-Mining freigegeben werden, während die Rechte an Neuauflage und Verkauf geschützt bleiben? Das Recht eines Autors zu schützen, sein Buch zu verkaufen, muss nicht heißen, über Generationen hinweg jede Verwendung seines Inhalts zu kontrollieren.&lt;/p&gt;
&lt;p&gt;Vor zwei Jahren habe ich in
dafür plädiert, Kulturerbedaten als öffentliches Gut zu behandeln. Der Staat sollte Bibliotheken und Archive dafür ausstatten, ihre Bestände zu digitalisieren, zu transkribieren und zu dokumentieren, und ihnen die rechtliche Befugnis geben, die entstehenden Korpora anderen zur Verfügung zu stellen. Big Tech könnte sich über eine eigens eingerichtete Abgabe an der Rechnung beteiligen.&lt;/p&gt;
&lt;p&gt;Öffentliche Förderung sollte mit veröffentlichten Sammlungsrichtlinien und Zugangsregeln einhergehen, die akademische wie kommerzielle Arbeit abdecken – ohne Exklusivverträge, ohne Vorzugszugang für Geldgeber. Zugang zu Trainingszwecken muss nicht die uneingeschränkte Weiterverbreitung geschützter Bücher bedeuten. Die Autorinnen und Autoren sollten die öffentliche Regelung mitgestalten, auch was Einwilligung, Vergütung und die Konkurrenz zu ihren eigenen Werken angeht. Freier Zugang für die Nutzer schließt eine öffentlich finanzierte Vergütung der Autoren nicht aus; die
, die Autoren aus öffentlichen Mitteln bezahlt, wenn ihre Bücher ausgeliehen werden, ist dafür ein Präzedenzfall. Um das Feuer ging es nie. Um den Zaun geht es.&lt;/p&gt;</description></item><item><title>Liebe Herausgeber: Wenn Sie meine Stimme wollen, geben Sie mir meine Sprache zurück</title><link>https://clementgodbarge.com/de/post/dear-editors/</link><pubDate>Thu, 27 Aug 2026 00:00:00 +0000</pubDate><guid>https://clementgodbarge.com/de/post/dear-editors/</guid><description>&lt;p&gt;Kein Tag ohne eine Zeitschrift, die ihre KI-Richtlinie in die Welt posaunt. Diesmal ist es &lt;em&gt;Progress in Human Geography&lt;/em&gt;: Deren Herausgeber haben
veröffentlicht, in der sie warnen, KI als Ersatz für das eigene Lesen, Denken und Schreiben zu benutzen sei „ein Verstoß gegen die wissenschaftliche Ethik, einem Plagiat vergleichbar“. Aufsätze, bei denen ein solcher Verstoß festgestellt wird, „können zurückgezogen werden“; im günstigsten Fall werden sie korrigiert, mit einer in der Zeitschrift abgedruckten Notiz. Die Autorinnen und Autoren, so fügen die Herausgeber hinzu, mögen „sorgfältig erwägen, ob sie ihren Namen mit Widerrufen und Korrekturnotizen in Verbindung gebracht sehen wollen“.&lt;/p&gt;
&lt;p&gt;Bei diesem Satz lohnt es sich zu verweilen. Der Widerruf (die Retraction) ist die schärfste Sanktion, die das wissenschaftliche Publizieren kennt – die Strafe, die sonst Fälschung und Betrug vorbehalten bleibt. Hier wird sie an ein Vergehen geknüpft, das derselbe Leitartikel nicht zu definieren vermag. Es gebe, räumen die Herausgeber ein, „echte Grauzonen“ und „keine klaren Linien, die die Zone der ‚Unverantwortlichkeit‘ abgrenzen“. Durchgesetzt werde die Richtlinie durch „Ermessensentscheidungen, die manche Autoren verärgern könnten, welche ihrerseits beteuern werden, KI nicht über Gebühr genutzt zu haben“ – die eigene Erklärung kann also überstimmt werden. Es folgt der Rat, „sicher in der Zone der ‚Verantwortlichkeit‘“ zu bleiben; und zur Sicherheit rät man nur, wo Gefahr droht. Menschen dafür zu bestrafen, dass sie eine Linie überschreiten, die man eingestandenermaßen nicht ziehen kann, ergibt nur dann Sinn, wenn Furcht das Regierungsmittel sein soll. Merken Sie sich das für später.&lt;/p&gt;
&lt;h2 id="der-vorwand-der-stimme"&gt;Der Vorwand der Stimme&lt;/h2&gt;
&lt;p&gt;Wie sieht verantwortungsvolle Nutzung aus? Den Autorinnen und Autoren wird eingeschärft, „große Sorgfalt darauf zu verwenden … die eigene Stimme zu bewahren“. Missbrauch sei es, mit KI „in einer Sprache zu schreiben, die die Autoren selbst normalerweise nie verwenden würden“. Für Muttersprachler leuchtet das ein: Gib dich nicht als etwas aus, was du nicht bist. Für Ausländer aber, die in einer fremden Sprache schreiben müssen, widerspricht sich die Vorschrift selbst. Die Stimme, die die Richtlinie schützen will, ist genau das, was die Regeln der Zeitschrift uns verwehren.&lt;/p&gt;
&lt;p&gt;Nehmen Sie mich als Probe aufs Exempel. Englisch ist meine vierte Sprache – ganz genau die, die ich „normalerweise“ nie verwenden würde. Anglophone Universitäten haben mich darauf gedrillt, es kurz, mit Wegmarken versehen, beinahe mechanisch zu schreiben: den Kernsatz an den Anfang, die Vorbehalte an die vorgesehenen Stellen, die Überleitungen aus der genehmigten Liste. Der Drill hat gewirkt: In meinem Englisch gab es nie eine Stimme, die zu schützen gewesen wäre; sie war das Erste, was weichen musste. Nach der Definition der Herausgeber wäre alles, was ich je auf Englisch geschrieben habe, unzulässiger Gebrauch – mit oder ohne Maschine.&lt;/p&gt;
&lt;h2 id="die-zwickmühle"&gt;Die Zwickmühle&lt;/h2&gt;
&lt;p&gt;Die Herausgeber versichern, sie hätten an uns gedacht: Die Richtlinie erkennt an, dass Nichtmuttersprachler davon profitieren, wenn KI ihr Englisch prüft, ja sogar von deren „Übersetzungs-, Schreib- und Lektoratsdiensten“. Zugleich aber solle sich der Anteil der KI am Schreiben „höchstens auf Lektorat und Korrekturhilfe beschränken“ und dürfe nicht in „große Blöcke KI-geschriebenen Textes“ münden. Ein maschinell übersetzter Aufsatz ist vom ersten bis zum letzten Wort KI-geschrieben; er besteht aus nichts als solchen Blöcken. Das Zugeständnis trägt also nur, wenn Übersetzen kein Schreiben ist. Wo verläuft diese Linie? Sie haben es uns schon gesagt: „keine klaren Linien“.&lt;/p&gt;
&lt;p&gt;Es kommt schlimmer, denn der Verdacht ist nicht nur unfalsifizierbar, er ist auch einseitig geladen. 2023 prüfte ein Team aus Stanford sieben gängige KI-Detektoren an Aufsätzen, die Menschen geschrieben hatten: Im Schnitt stuften die Detektoren 61 % der TOEFL-Aufsätze von Nichtmuttersprachlern als maschinell erzeugt ein, während sie die Aufsätze von Muttersprachlern nahezu fehlerfrei erkannten; ein Detektor markierte 97,8 % des TOEFL-Korpus (
). Der Grund ist lehrreich. Detektoren messen Vorhersagbarkeit, und Englisch als Zweitsprache, auf den Durchschnitt hin geschult, ist per Konstruktion vorhersagbar: das wahrscheinlichste Wort in der wahrscheinlichsten Reihenfolge. Dieselbe Studie fand das Signal auch in echter Forschungsliteratur, nämlich eine geringere sprachliche Variabilität in Konferenzbeiträgen von Erstautoren, die keine Muttersprachler sind. Die Stilmerkmale, die als „KI“ gelesen werden, sind die Merkmale eines kompetenten Zweitsprachen-Englisch – und ein menschliches Ermessensurteil liest dieselben Merkmale wie die Maschine. Die Zwickmühle ist perfekt: Schreibe ich mein eigenes Englisch, sehe ich aus wie eine Maschine; nehme ich die Maschine, verstoße ich gegen ihre Regel.&lt;/p&gt;
&lt;h2 id="die-sprachsteuer"&gt;Die Sprachsteuer&lt;/h2&gt;
&lt;p&gt;Das Paradox wäre harmlos, kämen nicht die Drohungen hinzu. Doch die Drohungen legen ein tieferes, älteres Problem frei, das die Richtlinie nirgends beim Namen nennt: die Einsprachigkeit. Die
verlangen „die größtmögliche internationale Reichweite“ – und auf derselben Seite heißt es: „Die Sprache der Zeitschrift ist Englisch.“&lt;/p&gt;
&lt;p&gt;Was diese Regelung kostet, ist keine Hypothese. In einer Befragung von 908 Umweltwissenschaftlern fanden Amano und Kollegen, dass Nichtmuttersprachler des Englischen bis zu 51 % mehr Zeit für das Schreiben eines Aufsatzes brauchen, dass ihre Manuskripte 2,5-mal so oft abgelehnt und 12,5-mal so oft zur Überarbeitung zurückgeschickt werden – allein aus sprachlichen Gründen (
). Diese Steuer wird erhoben, bevor irgendeine KI-Richtlinie ins Spiel kommt; das Erklärungsformular samt seinen Drohungen ist die Steuerprüfung, die obendrauf kommt.&lt;/p&gt;
&lt;h2 id="fin-dempire"&gt;Fin d’empire&lt;/h2&gt;
&lt;p&gt;Die Einsprachigkeit ist das Axiom, über das niemand spricht. Sie ist ein imperiales Erbe, dem mit der Zeit eine praktische Rechtfertigung zuwuchs: Übersetzen war langsam und teuer, und kein Gremium konnte beurteilen, was es nicht lesen konnte. Nichts davon hält den Fortschritten der maschinellen Übersetzung stand. Auf dem heutigen Stand der Technik kann sie als verlässliche Zwischenschicht zwischen Autoren und Herausgebern dienen.&lt;/p&gt;
&lt;p&gt;Der ideale Ausweg wäre ein menschlicher: Forschende sollten mehr als eine Sprache lesen. Stattdessen ziehen es die anglophonen Universitäten vor, ihre Institute für moderne Fremdsprachen zu schließen. Wohlgemerkt: Diese Schließungen sind ein angloamerikanisches Phänomen; Forschende anderswo konnten sich den Luxus der Einsprachigkeit nie leisten. Und man beachte den Zeitpunkt. Wer ein Sprachinstitut schließt, geht eine Wette ein – darauf, dass Englisch endgültig gewonnen hat und nie wieder etwas Lesenswertes in einer anderen Sprache geschrieben wird. Diese Wette wird zur denkbar falschen Zeit abgeschlossen, und das gleich doppelt. Erstens, weil die maschinelle Übersetzung es zum ersten Mal erlaubt, ganz ohne Lingua franca auszukommen; zweitens, weil die Ordnung, die Englisch zur Selbstverständlichkeit gemacht hat, im Rückzug begriffen ist: Die Anglosphäre kehrt sich nach innen, die Globalisierung ebbt ab, der Freihandel wird in seinen eigenen Mutterländern angefochten, und eine multipolare Welt nimmt Gestalt an, in der sich die lesenswerten Sprachen vervielfachen werden. Die Universitäten bilden Forschende heran, die nur Englisch lesen – für eine Welt, in der Englisch nicht mehr reichen wird. Die Herausgebergremien werden diesen Verlust als Erste zu spüren bekommen.&lt;/p&gt;
&lt;h2 id="ein-test-für-die-herausgeber"&gt;Ein Test für die Herausgeber&lt;/h2&gt;
&lt;p&gt;Wenn ein Gremium klagt, es könne die eigene Stimme seiner Autoren nicht lesen, liegt ein Teil des Problems vielleicht beim Gremium selbst.&lt;/p&gt;
&lt;p&gt;Das ist ein schwerer Vorwurf, und er kommt mit einer ernsthaften Probe. Würde &lt;em&gt;Progress in Human Geography&lt;/em&gt; eine Einreichung auf Französisch, Italienisch oder Japanisch begutachten lassen, der eine maschinell übersetzte englische Fassung beiliegt? Die Richtlinien der Zeitschrift erkennen die „Übersetzungs“-Dienste, die das möglich machen, ja selbst an. Ein Ja erledigt das Problem. Ein Nein verriete uns, was die Richtlinie in Wahrheit schützt.&lt;/p&gt;
&lt;p&gt;So oder so: Die Entscheidung liegt bei den Herausgebern. Zählt die Stimme, wie sie behaupten, dann sollte die Zeitschrift Aufsätze in den Sprachen annehmen, in denen ihre Autoren denken. Zählt sie nicht, dann sollte das Erklärungsformular verschwinden – und die Drohungen mit ihm.&lt;/p&gt;</description></item><item><title>tei-mcp v0.3: TEI kodieren, ohne die Quelle anzutasten</title><link>https://clementgodbarge.com/de/post/tei-mcp-span-locked/</link><pubDate>Tue, 05 May 2026 00:00:00 +0000</pubDate><guid>https://clementgodbarge.com/de/post/tei-mcp-span-locked/</guid><description>&lt;p&gt;Als ich
, ging es darum,
KI-Assistenten das Halluzinieren von TEI-Markup abzugewöhnen. Die Verankerung
im Schema (Schema Grounding) hat einen Teil des Problems gelöst: Mit direktem,
werkzeuggestütztem Zugriff auf die P5-Spezifikation muss das Modell nicht mehr
raten, was ein Element bedeutet oder welche Attribute es zulässt. Die Ausgabe
validiert.&lt;/p&gt;
&lt;p&gt;Nur hat die Halluzination beim TEI-Kodieren zwei Gesichter, und das Schema
erkennt bloß eines davon. Die Validierung gegen die Spezifikation verrät, dass
das &lt;em&gt;Markup&lt;/em&gt; in Ordnung ist; über den &lt;em&gt;Text&lt;/em&gt;, den dieses Markup umschließt,
sagt sie nichts. Und genau dort – im Text selbst – hausen die gefährlicheren
Halluzinationen. Span-locked Composition, das Herzstück von v0.3, ist eigens
dafür gebaut, sie zu unterbinden.&lt;/p&gt;
&lt;details class="print:hidden xl:hidden" &gt;
&lt;summary&gt;Inhaltsverzeichnis&lt;/summary&gt;
&lt;div class="text-sm"&gt;
&lt;nav id="TableOfContents"&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="#die-halluzination-die-dem-schema-entgeht"&gt;Die Halluzination, die dem Schema entgeht&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#span-locked-composition"&gt;Span-locked Composition&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#was-das-ist--und-was-nicht"&gt;Was das ist – und was nicht&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#warum-das-über-tei-hinausweist"&gt;Warum das über TEI hinausweist&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#das-update-beziehen"&gt;Das Update beziehen&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/nav&gt;
&lt;/div&gt;
&lt;/details&gt;
&lt;h2 id="die-halluzination-die-dem-schema-entgeht"&gt;Die Halluzination, die dem Schema entgeht&lt;/h2&gt;
&lt;p&gt;Lassen Sie ein Modell einen französischen Brief aus dem 16. Jahrhundert
kodieren, und Sie bekommen nicht selten ein TEI-Dokument zurück, das tadellos
aussieht. Der Header ist ausgefüllt, die &lt;code&gt;&amp;lt;persName&amp;gt;&lt;/code&gt;-Tags sitzen, die
&lt;code&gt;&amp;lt;dateline&amp;gt;&lt;/code&gt; ist wohlgeformt. Durch &lt;code&gt;validate_document&lt;/code&gt; geschickt, besteht es
die Prüfung.&lt;/p&gt;
&lt;p&gt;Dann vergleichen Sie den Textkörper mit der Quelle.&lt;/p&gt;
&lt;p&gt;Aus &lt;code&gt;mesme&lt;/code&gt; ist &lt;code&gt;même&lt;/code&gt; geworden. Ein Komma ist gewandert. &lt;code&gt;luy&lt;/code&gt; wurde
stillschweigend zu &lt;code&gt;lui&lt;/code&gt; modernisiert. Ein in der Handschrift schwer lesbarer
Satzteil ist zu etwas Glatterem „berichtigt“ worden. Nichts davon war
verlangt, nichts davon wird gemeldet. Das Dokument ist schemavalide – und in
aller Stille falsch.&lt;/p&gt;
&lt;p&gt;In einem archivischen Arbeitsablauf, in dem der kodierte Text zur dauerhaften
Aufzeichnung wird, auf die sich spätere Leser, Suchindizes und Zitate
verlassen, ist das der Fehler, der wirklich zählt. Ein missratenes Tag ist
ärgerlich. Eine modernisierte Schreibung, die fünf Jahre lang niemand
bemerkt, ist eine Textverderbnis.&lt;/p&gt;
&lt;h2 id="span-locked-composition"&gt;Span-locked Composition&lt;/h2&gt;
&lt;p&gt;Die neue Version (v0.3) bringt einen Schutzmechanismus mit, der genau auf
diesen Fehler zielt. Der Anspruch: Halluzinationen im Textkörper sollen nicht
bloß unwahrscheinlich, sondern schon durch die Konstruktion unmöglich sein.&lt;/p&gt;
&lt;p&gt;Die Idee ist einfach: &lt;strong&gt;Das Modell tippt nie Textkörper.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Der Ablauf sieht stattdessen so aus:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Das Modell ruft &lt;code&gt;get_source(&amp;quot;letter_001&amp;quot;)&lt;/code&gt; auf und erhält den Quelltext
als unveränderliche Zeichenkette.&lt;/li&gt;
&lt;li&gt;Für jedes Tag, das es setzen möchte, ruft es
&lt;code&gt;tag_span(&amp;quot;letter_001&amp;quot;, start, end, element_path, attrs)&lt;/code&gt; auf und
registriert damit ein TEI-Element an einem Zeichenbereich über der Quelle.&lt;/li&gt;
&lt;li&gt;Ist es fertig, ruft es &lt;code&gt;compose(&amp;quot;letter_001&amp;quot;)&lt;/code&gt; auf. Der Server verschränkt
die registrierten Tags mit dem ursprünglichen Klartext, rendert das
endgültige TEI und prüft dann &lt;em&gt;Byte für Byte&lt;/em&gt;, ob der reine Textinhalt des
gerenderten Dokuments der Quelle gleicht.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Stimmen die Bytes überein, kommt das Dokument zurück. Wenn nicht – wenn die
Tags des Modells auf irgendeinem Weg einen Textkörper ergeben, der auch nur
um ein einziges Zeichen von der Quelle abweicht –, wirft &lt;code&gt;compose()&lt;/code&gt; einen
Fehler, statt ein verdorbenes Dokument auszuliefern.&lt;/p&gt;
&lt;p&gt;Es gibt in diesem Ablauf keinen Pfad, auf dem das Modell ein TEI-Dokument
erzeugen könnte, dessen Textkörper von der Quelle abweicht. Die Invariante
ist mechanisch, nicht eine Frage des Wohlverhaltens. Sie müssen nicht darauf
vertrauen, dass das Modell nicht halluziniert – nur darauf, dass ein
&lt;code&gt;==&lt;/code&gt;-Vergleich zweier Byte-Strings tut, was er soll.&lt;/p&gt;
&lt;h2 id="was-das-ist--und-was-nicht"&gt;Was das ist – und was nicht&lt;/h2&gt;
&lt;p&gt;Span-locked Composition &lt;strong&gt;ergänzt&lt;/strong&gt; das Schema Grounding; sie ersetzt es
nicht. Die Schema-Grounding-Tools (&lt;code&gt;validate_document&lt;/code&gt;, &lt;code&gt;lookup_element&lt;/code&gt;,
&lt;code&gt;valid_children&lt;/code&gt; und die übrigen der ursprünglichen sechzehn) helfen dem
Modell, &lt;em&gt;valides&lt;/em&gt; TEI zu erzeugen. Span-locked Composition garantiert, dass
der Textkörper in diesem TEI der Quelle &lt;em&gt;treu&lt;/em&gt; bleibt. Ein einsatzreifer
Kodierungsablauf muss auf beiden Achsen bestehen – und beide deckt nun ein
einziger Server ab.&lt;/p&gt;
&lt;p&gt;Ein Allheilmittel ist es freilich nicht. &lt;code&gt;compose()&lt;/code&gt; prüft noch nicht, ob die
registrierten Tags nach einer geladenen ODD-Anpassung zulässig sind; das ist
der nächste Schritt. Registrierte Tags leben im Arbeitsspeicher des Prozesses
und überleben keinen Neustart. Und die Quelldateien müssen von dort aus lesbar
sein, wo der Server läuft. All das lässt sich lösen; nichts davon rührt an der
Kerninvariante.&lt;/p&gt;
&lt;h2 id="warum-das-über-tei-hinausweist"&gt;Warum das über TEI hinausweist&lt;/h2&gt;
&lt;p&gt;Das Muster lässt sich verallgemeinern. Wann immer ein Modell einen Text
annotieren, umformen oder umschließen soll – und wann immer die Unversehrtheit
dieses Textes wichtiger ist als die Gabe des Modells, ihn zu „verbessern“ –,
taugt dieselbe Lösung. Lassen Sie das Modell den Text nicht neu tippen. Lassen
Sie es Anweisungen über dem Text erzeugen, und überlassen Sie es einem
deterministischen Composer, sie unter einer Gleichheitsinvariante anzuwenden.&lt;/p&gt;
&lt;p&gt;Für digitale Editionen im Besonderen verschiebt das die Grenze dessen, was man
einem Modell guten Gewissens überlassen kann. Das Kodieren wird mit einem Mal
zu einer Aufgabe, die sich delegieren lässt, ohne dass man jede Ausgabe von
Hand mit der Quelle abgleichen müsste. Die Maschine übernimmt den öden Teil;
die Editorin prüft das Markup, nicht die Rechtschreibung.&lt;/p&gt;
&lt;h2 id="das-update-beziehen"&gt;Das Update beziehen&lt;/h2&gt;
&lt;p&gt;Wenn tei-mcp bereits installiert ist:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;uvx tei-mcp@latest
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Oder frisch:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;pip install tei-mcp
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Für Span-locked Composition zeigen Sie dem Server ein Verzeichnis mit
Klartext-Quelldateien:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;export&lt;/span&gt; &lt;span class="nv"&gt;TEI_MCP_SPAN_SOURCE_ROOT&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;/path/to/sources
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;uvx tei-mcp
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Der Dateiname ohne Endung wird zur Dokument-ID (&lt;code&gt;letter_001.txt&lt;/code&gt; →
&lt;code&gt;letter_001&lt;/code&gt;).&lt;/p&gt;
&lt;p&gt;Quellcode, vollständige Dokumentation und die Entwurfsnotizen zur Invariante:
&lt;/p&gt;</description></item><item><title>Eine digitale Edition anderer Art</title><link>https://clementgodbarge.com/de/post/cavriana-edition/</link><pubDate>Tue, 24 Mar 2026 00:00:00 +0000</pubDate><guid>https://clementgodbarge.com/de/post/cavriana-edition/</guid><description>&lt;p&gt;Die meisten Primärquellen werden nie veröffentlicht. Und das Modell, mit dem wir dem abhelfen wollen – die drittmittelfinanzierte digitale Edition –, ist zu teuer, zu zentralisiert und zu zerbrechlich, als dass es in der Breite funktionieren könnte. In
lege ich dar, warum ich die kritische Edition von Cavrianas Briefen anders anlege: als digitalisierte Primärquellen, die organisch wachsen, mit minimaler Infrastruktur auskommen, sich selbsttätig warten, offen für Mitarbeit sind und so wenig kosten, dass es gar keiner Förderung bedarf. Es ist ein Plädoyer für Digital Humanities, die auch ohne institutionellen Rückhalt funktionieren.&lt;/p&gt;</description></item><item><title>tei-mcp: TEI P5 für KI-Agenten</title><link>https://clementgodbarge.com/de/post/tei-mcp/</link><pubDate>Sun, 15 Mar 2026 00:00:00 +0000</pubDate><guid>https://clementgodbarge.com/de/post/tei-mcp/</guid><description>&lt;p&gt;Wer schon einmal einen KI-Programmierassistenten TEI-XML hat schreiben lassen,
weiß, dass dabei Fehler passieren. Elemente stehen, wo sie nicht hingehören;
Attribute werden frei erfunden; Verschachtelungsregeln bleiben unbeachtet. Das
Modell hat eine ungefähre Vorstellung davon, wie TEI aussieht – von der
Spezifikation selbst weiß es nichts Verlässliches.&lt;/p&gt;
&lt;p&gt;tei-mcp schafft hier Abhilfe: Es gibt KI-Agenten direkten, werkzeuggestützten
Zugriff auf die TEI-P5-Guidelines.&lt;/p&gt;
&lt;details class="print:hidden xl:hidden" &gt;
&lt;summary&gt;Inhaltsverzeichnis&lt;/summary&gt;
&lt;div class="text-sm"&gt;
&lt;nav id="TableOfContents"&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="#was-ist-mcp"&gt;Was ist MCP?&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#was-tei-mcp-leistet"&gt;Was tei-mcp leistet&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#warum-das-zählt"&gt;Warum das zählt&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#erste-schritte"&gt;Erste Schritte&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/nav&gt;
&lt;/div&gt;
&lt;/details&gt;
&lt;h2 id="was-ist-mcp"&gt;Was ist MCP?&lt;/h2&gt;
&lt;p&gt;Das
(MCP) ist ein
offener Standard, über den sich KI-Anwendungen mit externen Datenquellen und
Werkzeugen verbinden. Man kann es sich als USB-Anschluss für KI vorstellen:
ein einziges Protokoll, mit dem sich jeder kompatible Client – Claude, Cursor,
Windsurf und andere – an spezialisierte Dienste anstöpseln lässt.&lt;/p&gt;
&lt;p&gt;Ein MCP-Server stellt &lt;em&gt;Tools&lt;/em&gt; bereit, die die KI im Laufe eines Gesprächs
aufrufen kann. Statt auf angelerntes Trainingswissen zu vertrauen, kann das
Modell eine aktuelle, maßgebliche Quelle befragen.&lt;/p&gt;
&lt;h2 id="was-tei-mcp-leistet"&gt;Was tei-mcp leistet&lt;/h2&gt;
&lt;p&gt;tei-mcp liest die ODD-Spezifikation von TEI P5 ein und stellt 16 Tools bereit,
die die häufigsten Fragen beantworten, die sich beim Edieren und Kodieren
stellen:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Was ist dieses Element?&lt;/strong&gt; Nachschlagen von Elementen, Klassen, Makros und
Modulen nach Namen, ohne Rücksicht auf Groß- und Kleinschreibung und mit
Vorschlägen bei Tippfehlern.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Welche Attribute nimmt es?&lt;/strong&gt; Auflösen der Attribute über die gesamte
Klassenhierarchie – zuerst die lokalen, dann der Reihe nach die geerbten.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Was darf hinein?&lt;/strong&gt; Entfalten von Inhaltsmodellen zu strukturierten Bäumen
oder eine flache Liste der zulässigen Kindelemente.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Darf dieses Element hierhin?&lt;/strong&gt; Prüfen der Eltern-Kind-Verschachtelung oder
Nachverfolgen der Erreichbarkeit durch die gesamte Elementhierarchie.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Ist mein Dokument valide?&lt;/strong&gt; Validieren einer TEI-XML-Datei gegen die
Spezifikation: Inhaltsmodelle, Attributwerte, geschlossene Wertelisten,
Integrität der Verweise und Warnungen vor veralteten Konstrukten.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Und mein Projektschema?&lt;/strong&gt; Laden einer ODD-Anpassung, um all das auf die
projektspezifische Teilmenge von TEI einzuschränken.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="warum-das-zählt"&gt;Warum das zählt&lt;/h2&gt;
&lt;p&gt;Wer in TEI kodiert, schlägt ständig in den Guidelines nach. Erfahrene Encoder
haben die gängigen Muster verinnerlicht, aber selbst sie müssen bei selteneren
Elementen oder verwickelten Inhaltsmodellen in die Spezifikation schauen. Für
KI-Assistenten, denen jedes verinnerlichte Wissen fehlt, ist das Problem
gravierender: Sie halluzinieren Markup, das plausibel aussieht und falsch ist.&lt;/p&gt;
&lt;p&gt;Mit tei-mcp muss die KI nicht raten. Sie kann die Antwort in der Spezifikation
nachschlagen, ehe sie auch nur eine spitze Klammer schreibt. Heraus kommt
Markup, das TEI P5 entspricht – oder der ODD-Anpassung Ihres Projekts.&lt;/p&gt;
&lt;h2 id="erste-schritte"&gt;Erste Schritte&lt;/h2&gt;
&lt;p&gt;Installation von PyPI:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;pip install tei-mcp
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Anschließend in die Konfiguration Ihres MCP-Clients eintragen:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-json" data-lang="json"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;mcpServers&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;tei&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;command&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;uvx&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;args&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;tei-mcp&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Beim ersten Start lädt der Server die TEI-Spezifikation herunter; er arbeitet
mit jedem MCP-kompatiblen Client zusammen.&lt;/p&gt;
&lt;p&gt;Quellcode und vollständige Dokumentation:
&lt;/p&gt;</description></item><item><title>Eine Wahrnehmungsgeographie der Levante</title><link>https://clementgodbarge.com/de/post/levante/</link><pubDate>Sat, 29 Oct 2022 10:02:52 -0500</pubDate><guid>https://clementgodbarge.com/de/post/levante/</guid><description>&lt;h1 id="einleitung"&gt;Einleitung&lt;/h1&gt;
&lt;p&gt;Die &lt;em&gt;Levante&lt;/em&gt; ist ein Ort, der sich entzieht. Gewöhnlich im Verhältnis zu – oder in Abgrenzung von – einem anderen Gebiet bestimmt, hat der Begriff selten eine feste Bedeutung gehabt; je nachdem, wo und wann man ihn gebrauchte, rief er eine andere Geographie auf. Doch wenn sich eine objektive, exakte Definition schon kaum formulieren lässt, so darf man doch hoffen, eine subjektive Karte dieser Region zu zeichnen – auf der Grundlage der Zusammenhänge, die sich innerhalb eines bestimmten Textkorpus zeigen. Anders gefragt: Welchen Raum konnte die &lt;em&gt;Levante&lt;/em&gt; einer bestimmten Gruppe von Lesern vor Augen stellen?&lt;br&gt;
In diesem Beitrag zeige ich Ihnen, wie Sie mit Daten aus der
des Medici Archive Project
sichtbar machen, mit welchen konkreten Orten dieses Toponym verbunden war.&lt;/p&gt;
&lt;h1 id="die-mia-datenbank"&gt;Die MIA-Datenbank&lt;/h1&gt;
&lt;p&gt;MIA ist eine kollaborative Plattform, auf der Forschende ihre eigenen Aufnahmen von Archivalien aus dem
hochladen und miteinander teilen. Im vergangenen Jahr hat unser Team mit Unterstützung des
Tausende von Dokumenten aus der &lt;em&gt;avvisi&lt;/em&gt;-Serie des &lt;em&gt;Mediceo del Principato&lt;/em&gt; in Florenz fotografiert, transkribiert, regestiert und klassifiziert. Für statistische Auswertungen war die Datenbank zwar nicht in erster Linie gedacht; die Metadaten, die wir bereitstellen, lassen sich aber gleichwohl herunterladen und als Datensätze nutzen.&lt;/p&gt;
&lt;h1 id="der-datensatz"&gt;Der Datensatz&lt;/h1&gt;
&lt;p&gt;Der Datensatz, den ich hier angelegt habe, umfasst sämtliche Nachrichten aus der &lt;em&gt;Levante&lt;/em&gt; von 1543 bis 1566 – vom ersten im Archiv verzeichneten Avviso bis zum Todesjahr Sultan
. Hier ein Ausschnitt dessen, was ich vom Server geholt habe: drei Spalten mit einer eindeutigen Dokumentnummer, einem Ortsnamen und einem Datum.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-csv" data-lang="csv"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt;57386 Malta / Europe / World / Top of the TGN hierarchy 1565-1-3&lt;/span&gt;&lt;span class="p"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt;57386 Modon / Messinias&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="s"&gt; Nomos / Peloponnisos / Ellas 1565-1-3&lt;/span&gt;&lt;span class="p"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt;57386 Al-Iskandariyah / Muhafazat al Iskandariyah / Egypt / Africa 1565-1-3&lt;/span&gt;&lt;span class="p"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt;57386 Evvoia / Evvoias&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="s"&gt; Nomos / Sterea Ellas-Evvoia / Ellas 1565-1-3&lt;/span&gt;&lt;span class="p"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt;57386 Venetian Republic / Italia / Europe / World 1565-1-3&lt;/span&gt;&lt;span class="p"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt;57386 Arsenale / Istanbul / Istanbul / Marmara 1565-1-3&lt;/span&gt;&lt;span class="p"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt;57386 Black Sea / Asia / World / Top of the TGN hierarchy 1565-1-3&lt;/span&gt;&lt;span class="p"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt;57389 Otranto / Lecce / Puglia / Italia 1565-1-3&lt;/span&gt;&lt;span class="p"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt;57389 Nisoi Aiyaiou / Ellas / Europe / World 1565-1-3&lt;/span&gt;&lt;span class="p"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt;57389 Malta / Europe / World / Top of the TGN hierarchy 1565-1-3&lt;/span&gt;&lt;span class="p"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt;57389 Buda / Budapest / Budapest / Magyarorszag 1565-1-3&lt;/span&gt;&lt;span class="p"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt;57389 Al-Iskandariyah / Muhafazat al Iskandariyah / Egypt / Africa 1565-1-3&lt;/span&gt;&lt;span class="p"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt;57389 Kipros / Asia / World / Top of the TGN hierarchy 1565-1-3&lt;/span&gt;&lt;span class="p"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt;57389 Rodhos / Rodos&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="s"&gt; Nisos / Sporadhes / Nisoi Aiyaiou 1565-1-3&lt;/span&gt;&lt;span class="p"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt;57389 Arsenale / Istanbul / Istanbul / Marmara 1565-1-3&lt;/span&gt;&lt;span class="p"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt;57389 Çorlu / Thraki / Ellas / Europe 1565-1-3&lt;/span&gt;&lt;span class="p"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="die-daten-bereinigen"&gt;Die Daten bereinigen&lt;/h2&gt;
&lt;p&gt;Bevor sich diese Daten visualisieren lassen, müssen sie als CSV-Datensatz (comma separated values) lesbar sein; außerdem wollen die geografischen Angaben in ein „maschinenfreundlicheres“ Format gebracht werden, nämlich in GPS-Koordinaten. Bei Hunderten von Einträgen macht man das lieber nicht von Hand. Vortrainierte Sprachmodelle wie
,
oder
, um nur einige zu nennen, erledigen es ziemlich schnell und ziemlich genau – allerdings nur unter strenger Aufsicht, denn zum Halluzinieren neigen sie alle ein wenig.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-csv" data-lang="csv"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt;documentId&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="s"&gt;latitude&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="s"&gt;longitude&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="s"&gt;documentDate&lt;/span&gt;&lt;span class="p"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt;57386&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="s"&gt;35.899167&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="s"&gt;14.514167&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="s"&gt;1565-1-3&lt;/span&gt;&lt;span class="p"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt;57386&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="s"&gt;37.05&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="s"&gt;22.116667&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="s"&gt;1565-1-3&lt;/span&gt;&lt;span class="p"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt;57386&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="s"&gt;31.200028&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="s"&gt;29.918719&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="s"&gt;1565-1-3&lt;/span&gt;&lt;span class="p"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt;57386&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="s"&gt;38.366667&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="s"&gt;23.666667&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="s"&gt;1565-1-3&lt;/span&gt;&lt;span class="p"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt;57386&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="s"&gt;45.438333&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="s"&gt;12.331333&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="s"&gt;1565-1-3&lt;/span&gt;&lt;span class="p"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt;57386&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="s"&gt;41.018611&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="s"&gt;28.984444&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="s"&gt;1565-1-3&lt;/span&gt;&lt;span class="p"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt;57386&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="s"&gt;42.7&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="s"&gt;18.8&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="s"&gt;1565-1-3&lt;/span&gt;&lt;span class="p"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt;57389&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="s"&gt;40.216667&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="s"&gt;18.166667&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="s"&gt;1565-1-3&lt;/span&gt;&lt;span class="p"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt;57389&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="s"&gt;37.966667&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="s"&gt;23.716667&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="s"&gt;1565-1-3&lt;/span&gt;&lt;span class="p"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt;57389&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="s"&gt;35.899167&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="s"&gt;14.514167&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="s"&gt;1565-1-3&lt;/span&gt;&lt;span class="p"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt;57389&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="s"&gt;47.4925&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="s"&gt;19.051389&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="s"&gt;1565-1-3&lt;/span&gt;&lt;span class="p"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt;57389&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="s"&gt;31.200028&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="s"&gt;29.918719&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="s"&gt;1565-1-3&lt;/span&gt;&lt;span class="p"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt;57389&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="s"&gt;34.916667&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="s"&gt;33.616667&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="s"&gt;1565-1-3&lt;/span&gt;&lt;span class="p"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt;57389&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="s"&gt;36.405419&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="s"&gt;28.227778&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="s"&gt;1565-1-3&lt;/span&gt;&lt;span class="p"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt;57389&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="s"&gt;41.018611&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="s"&gt;28.984444&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="s"&gt;1565-1-3&lt;/span&gt;&lt;span class="p"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt;57389&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="s"&gt;41.133333&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="s"&gt;27.416667&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="s"&gt;1565-1-3&lt;/span&gt;&lt;span class="p"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h1 id="die-dichtekarte"&gt;Die Dichtekarte&lt;/h1&gt;
&lt;p&gt;Eine Dichtekarte zeigt, wie oft ein Ort in einem Datensatz genannt wird. Das hilft, nicht nur die geografische Reichweite der Daten zu erfassen, sondern auch ihre Brennpunkte: Welche Orte tauchen immer wieder auf, welche nur gelegentlich? Wo liegen die Zentren, wie weit reicht die Peripherie? Und wohin auf der Karte richtet sich die Aufmerksamkeit eines Lesers am ehesten?&lt;/p&gt;
&lt;iframe width='100%' height='600px' src="https://api.mapbox.com/styles/v1/clemclem/cl9q7c77p004y14mqytjrfnex.html?title=false&amp;access_token=pk.eyJ1IjoiY2xlbWNsZW0iLCJhIjoiY2lmbGpvbjMwZjh3NnJ5bHg4ZzkzeWZzeCJ9.IgOF4fphVbsWAIKyzAV-DQ&amp;zoomwheel=false#3.83/43.29/33.61" title="Levante" style="border:none;"&gt;&lt;/iframe&gt;
&lt;p&gt;Für dieses Experiment – und weil es schnell gehen musste – habe ich auf eine der APIs von
zurückgegriffen. Dieselbe Art von Dichtekarte lässt sich aber mit vielen Visualisierungsbibliotheken und Geoinformationssystemen erzeugen.&lt;/p&gt;
&lt;h1 id="einige-beobachtungen"&gt;Einige Beobachtungen&lt;/h1&gt;
&lt;p&gt;Herausgekommen ist eher ein impressionistisches Tableau als die exakte Darstellung eines sauber definierbaren Begriffs – und genau das gefällt mir an diesem Versuch. Denn
&lt;mark&gt;die Datenwissenschaft mag den Geisteswissenschaften eine mächtige Verbündete sein; an ihre Regeln halten müssen wir uns deshalb noch lange nicht.&lt;/mark&gt;
&lt;/p&gt;
&lt;p&gt;Bemerkenswert ist außerdem, dass die Karte eine &lt;em&gt;Levante&lt;/em&gt; zeigt, die mit dem übrigen Europa und dem Mittelmeerraum aufs Engste verflochten ist. Sie hebt zudem hervor, wie zentral Edirne in der politischen Geographie des Osmanischen Reiches stand. Die wichtigste Stadt Spaniens ist auf dieser Karte überdies weder Madrid noch der Escorial, sondern Neapel. Und nicht zuletzt scheinen Inseln und kleine Stadtstaaten wie Ragusa zwischen den Mächten der Region eine wichtige Mittlerrolle gespielt zu haben.&lt;/p&gt;
&lt;h1 id="wie-man-daten-bei-mia-abfragt"&gt;Wie man Daten bei MIA abfragt&lt;/h1&gt;
&lt;p&gt;So hervorragend MIA als kollaboratives Werkzeug für die Forschung auch ist – an die Daten auf seinen Servern kommt man nicht ohne Weiteres heran. Das Back-End etwa ist in keinem öffentlichen Repositorium veröffentlicht. Wer sich bei MIA registriert, kann die Daten aber dennoch beziehen, indem er den Server mit Python abfragt.&lt;/p&gt;
&lt;h3 id="anfrage"&gt;Anfrage&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-python" data-lang="python"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;url&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;https://mia.medici.org/Mia/json/de/advancedsearch/advancedSearchResults/0/90/docYear/asc/?isNewsFeedSearch=False&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;payload&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[{&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;searchSection&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;archivalLocationSearch&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;type&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;archivalLocationAdvancedSearch&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;isActiveFilter&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="kc"&gt;True&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;repository&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="kc"&gt;None&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;collection&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;Mediceo del Principato&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;series&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="kc"&gt;None&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;volume&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;2863&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;insert&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="kc"&gt;None&lt;/span&gt;&lt;span class="p"&gt;},{&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;searchSection&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;categoryAndTypologySearch&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;type&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;categoryAndTypologyAdvancedSearch&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;isActiveFilter&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="kc"&gt;True&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;category&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;News&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;typology&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="kc"&gt;None&lt;/span&gt;&lt;span class="p"&gt;},{&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;searchSection&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;transcriptionSearch&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;type&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;transcriptionAdvancedSearch&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;isActiveFilter&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="kc"&gt;False&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;transcription&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;},{&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;isActiveFilter&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="kc"&gt;False&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;searchSection&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;synopsisSearch&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;type&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;synopsisAdvancedSearch&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;synopsis&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;},{&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;searchSection&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;placesSearch&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;type&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;placesAdvancedSearch&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;isActiveFilter&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="kc"&gt;False&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;places&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:[]},{&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;searchSection&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;peopleSearch&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;type&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;peopleAdvancedSearch&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;isActiveFilter&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="kc"&gt;False&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;people&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:[]},{&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;searchSection&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;topicsSearch&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;type&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;topicsAdvancedSearch&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;isActiveFilter&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="kc"&gt;True&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;topics&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:[{&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;topicTitle&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;Place Index&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;topicId&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;51&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;placeAllId&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;}]},{&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;searchSection&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;dateSearch&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;type&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;dateAdvancedSearch&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;isActiveFilter&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="kc"&gt;False&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;dateFilterType&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;dateYear&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;dateMonth&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;dateDay&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;dateBYear&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;dateBMonth&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;dateBDay&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;},{&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;searchSection&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;documentOwnerSearch&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;type&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;documentOwnerAdvancedSearch&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;isActiveFilter&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="kc"&gt;False&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;editType&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;owner&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;account&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;},{&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;searchSection&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;languagesSearch&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;type&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;languagesAdvancedSearch&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;isActiveFilter&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="kc"&gt;False&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;languages&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:[]}]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;headers&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;Content-type&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;application/json&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;Accept&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;*/*&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;r&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;requests&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;post&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;url&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;data&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;json&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;dumps&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;payload&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt; &lt;span class="n"&gt;headers&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;headers&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;auth&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;LOGIN&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;PASSWORD&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Ersetzen Sie LOGIN und PASSWORD durch Ihre eigenen Zugangsdaten.&lt;/p&gt;
&lt;h3 id="antwort-in-eine-datei-schreiben"&gt;Antwort in eine Datei schreiben&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-python" data-lang="python"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;with&lt;/span&gt; &lt;span class="nb"&gt;open&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;response.json&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;wb&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="n"&gt;fd&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;chunk&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;r&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;iter_content&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;chunk_size&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;128&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;fd&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;write&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;chunk&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="json-öffnen"&gt;JSON öffnen&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-python" data-lang="python"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;f&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;open&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;response.json&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;encoding&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;utf8&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="json-objekt-als-dictionary-zurückgeben"&gt;JSON-Objekt als Dictionary zurückgeben&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-python" data-lang="python"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;json_complete&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;json&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;load&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;f&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="daten-aus-dem-json-auswählen-und-als-csv-ausgeben"&gt;Daten aus dem JSON auswählen und als CSV ausgeben&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-python" data-lang="python"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;with&lt;/span&gt; &lt;span class="nb"&gt;open&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;results.csv&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;w&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;newline&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="n"&gt;csvfile&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;fieldnames&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;documentId&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;placeCited&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;documentDate&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;writer&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;csv&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;DictWriter&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;csvfile&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;fieldnames&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;fieldnames&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;writer&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;writeheader&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;i&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;json_complete&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;data&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;]:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;topics&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;!=&lt;/span&gt; &lt;span class="kc"&gt;None&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;x&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;topics&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;]:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;documentId&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;x&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;documentId&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;placeCited&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;x&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;topicPlaceName&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;year&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;date&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;][&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;docYear&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;month&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;date&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;][&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;docMonth&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;day&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;date&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;][&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;docDay&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;documentDate&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nb"&gt;str&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;year&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;-&amp;#34;&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="nb"&gt;str&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;month&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;-&amp;#34;&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="nb"&gt;str&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;day&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;writer&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;writerow&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;documentId&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;documentId&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;placeCited&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;placeCited&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;documentDate&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;documentDate&lt;/span&gt;&lt;span class="p"&gt;})&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Sobald Sie die Datei &lt;code&gt;results.csv&lt;/code&gt; heruntergeladen haben, können Sie die Daten wie oben beschrieben bereinigen.&lt;/p&gt;</description></item><item><title>Bibliographien im großen Stil parsen – mit vortrainierten Sprachmodellen</title><link>https://clementgodbarge.com/de/post/bibliography/</link><pubDate>Thu, 07 Jul 2022 19:04:14 +0200</pubDate><guid>https://clementgodbarge.com/de/post/bibliography/</guid><description>&lt;p&gt;Wer die Kosten von Projekten der Digital Humanities senken will, kommt an der Automatisierung nicht vorbei. Bis heute werden die eintönigen, mühseligen Arbeiten, die das Edieren im akademischen Betrieb mit sich bringt, entweder von überlasteten Forschenden zu hohen Kosten selbst erledigt oder an Studierende „ausgelagert“. In dieser
vertrete ich die Auffassung, dass sich die meisten dieser undankbaren Aufgaben nicht nur automatisieren &lt;em&gt;lassen&lt;/em&gt;, sondern dass man sie automatisieren &lt;em&gt;sollte&lt;/em&gt;. Das senkt die Gesamtkosten von Projekten in den Digital Humanities – und, was entscheidend ist, es erlaubt Forschenden aus einkommensschwachen Weltregionen, wertvolle Dokumente rasch und erschwinglich zu publizieren.&lt;/p&gt;
&lt;p&gt;Im
habe ich beispielsweise gezeigt, dass vortrainierte Sprachmodelle den Großteil der XML-Auszeichnung einer digitalen Edition übernehmen können.&lt;/p&gt;
&lt;p&gt;Diesmal geht es um ein zweites Beispiel: die Bibliographie.&lt;/p&gt;
&lt;h2 id="das-problem"&gt;Das Problem&lt;/h2&gt;
&lt;p&gt;Aus den Literaturangaben eines einzelnen wissenschaftlichen Aufsatzes eine bibliographische Datenbank zu machen, ist keine Kunst: Man sucht kurz in einem Katalog wie
, lädt den Nachweis im gewünschten Format herunter oder importiert ihn gleich aus einer lokalen Datenbank. Bei ein, zwei Aufsätzen geht das gut.
Ab einer gewissen Zahl von Nachweisen wird die Sache jedoch spröde und zeitraubend. Abhilfe versprechen Parser wie
; nur lassen sich diese Algorithmen schlecht auf große Mengen übertragen.
Als ich anystyle auf die über 150 wissenschaftlichen Essays unserer
losließ, häuften sich die Fehler, bis nichts mehr zu bewältigen war. Viele unserer Quellen wurden schlicht nicht erkannt: Die langen Titel frühneuzeitlicher Bücher hielt der Parser für etwas anderes, und mit weniger gängigen Dokumenten – bestimmten Webseiten, Online-Videos und dergleichen – konnte er gar nichts anfangen. Parser leisten gute Arbeit, solange sich die Autorin oder der Autor buchstabengetreu an eine bekannte Konvention wie Chicago, Turabian oder MLA hält; jede Abweichung von der Norm bezahlt man mit Fehlern.&lt;/p&gt;
&lt;h2 id="die-lösung"&gt;Die Lösung&lt;/h2&gt;
&lt;p&gt;Genau hier helfen
&lt;mark&gt;vortrainierte Sprachmodelle&lt;/mark&gt;
, denn sie
&lt;mark&gt;erfassen im Nu die Muster eines jeden bibliographischen Stils&lt;/mark&gt;
– auch eines selbst ausgedachten – und brauchen nur eine Handvoll Beispiele, um große Mengen formatierter Literaturangaben sauber in eine
zu überführen.&lt;/p&gt;
&lt;p&gt;Anfang 2021 hatte ich das Glück, früh Zugang zu OpenAIs
zu bekommen. Codex übersetzt natürliche Sprache in Code und umgekehrt. Nach Angaben von OpenAI beherrscht es mehr als ein Dutzend Programmiersprachen, und obwohl seine API, während ich dies schreibe, noch im Betastadium ist, treibt es bereits so verbreitete Anwendungen wie GitHubs
an.&lt;/p&gt;
&lt;p&gt;Nach einigem Herumprobieren mit dieser API wurde mir klar, dass sie auch mit schlichterem Code wie &lt;code&gt;BibTeX&lt;/code&gt; bestens zurechtkommt.&lt;/p&gt;
&lt;p&gt;Tatsächlich genügten vier Beispiele im Eingabeprompt, damit die Sache zuverlässig lief.&lt;/p&gt;
&lt;h3 id="eingabeprompt"&gt;Eingabeprompt&lt;/h3&gt;
&lt;p&gt;References:
Bayle, Ariane. “Patients exemplaires: la correspondance médicale de Fioravanti.” In &lt;em&gt;Vulgariser la médecine. Du style médical en France et en Italie&lt;/em&gt;, edited by Andrea Carlino and Michel Jeanneret, 181–212. Geneva: Droz, 2009.&lt;/p&gt;
&lt;p&gt;Berns, Andrew D. &lt;em&gt;The Bible and Natural Philosophy in Renaissance Italy: Jewish and Christian Physicians in Search of Truth&lt;/em&gt;. Cambridge: Cambridge University Press, 2015.&lt;/p&gt;
&lt;p&gt;Gabler, Hans Walter. “Theorizing the Digital Scholarly Edition.” &lt;em&gt;Literature Compass&lt;/em&gt; 7, no. 2 (2010): 43–56.
.&lt;/p&gt;
&lt;p&gt;Findlen, Paula. &lt;em&gt;Possessing Nature: Museums, Collecting, and Scientific Culture in Early Modern Italy&lt;/em&gt;. Berkeley: University of California Press, 1994.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-BibTeX" data-lang="BibTeX"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nc"&gt;@incollection&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nl"&gt;bayle2009&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="na"&gt;author&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;{Bayle, Ariane}&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="na"&gt;booktitle&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;{Vulgariser la médecine. Du style médical en France et en Italie}&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="na"&gt;title&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;{Patients exemplaires: la correspondance médicale de Fioravanti}&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="na"&gt;editor&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;{Carlino, Andrea and Michel Jeanneret}&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="na"&gt;year&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;{2009}&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="na"&gt;address&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;{Geneva}&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="na"&gt;publisher&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;{Droz}&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="na"&gt;langid&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;{french}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nc"&gt;@book&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nl"&gt;berns2015&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="na"&gt;title&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;{The Bible and Natural Philosophy in Renaissance Italy: Jewish and Christian Physicians in Search of Truth}&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="na"&gt;author&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;{Berns, Andrew D.}&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="na"&gt;address&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;{Cambridge}&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="na"&gt;publisher&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;{Cambridge University Press}&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="na"&gt;langid&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;{english}&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="na"&gt;date&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;{2015}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nc"&gt;@article&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nl"&gt;gabler2010&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="na"&gt;author&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;{Gabler, Hans Walter}&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="na"&gt;title&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;{Theorizing the Digital Scholarly Edition}&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="na"&gt;journal&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;{Literature Compass}&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="na"&gt;volume&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;{7}&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="na"&gt;number&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;{2}&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="na"&gt;pages&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;{43-56}&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="na"&gt;doi&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;{10.1111/j.1741-4113.2009.00675.x}&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="na"&gt;langid&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;{english}&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="na"&gt;year&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;{2010}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nc"&gt;@book&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nl"&gt;findlen1994&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="na"&gt;title&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;{Possessing Nature: Museums, Collecting, and Scientific Culture in Early Modern Italy}&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="na"&gt;author&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;{Findlen, Paula}&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="na"&gt;address&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;{Berkeley}&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="na"&gt;publisher&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;{University of California Press}&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="na"&gt;langid&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;{english}&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="na"&gt;date&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;{1994}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="ergebnisse"&gt;Ergebnisse&lt;/h3&gt;
&lt;p&gt;Die
&lt;mark&gt;sind verblüffend: Über 2.000 Literaturangaben waren in wenigen Tagen konvertiert.&lt;/mark&gt;
Das Modell hat das Muster meines Prompts nicht bloß getreu nachgebildet, sondern obendrein Eintrags- und Feldtypen korrekt ergänzt, die im Prompt gar nicht vorkamen. &lt;code&gt;GPT-3&lt;/code&gt; spricht, mit anderen Worten, fließend &lt;code&gt;BibTeX&lt;/code&gt;. Und was bei einem im Wesentlichen auf Englisch trainierten Modell vielleicht noch mehr überrascht: Es erkannte sämtliche Sprachen (Russisch, Französisch, Italienisch, Latein, Griechisch, Deutsch, Spanisch usw.) und setzte jedes Mal das richtige Feld &lt;code&gt;langid&lt;/code&gt;.&lt;/p&gt;
&lt;div class="callout flex px-4 py-3 mb-6 rounded-md border-l-4 bg-blue-100 dark:bg-blue-900 border-blue-500"
data-callout="note"
data-callout-metadata=""&gt;
&lt;span class="callout-icon pr-3 pt-1 text-blue-600 dark:text-blue-300"&gt;
&lt;svg height="24" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"&gt;&lt;path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" d="m16.862 4.487l1.687-1.688a1.875 1.875 0 1 1 2.652 2.652L6.832 19.82a4.5 4.5 0 0 1-1.897 1.13l-2.685.8l.8-2.685a4.5 4.5 0 0 1 1.13-1.897zm0 0L19.5 7.125"/&gt;&lt;/svg&gt;
&lt;/span&gt;
&lt;div class="callout-content dark:text-neutral-300"&gt;
&lt;div class="callout-title font-semibold mb-1"&gt;Hinweis&lt;/div&gt;
&lt;div class="callout-body"&gt;&lt;p&gt;Ein- und Ausgabe von GPT-3 sind derzeit begrenzt: Es verarbeitet höchstens 2048 sprachliche Tokens. Fällt diese Beschränkung, dürfte dieselbe Aufgabe in einer Stunde oder weniger erledigt sein.&lt;/p&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;Einigermaßen unerwartet fügte GPT-3 auch Angaben hinzu, die in den ursprünglichen Nachweisen gar nicht standen.&lt;/p&gt;
&lt;blockquote class="border-l-4 border-neutral-300 dark:border-neutral-600 pl-4 italic text-neutral-600 dark:text-neutral-400 my-6"&gt;
&lt;p&gt;Baillot, Anne, and Anna Busch. “Editing for Man and Machine.” In &lt;em&gt;Users of Scholarly Editions: Editorial Anticipations of Reading, Studying and Consulting&lt;/em&gt;, Vol. 13. Variants (Journal of the European Society for Textual Scholarship). Leicester, 2015.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Bei diesem Nachweis etwa ergänzte GPT-3 den permanenten Link zum Open-Access-Repositorium (
), in dem der Aufsatz zu lesen ist – samt der Felder &lt;code&gt;HAL_ID&lt;/code&gt; und &lt;code&gt;HAL_VERSION&lt;/code&gt;, die HAL eigens für sich eingeführt hat:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-BibTeX" data-lang="BibTeX"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nc"&gt;@inproceedings&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nl"&gt;baillot2015&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="na"&gt;title&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;{Editing for Man and Machine}&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="na"&gt;author&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;{Baillot, Anne and Busch, Anna}&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="na"&gt;year&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="m"&gt;2015&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="na"&gt;booktitle&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;{Users of Scholarly Editions: Editorial Anticipations of Reading, Studying and Consulting}&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="na"&gt;address&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;{Leicester}&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="na"&gt;series&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;{Variants (Journal of the European Society for Textual Scholarship)}&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="na"&gt;volume&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="m"&gt;13&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="na"&gt;editor&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;{Bruhn, Siglinde and Schreiber, Manfred}&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="na"&gt;langid&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;{english}&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="na"&gt;hal_id&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;{halshs-01233380}&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="na"&gt;hal_version&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;{v1}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Solche Ergänzungen zeigen, dass
&lt;mark&gt;GPT-3 einen Literaturnachweis nicht nur zerlegt, sondern ihn aus dem, was es einst gelernt hat, auch vervollständigt.&lt;/mark&gt;
Spannend wäre in dieser Hinsicht zu sehen, ob es sich bei Titeln, die nach seinem Training erschienen sind, genauso verhält …&lt;/p&gt;
&lt;h2 id="grenzen"&gt;Grenzen&lt;/h2&gt;
&lt;p&gt;Vollkommen ist GPT-3 freilich nicht; ein Mensch muss ihm über die Schulter schauen. Eine seiner bekannten Schwächen ist die
: Hin und wieder erfindet es etwas oder stellt unwahrscheinliche Vermutungen an.&lt;/p&gt;
&lt;p&gt;In meinem Versuch trat diese Neigung zutage, als GPT-3 den Familiennamen eines Autors kurzerhand von „Ruscelli“ in „Ruscello“ änderte. Streng genommen ist das kein Fehler, denn frühneuzeitliche italienische Familiennamen ließen sich unterschiedslos im Plural wie im Singular gebrauchen. Heute gilt allerdings die Regel, einen Namen so zu belassen, wie er steht, ob Plural oder Singular: Niemand würde Machiavelli heute Machiavello nennen, so wie von uns umgekehrt Rossello statt Rosselli erwartet wird. Hat GPT-3 diese Konvention aus Mangel an historischem Bewusstsein übergangen? Oder hat es sich von den Nachbarnamen leiten lassen, die in diesem Teil der Bibliographie zufällig alle im Singular stehen (Bariletto, Cesano, Rossello)?
Wer weiß.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-Bibtex" data-lang="Bibtex"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nc"&gt;@book&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nl"&gt;rossello1565&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="na"&gt;title&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;{Della summa de’ secreti universali}&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="na"&gt;author&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;{Rossello, Timoteo}&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="na"&gt;address&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;{Venice}&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="na"&gt;publisher&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;{Giovanni Bariletto}&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="na"&gt;langid&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;{italian}&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="na"&gt;date&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;{1565}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nc"&gt;@book&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nl"&gt;ruscello1559&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="na"&gt;title&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;{La seconda parte de’ secreti del Reverendo Donno Alessio Piemontese}&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="na"&gt;author&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;{Ruscello, Girolamo}&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="na"&gt;address&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;{Pesaro}&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="na"&gt;publisher&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;{Bartolomeo Cesano}&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="na"&gt;langid&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;{italian}&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="na"&gt;date&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;{1559}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="fazit"&gt;Fazit&lt;/h2&gt;
&lt;p&gt;Die über 150 Essays, die in vier Jahren intensiver Zusammenarbeit entstanden und
, liefern nicht nur unentbehrliche Informationen zu der Handschrift, die wir ediert und übersetzt haben; sie bergen auch einen wertvollen bibliographischen Schatz.&lt;/p&gt;
&lt;p&gt;Führt man diese Literaturangaben in einer Datenbank zusammen, können die Herausgeber das bibliographische Format im Handumdrehen wechseln und die Angaben darstellen, wie es ihnen beliebt. Zugleich verrät eine solche Datenbank viel über die Edition und das Projekt, aus dem sie hervorgegangen ist, und eröffnet der Forschung neue analytische Zugänge. Und sie lässt sich mit hoher Genauigkeit in Rekordzeit anlegen.&lt;/p&gt;
&lt;p&gt;Zugegeben: Der eine oder andere Fehler kann sich einschleichen, vor allem wegen der Neigung von GPT-3 zum Halluzinieren. Doch die nächsten Generationen vortrainierter Sprachmodelle werden dieses Problem entschärfen.&lt;/p&gt;</description></item><item><title>Auszeichnung automatisieren in digitalen wissenschaftlichen Editionen</title><link>https://clementgodbarge.com/de/post/gpt3/</link><pubDate>Mon, 22 Nov 2021 18:15:00 +0000</pubDate><guid>https://clementgodbarge.com/de/post/gpt3/</guid><description>&lt;h1 id="einleitung"&gt;Einleitung&lt;/h1&gt;
&lt;p&gt;Wie bringt man eine digitale wissenschaftliche Edition zustande, ohne sich zu ruinieren? Dieser Beitrag eröffnet eine Reihe zum effizienten Edieren; ich prüfe darin, was vortrainierte Sprachmodelle leisten können, wenn es darum geht, editorische Routinearbeiten wie die semantische Auszeichnung zu automatisieren.&lt;/p&gt;
&lt;details class="print:hidden xl:hidden" &gt;
&lt;summary&gt;Inhaltsverzeichnis&lt;/summary&gt;
&lt;div class="text-sm"&gt;
&lt;nav id="TableOfContents"&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="#ein-werk-der-liebe"&gt;Ein Werk der Liebe&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#eine-hohe-schwelle"&gt;Eine hohe Schwelle&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="#transformer-der-kürzeste-weg-zur-automatisierung"&gt;Transformer: der kürzeste Weg zur Automatisierung?&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="#codex"&gt;Codex&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#jenseits-von-openai"&gt;Jenseits von OpenAI&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="#experiment-1--textkategorisierung"&gt;Experiment 1 – Textkategorisierung&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="#prompt-engineering"&gt;Prompt-Engineering&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#test"&gt;Test&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#ergebnis"&gt;Ergebnis&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="#experiment-2--semantische-auszeichnung"&gt;Experiment 2 – Semantische Auszeichnung&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="#prompt-engineering-1"&gt;Prompt-Engineering&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#test-1"&gt;Test&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/nav&gt;
&lt;/div&gt;
&lt;/details&gt;
&lt;h1 id="das-problem"&gt;Das Problem&lt;/h1&gt;
&lt;h2 id="ein-werk-der-liebe"&gt;Ein Werk der Liebe&lt;/h2&gt;
&lt;p&gt;Wo die Liebe hinfällt, fragt niemand nach dem Preis – so jedenfalls will es das alte Sprichwort. Auf digitale wissenschaftliche Editionen trifft das in besonderem Maße zu: Transkription, Übersetzung und Annotation verschlingen Tausende von Arbeitsstunden, die – wie bei
– von Hunderten hochqualifizierter Mitarbeiterinnen und Mitarbeiter geleistet werden.&lt;/p&gt;
&lt;p&gt;In gewisser Weise ist es ein Segen, dass Vorzeigeprojekte der Digital Humanities die gewaltigen Summen einwerben können, die ihr Betrieb verlangt. Doch wer sich derart auf die Großzügigkeit reicher Stiftungen, Universitäten und Behörden verlässt und über Jahre hinweg viel Personal binden muss, hat kein Wirtschaftsmodell, das die Zukunft trägt.&lt;/p&gt;
&lt;p&gt;Wollen wir Forschende in aller Welt ermutigen, historische Dokumente einem breiteren Publikum zu erschließen, dann
&lt;mark&gt;müssen die Kosten digitaler kritischer Editionen um Größenordnungen sinken&lt;/mark&gt;
.&lt;/p&gt;
&lt;h2 id="eine-hohe-schwelle"&gt;Eine hohe Schwelle&lt;/h2&gt;
&lt;p&gt;Paradoxerweise
&lt;mark&gt;könnte die Lösung ausgerechnet von arbeitsintensiven Unternehmungen wie
kommen, denn sie liefern einen wertvollen Trainingsdatensatz&lt;/mark&gt;
, mit dem sich einige der sprödesten und eintönigsten Arbeiten des digitalen Edierens automatisieren lassen – etwa die Auszeichnung.&lt;/p&gt;
&lt;p&gt;Nicht, dass die Auszeichnung nebensächlich wäre; im Gegenteil:
&lt;mark&gt;Markup ist heute der unverzichtbare Bestandteil jedes ernstzunehmenden digitalen Editionsvorhabens.&lt;/mark&gt;
Normiert durch die
, erlaubt es, möglichst viele Eigenschaften des Dokuments und des Textes, den es überliefert, festzuhalten – Struktur, Marginalien, Streichungen, Varianten, Papiersorte, Flecken, Schriftbild … ganz nach Belieben.&lt;/p&gt;
&lt;p&gt;Das folgende Beispiel aus
zeigt, wie die Auszeichnung den Text mit Zusatzinformation anreichert (Kategorie, Struktur, semantische Felder, Streichungen usw.) – und der digitalen Edition damit einen handfesten Vorsprung vor ihren gedruckten Vorfahren verschafft.&lt;/p&gt;
&lt;table&gt;
&lt;tr&gt;
&lt;th&gt; Reiner Text &lt;/th&gt;
&lt;th&gt; XML-Markup&lt;/th&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Pour rompre grenades et donner
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;violence aux artifices de foeu
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Mects parmy la pouldre et la sixiesme
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;partye dicelle de vif argent
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/td&gt;
&lt;td&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-xml" data-lang="xml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;&amp;lt;div&lt;/span&gt; &lt;span class="na"&gt;id=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;p008r_2&amp;#34;&lt;/span&gt; &lt;span class="na"&gt;categories=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;arms and armor&amp;#34;&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;&amp;lt;head&amp;gt;&lt;/span&gt;Pour rompre &lt;span class="nt"&gt;&amp;lt;wp&amp;gt;&lt;/span&gt;grenades&lt;span class="nt"&gt;&amp;lt;/wp&amp;gt;&lt;/span&gt; et donner&lt;span class="nt"&gt;&amp;lt;lb/&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;violence aux &lt;span class="nt"&gt;&amp;lt;wp&amp;gt;&lt;/span&gt;artifices de foeu&lt;span class="nt"&gt;&amp;lt;/wp&amp;gt;&amp;lt;/head&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;&amp;lt;ab&amp;gt;&lt;/span&gt;Mects parmy la &lt;span class="nt"&gt;&amp;lt;m&amp;gt;&lt;/span&gt;pouldre&lt;span class="nt"&gt;&amp;lt;/m&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;&amp;lt;del&amp;gt;&amp;lt;ms&amp;gt;&lt;/span&gt;six fois autant&lt;span class="nt"&gt;&amp;lt;/ms&amp;gt;&lt;/span&gt; de
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;&amp;lt;m&amp;gt;&lt;/span&gt;vif argent&lt;span class="nt"&gt;&amp;lt;/m&amp;gt;&amp;lt;/del&amp;gt;&amp;lt;lb/&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;&amp;lt;del&amp;gt;&lt;/span&gt;et&lt;span class="nt"&gt;&amp;lt;/del&amp;gt;&lt;/span&gt; &lt;span class="nt"&gt;&amp;lt;ms&amp;gt;&lt;/span&gt;la sixiesme partye&lt;span class="nt"&gt;&amp;lt;/ms&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; dicelle de &lt;span class="nt"&gt;&amp;lt;m&amp;gt;&lt;/span&gt;vif argent&lt;span class="nt"&gt;&amp;lt;/m&amp;gt;&amp;lt;/ab&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/table&gt;
&lt;p&gt;Wertvoll ist diese Information für die Archivierung, aber ebenso – wie ich andernorts gezeigt habe – für Synthese und Analyse. Nur ist eine solche Annotation eben ungeheuer zeitraubend, zumal derselbe Text häufig in mehreren Gestalten vorliegen muss: als Übersetzung, als Transkription, als modernisierte Fassung und so fort.&lt;/p&gt;
&lt;h1 id="die-lösung"&gt;Die Lösung&lt;/h1&gt;
&lt;h2 id="transformer-der-kürzeste-weg-zur-automatisierung"&gt;Transformer: der kürzeste Weg zur Automatisierung?&lt;/h2&gt;
&lt;p&gt;2020 stellte
mit großem Getöse seine neueste Familie universell einsetzbarer großer Sprachmodelle vor: GPT-3, ausgeschrieben „Generative Pre-trained Transformer 3“. Transformer sind ein noch recht junger Durchbruch der Künstlichen Intelligenz. Sie lernen neue Aufgaben verblüffend schnell – es genügt, ihnen eine Anweisung (den Prompt) und eine Handvoll Beispiele vorzulegen. Zudem lassen sie sich mit einem eigens zusammengestellten Datensatz nachtrainieren (Fine-Tuning), was Antwortzeit und Treffsicherheit verbessert. Deshalb spricht man bei GPT-3 und verwandten Transformern von
.&lt;/p&gt;
&lt;p&gt;Nach Angaben von OpenAI umfasst GPT-3 die Rekordzahl von 175 Milliarden Parametern und wurde mit über 570 GB Text trainiert, überwiegend englischsprachigen Dokumenten, die vermutlich aus
stammen. Allein kraft seiner Größe hat GPT-3 in diesem Feld neue Maßstäbe gesetzt: Es erledigt ohne jede Anpassung die verschiedensten Aufgaben mit einem Realismus, der einen beunruhigen kann. Es schreibt glaubwürdige
,
in Chatrooms,
,
, übersetzt Dokumente, erklärt Fachjargon und dergleichen mehr.&lt;/p&gt;
&lt;p&gt;Seit Mai 2021 habe ich frühen Zugang zur API von OpenAI und konnte seither ausprobieren, wie das Modell mit Aufgaben zurechtkommt, die als notorisch schwierig gelten: französische Lyrik und neulateinische Texte ins Englische übersetzen, Analogien erläutern, ja sogar den vierten Abschnitt von Kants &lt;em&gt;Grundlegung zur Metaphysik der Sitten&lt;/em&gt; für ein siebenjähriges Kind herunterbrechen (wenn auch wenig überzeugend).&lt;/p&gt;
&lt;h3 id="codex"&gt;Codex&lt;/h3&gt;
&lt;p&gt;Eine der jüngsten Ausprägungen von GPT-3 hat es auf Programmiersprachen abgesehen. Das Modell heißt &lt;em&gt;Codex&lt;/em&gt; und übersetzt natürliche Sprache in Programmcode und umgekehrt. Suche ich etwa einen regulären Ausdruck, der „nur Wörter findet, die mit einem Großbuchstaben beginnen“, so liefert GPT-3 prompt einen funktionierenden: &lt;code&gt;[A-Z]+\w+&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Laut OpenAI beherrscht &lt;em&gt;Codex&lt;/em&gt; ein Dutzend Programmiersprachen, darunter Python, JavaScript, Go, Perl, PHP, Ruby und Swift. Weil es Pseudocode reibungslos in Code verwandelt, kann man sich statt auf die pedantische Syntax einer Programmiersprache auf das konzentrieren, worauf es ankommt: die logischen Schritte und Strategien, mit denen ein Programm ein Problem löst.&lt;/p&gt;
&lt;h3 id="jenseits-von-openai"&gt;Jenseits von OpenAI&lt;/h3&gt;
&lt;p&gt;OpenAI ist freilich nicht der einzige Mitspieler. Wie erwähnt, kündigte die Beijing Academy of Artificial Intelligence 2021 mit &lt;em&gt;Wu Dao 2&lt;/em&gt; ein noch größeres und leistungsfähigeres Modell an. Nvidia und Microsoft taten sich für das treffend benannte &lt;em&gt;Megatron-Turing NLG 530B&lt;/em&gt; zusammen. Kleinere Start-ups wie
und
bieten der Öffentlichkeit ebenfalls APIs an, und auch Open-Source-Initiativen wie
verdienen Erwähnung. Die KI-Szene ist natürlich in rasender Bewegung; wer auf dem Laufenden bleiben will, sollte einen Blick auf
werfen.&lt;/p&gt;
&lt;h1 id="die-experimente"&gt;Die Experimente&lt;/h1&gt;
&lt;div class="callout flex px-4 py-3 mb-6 rounded-md border-l-4 bg-blue-100 dark:bg-blue-900 border-blue-500"
data-callout="note"
data-callout-metadata=""&gt;
&lt;span class="callout-icon pr-3 pt-1 text-blue-600 dark:text-blue-300"&gt;
&lt;svg height="24" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"&gt;&lt;path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" d="m16.862 4.487l1.687-1.688a1.875 1.875 0 1 1 2.652 2.652L6.832 19.82a4.5 4.5 0 0 1-1.897 1.13l-2.685.8l.8-2.685a4.5 4.5 0 0 1 1.13-1.897zm0 0L19.5 7.125"/&gt;&lt;/svg&gt;
&lt;/span&gt;
&lt;div class="callout-content dark:text-neutral-300"&gt;
&lt;div class="callout-title font-semibold mb-1"&gt;Hinweis&lt;/div&gt;
&lt;div class="callout-body"&gt;&lt;p&gt;Ziel dieser Experimente ist es, den sparsamsten Weg zu einer verlässlichen Automatisierung editorischer Aufgaben zu finden. Man könnte einwenden, dass sich manche davon auch mit Verfahren des überwachten Lernens automatisieren ließen. Dieser Hypothese gehen wir in einem späteren Beitrag nach.&lt;/p&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;Kann ein Transformer wie GPT-3 lernen, etwa eine technisch-naturwissenschaftliche Handschrift des 16. Jahrhunderts zu annotieren?&lt;/p&gt;
&lt;h2 id="experiment-1--textkategorisierung"&gt;Experiment 1 – Textkategorisierung&lt;/h2&gt;
&lt;p&gt;Beginnen wir mit etwas vergleichsweise Einfachem. Als „Few-Shot-Learner“ sollte GPT-3 rasch durchschauen, nach welchem Schema unser Herausgeberteam die Einträge von Ms. Fr. 640 klassifiziert hat.&lt;/p&gt;
&lt;h3 id="prompt-engineering"&gt;Prompt-Engineering&lt;/h3&gt;
&lt;p&gt;Zum Anlernen begnügte ich mich mit einem denkbar knappen Prompt und vier kurzen Einträgen im Reintext als Beispielen, darunter je einer zu „Medizin“, „Waffen und Rüstungen“ und „Malerei“.&lt;/p&gt;
&lt;h3 id="test"&gt;Test&lt;/h3&gt;
&lt;p&gt;Anschließend kopierte ich eine weitere Passage hinein, die in der ursprünglichen Folge nicht enthalten war:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Working neatly
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Never put down, if you can, two colors one on top of the other.
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;But next, having made your design carefully, keep the place of shadows for them alone,
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&amp;amp; also separately that of lights &amp;amp; highlights, without layering one color all over &amp;amp; then highlighting or else shading on it.
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;And in this way, you further your work, economize your colors &amp;amp; work neatly.
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Which is the reason that, the colors not being muddled nor mixed together, they do not die &amp;amp; you soften the colors better, since they are not so thick.
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Die Ausgabe passt vollkommen zum Inhalt:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-xml" data-lang="xml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;&amp;lt;categories&lt;/span&gt;&lt;span class="err"&gt;=&amp;#34;painting&amp;#34;&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Nimmt man einen Eintrag aus einer Kategorie, die in der Auswahl der Trainingstexte gar nicht vorkam, überrascht das Ergebnis.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-xml" data-lang="xml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;&amp;lt;categories&lt;/span&gt;&lt;span class="err"&gt;=&amp;#34;jewelry&amp;#34;&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="ergebnis"&gt;Ergebnis&lt;/h3&gt;
&lt;p&gt;Eine Kategorie „jewelry“ (Schmuck) gibt es in unserer Edition von Ms. Fr. 640 nicht; das Herausgeberteam
die weiter gefasste Rubrik „Stones“ (Steine). Der Instinkt von GPT-3 ist gleichwohl richtig, und das lässt erwarten, dass es mit ein wenig mehr Training jeden Eintrag von Ms. Fr. 640 einordnen könnte – womöglich sogar Einträge vergleichbarer technischer Texte des 16. Jahrhunderts.&lt;/p&gt;
&lt;h2 id="experiment-2--semantische-auszeichnung"&gt;Experiment 2 – Semantische Auszeichnung&lt;/h2&gt;
&lt;p&gt;Legen wir die Latte etwas höher. Wenn Transformer wie GPT-3 lernen können, Texte nach bestimmten editorischen Kriterien zu klassifizieren – erkennen sie dann auch einen Teil der Auszeichnung im Text?&lt;/p&gt;
&lt;div class="callout flex px-4 py-3 mb-6 rounded-md border-l-4 bg-blue-100 dark:bg-blue-900 border-blue-500"
data-callout="note"
data-callout-metadata=""&gt;
&lt;span class="callout-icon pr-3 pt-1 text-blue-600 dark:text-blue-300"&gt;
&lt;svg height="24" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"&gt;&lt;path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" d="m16.862 4.487l1.687-1.688a1.875 1.875 0 1 1 2.652 2.652L6.832 19.82a4.5 4.5 0 0 1-1.897 1.13l-2.685.8l.8-2.685a4.5 4.5 0 0 1 1.13-1.897zm0 0L19.5 7.125"/&gt;&lt;/svg&gt;
&lt;/span&gt;
&lt;div class="callout-content dark:text-neutral-300"&gt;
&lt;div class="callout-title font-semibold mb-1"&gt;Hinweis&lt;/div&gt;
&lt;div class="callout-body"&gt;&lt;p&gt;&lt;em&gt;Secrets of Craft and Nature&lt;/em&gt; verwendet eine
aus semantischen und strukturellen Labels. Leider verarbeitet GPT-3 keine Bilder, anders als etwa
. Künftige Versionen von GPT werden diese Fähigkeit wahrscheinlich mitbringen; ohne sie lassen sich die meisten strukturellen und materiellen Merkmale eines Dokuments nicht erkennen. Wir übergehen diese Tags daher und wenden uns der Auszeichnung zu, die ohne Bilderkennung auskommt.&lt;/p&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h3 id="prompt-engineering-1"&gt;Prompt-Engineering&lt;/h3&gt;
&lt;p&gt;Semantische Tags erfassen unter anderem Tiere, Pflanzen, Ortsnamen und Sinneseindrücke. Für den Trainingsprompt griff ich einige Beispiele aus der Edition heraus:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-xml" data-lang="xml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c"&gt;&amp;lt;!--Input prompt--&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;The following is a list of words and their corresponding semantic tags
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;cannons: &lt;span class="nt"&gt;&amp;lt;wp&amp;gt;&lt;/span&gt;cannons&lt;span class="nt"&gt;&amp;lt;/wp&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;powder: &lt;span class="nt"&gt;&amp;lt;m&amp;gt;&lt;/span&gt;powder&lt;span class="nt"&gt;&amp;lt;/m&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;flasks: &lt;span class="nt"&gt;&amp;lt;tl&amp;gt;&lt;/span&gt;flasks&lt;span class="nt"&gt;&amp;lt;/tl&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;wooden: &lt;span class="nt"&gt;&amp;lt;m&amp;gt;&lt;/span&gt;wooden&lt;span class="nt"&gt;&amp;lt;/m&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;iron: &lt;span class="nt"&gt;&amp;lt;m&amp;gt;&lt;/span&gt;iron&lt;span class="nt"&gt;&amp;lt;/m&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;parchment: &lt;span class="nt"&gt;&amp;lt;m&amp;gt;&lt;/span&gt;parchment&lt;span class="nt"&gt;&amp;lt;/m&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;goats: &lt;span class="nt"&gt;&amp;lt;al&amp;gt;&lt;/span&gt;goats&lt;span class="nt"&gt;&amp;lt;/al&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;lambs: &lt;span class="nt"&gt;&amp;lt;al&amp;gt;&lt;/span&gt;lambs&lt;span class="nt"&gt;&amp;lt;/al&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;leather: &lt;span class="nt"&gt;&amp;lt;m&amp;gt;&lt;/span&gt;leather&lt;span class="nt"&gt;&amp;lt;/m&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;earth: &lt;span class="nt"&gt;&amp;lt;m&amp;gt;&lt;/span&gt;earth&lt;span class="nt"&gt;&amp;lt;/m&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;fine fatty earth: &lt;span class="nt"&gt;&amp;lt;m&amp;gt;&lt;/span&gt;fine fatty earth&lt;span class="nt"&gt;&amp;lt;/m&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Venice: &lt;span class="nt"&gt;&amp;lt;pl&amp;gt;&lt;/span&gt;Venice&lt;span class="nt"&gt;&amp;lt;/pl&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Flemish: &lt;span class="nt"&gt;&amp;lt;pl&amp;gt;&lt;/span&gt;Flemish&lt;span class="nt"&gt;&amp;lt;/pl&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;almond: &lt;span class="nt"&gt;&amp;lt;pa&amp;gt;&lt;/span&gt;almond&lt;span class="nt"&gt;&amp;lt;/pa&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;almond oil: &lt;span class="nt"&gt;&amp;lt;m&amp;gt;&amp;lt;pa&amp;gt;&lt;/span&gt;almond&lt;span class="nt"&gt;&amp;lt;/pa&amp;gt;&lt;/span&gt; oil&lt;span class="nt"&gt;&amp;lt;/m&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;walnuts skin: &lt;span class="nt"&gt;&amp;lt;m&amp;gt;&amp;lt;pa&amp;gt;&lt;/span&gt;walnuts&lt;span class="nt"&gt;&amp;lt;/pa&amp;gt;&lt;/span&gt; skin&lt;span class="nt"&gt;&amp;lt;/m&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;molten lead: &lt;span class="nt"&gt;&amp;lt;m&amp;gt;&lt;/span&gt;molten lead&lt;span class="nt"&gt;&amp;lt;/m&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;today: &lt;span class="nt"&gt;&amp;lt;tmp&amp;gt;&lt;/span&gt;today&lt;span class="nt"&gt;&amp;lt;/tmp&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;In the past: &lt;span class="nt"&gt;&amp;lt;tmp&amp;gt;&lt;/span&gt;In the past&lt;span class="nt"&gt;&amp;lt;/tmp&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Clockmakers: &lt;span class="nt"&gt;&amp;lt;pro&amp;gt;&lt;/span&gt;Clockmakers&lt;span class="nt"&gt;&amp;lt;/pro&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;red copper: &lt;span class="nt"&gt;&amp;lt;m&amp;gt;&lt;/span&gt;red copper&lt;span class="nt"&gt;&amp;lt;/m&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;crucible: &lt;span class="nt"&gt;&amp;lt;tl&amp;gt;&lt;/span&gt;crucible&lt;span class="nt"&gt;&amp;lt;/tl&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;bellows: &lt;span class="nt"&gt;&amp;lt;tl&amp;gt;&lt;/span&gt;bellows&lt;span class="nt"&gt;&amp;lt;/tl&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;charcoal: &lt;span class="nt"&gt;&amp;lt;m&amp;gt;&lt;/span&gt;charcoal&lt;span class="nt"&gt;&amp;lt;/m&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;founders: &lt;span class="nt"&gt;&amp;lt;pro&amp;gt;&lt;/span&gt;founders&lt;span class="nt"&gt;&amp;lt;/pro&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="test-1"&gt;Test&lt;/h3&gt;
&lt;p&gt;Versuchen wir es mit dem Modell &lt;code&gt;Davinci-codex&lt;/code&gt; und ein paar leichten Wörtern: &lt;em&gt;Apothecary&lt;/em&gt; (Apotheker), &lt;em&gt;smoke&lt;/em&gt; (Rauch), &lt;em&gt;glassmakers&lt;/em&gt; (Glasmacher), &lt;em&gt;latten&lt;/em&gt; (Messingblech) und &lt;em&gt;snake&lt;/em&gt; (Schlange). Die Antwort kommt sofort, und sie ist fehlerfrei:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-xml" data-lang="xml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c"&gt;&amp;lt;!--Output--&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Apothecary: &lt;span class="nt"&gt;&amp;lt;pro&amp;gt;&lt;/span&gt;Apothecary&lt;span class="nt"&gt;&amp;lt;/pro&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;smoke: &lt;span class="nt"&gt;&amp;lt;m&amp;gt;&lt;/span&gt;smoke&lt;span class="nt"&gt;&amp;lt;m&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;glassmakers: &lt;span class="nt"&gt;&amp;lt;pro&amp;gt;&lt;/span&gt;glassmakers&lt;span class="nt"&gt;&amp;lt;/pro&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;latten: &lt;span class="nt"&gt;&amp;lt;m&amp;gt;&lt;/span&gt;latten&lt;span class="nt"&gt;&amp;lt;/m&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;snake: &lt;span class="nt"&gt;&amp;lt;al&amp;gt;&lt;/span&gt;snake&lt;span class="nt"&gt;&amp;lt;/al&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Schwieriger wird es mit zusammengesetzten Ausdrücken wie &lt;em&gt;copper plates&lt;/em&gt; (Kupferplatten), &lt;em&gt;walnut oil&lt;/em&gt; (Walnussöl) und &lt;em&gt;wood block&lt;/em&gt; (Holzblock). Hier soll sich zeigen, ob GPT-3 mit verschachtelten Tags zurechtkommt.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-xml" data-lang="xml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c"&gt;&amp;lt;!--Output--&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;copper plates: &lt;span class="nt"&gt;&amp;lt;m&amp;gt;&lt;/span&gt;copper plates&lt;span class="nt"&gt;&amp;lt;/m&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;walnut oil: &lt;span class="nt"&gt;&amp;lt;m&amp;gt;&amp;lt;pa&amp;gt;&lt;/span&gt;walnut&lt;span class="nt"&gt;&amp;lt;/pa&amp;gt;&lt;/span&gt; oil&lt;span class="nt"&gt;&amp;lt;/m&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;wood block: &lt;span class="nt"&gt;&amp;lt;m&amp;gt;&lt;/span&gt;wood block&lt;span class="nt"&gt;&amp;lt;/m&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Das Ergebnis ist durchwachsen: &lt;code&gt;Davinci-codex&lt;/code&gt; hat nur &lt;em&gt;walnut oil&lt;/em&gt; korrekt ausgezeichnet und die verschachtelten Tags &lt;code&gt;tl&lt;/code&gt; und &lt;code&gt;m&lt;/code&gt; in &lt;em&gt;copper plates&lt;/em&gt; und &lt;em&gt;wood block&lt;/em&gt; übersehen. Wie der nächste Test zeigt, lassen sich solche Fehler indes mit einem besseren Trainingsprompt eindämmen. Nachdem ich fünf weitere Beispiele für verschachtelte Tags ergänzt hatte, lieferte &lt;code&gt;Davinci-codex&lt;/code&gt; ein nahezu makelloses Ergebnis mit einem einzigen Fehler (&lt;em&gt;oil paintbrushes&lt;/em&gt;):&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-xml" data-lang="xml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c"&gt;&amp;lt;!--Output--&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;cannon powder: &lt;span class="nt"&gt;&amp;lt;m&amp;gt;&amp;lt;wp&amp;gt;&lt;/span&gt;cannon&lt;span class="nt"&gt;&amp;lt;/wp&amp;gt;&lt;/span&gt; powder&lt;span class="nt"&gt;&amp;lt;/m&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;arquebus powder: &lt;span class="nt"&gt;&amp;lt;m&amp;gt;&amp;lt;wp&amp;gt;&lt;/span&gt;arquebus&lt;span class="nt"&gt;&amp;lt;/wp&amp;gt;&lt;/span&gt; powder&lt;span class="nt"&gt;&amp;lt;/m&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;oil paintbrushes: &lt;span class="nt"&gt;&amp;lt;m&amp;gt;&amp;lt;al&amp;gt;&lt;/span&gt;oil&lt;span class="nt"&gt;&amp;lt;/al&amp;gt;&lt;/span&gt; paintbrushes&lt;span class="nt"&gt;&amp;lt;/m&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sheep footbones: &lt;span class="nt"&gt;&amp;lt;m&amp;gt;&amp;lt;al&amp;gt;&lt;/span&gt;sheep&lt;span class="nt"&gt;&amp;lt;/al&amp;gt;&lt;/span&gt; footbones&lt;span class="nt"&gt;&amp;lt;/m&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;bronze mortar: &lt;span class="nt"&gt;&amp;lt;tl&amp;gt;&amp;lt;m&amp;gt;&lt;/span&gt;bronze&lt;span class="nt"&gt;&amp;lt;/m&amp;gt;&lt;/span&gt; mortar&lt;span class="nt"&gt;&amp;lt;/tl&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h1 id="fazit"&gt;Fazit&lt;/h1&gt;
&lt;p&gt;Vergessen wir nicht, dass diese Tests mit kleinen Textstücken gemacht wurden. Ich vermute, dass GPT-3-Modelle noch besser abschneiden, wenn Beispiele und Prompt mehr Kontext bieten; und ein Fine-Tuning mit eigens angelegten Trainingsdaten würde die Treffsicherheit der Auszeichnung zweifellos weiter erhöhen.&lt;br&gt;
Gewiss müssten diese Versuche in größerem Maßstab wiederholt werden, um die Verlässlichkeit vortrainierter Sprachmodelle nachzuweisen. Festhalten lässt sich aber schon jetzt, dass
&lt;mark&gt;dieser Ansatz Editorinnen und Editoren erlaubt, mehrere Annotationsaufgaben in wenigen einfachen Schritten zu automatisieren – und dabei womöglich enorm viel Zeit und Geld zu sparen.&lt;/mark&gt;
&lt;/p&gt;</description></item><item><title>Handschriften visualisieren 2 (Update)</title><link>https://clementgodbarge.com/de/post/treemap2/</link><pubDate>Sat, 20 Nov 2021 16:00:00 +0000</pubDate><guid>https://clementgodbarge.com/de/post/treemap2/</guid><description>&lt;p&gt;Wie versprochen: eine neue Fassung der interaktiven Treemap aus einem
, diesmal mit zwei Ansichten.&lt;/p&gt;
&lt;div class="callout flex px-4 py-3 mb-6 rounded-md border-l-4 bg-blue-100 dark:bg-blue-900 border-blue-500"
data-callout="note"
data-callout-metadata=""&gt;
&lt;span class="callout-icon pr-3 pt-1 text-blue-600 dark:text-blue-300"&gt;
&lt;svg height="24" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"&gt;&lt;path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" d="m16.862 4.487l1.687-1.688a1.875 1.875 0 1 1 2.652 2.652L6.832 19.82a4.5 4.5 0 0 1-1.897 1.13l-2.685.8l.8-2.685a4.5 4.5 0 0 1 1.13-1.897zm0 0L19.5 7.125"/&gt;&lt;/svg&gt;
&lt;/span&gt;
&lt;div class="callout-content dark:text-neutral-300"&gt;
&lt;div class="callout-title font-semibold mb-1"&gt;Hinweis&lt;/div&gt;
&lt;div class="callout-body"&gt;&lt;p&gt;Am besten wirkt die Darstellung im hellen Modus der Webseite (Mondsymbol oben rechts anklicken).&lt;/p&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;head&gt;
&lt;meta charset="UTF-8" /&gt;
&lt;meta http-equiv="X-UA-Compatible" content="IE=edge" /&gt;
&lt;meta name="viewport" content="width=device-width, initial-scale=1.0" /&gt;
&lt;title&gt;&lt;/title&gt;
&lt;link rel="preconnect" href="https://fonts.gstatic.com" /&gt;
&lt;link
href="https://fonts.googleapis.com/css2?family=Open+Sans:wght@400;700&amp;display=swap"
rel="stylesheet"
/&gt;
&lt;link rel="stylesheet" href="css/index.css" /&gt;
&lt;link rel="stylesheet" href="css/vis-treemap.css" /&gt;
&lt;link rel="stylesheet" href="css/vis-tooltip.css" /&gt;
&lt;/head&gt;
&lt;body&gt;
&lt;div class="stacked"&gt;
&lt;div class="switch"&gt;
&lt;input
type="checkbox"
name="group-by-category-switch"
id="group-by-category-switch"
checked
/&gt;
&lt;label for="group-by-category-switch"&gt; Group folios by category &lt;/label&gt;
&lt;/div&gt;
&lt;div id="treemap"&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;script src="https://cdn.jsdelivr.net/npm/d3@7.9.0/dist/d3.min.js" integrity="sha384-CjloA8y00+1SDAUkjs099PVfnY2KmDC2BZnws9kh8D/lX1s46w6EPhpXdqMfjK6i" crossorigin="anonymous" referrerpolicy="no-referrer"&gt;&lt;/script&gt;
&lt;script src="js/vis-treemap.js"&gt;&lt;/script&gt;
&lt;script src="js/vis-tooltip.js"&gt;&lt;/script&gt;
&lt;script src="js/index.js"&gt;&lt;/script&gt;
&lt;/body&gt;</description></item><item><title>Ein visueller Browser für das Archiv</title><link>https://clementgodbarge.com/de/post/treemap/</link><pubDate>Sun, 20 Jun 2021 16:00:00 +0000</pubDate><guid>https://clementgodbarge.com/de/post/treemap/</guid><description>&lt;h1 id="das-problem"&gt;Das Problem&lt;/h1&gt;
&lt;p&gt;Digitale Editionen leiden an einem Paradox: Sie machen entlegene Dokumente einem breiteren Publikum zugänglich – doch mit der Entmaterialisierung geht der sinnliche Halt verloren, und das verwirrt die Leserinnen und Leser oder schreckt sie gar davon ab, sich auf den Inhalt einzulassen. Sich durch riesige Dokumentbestände zu bewegen wird so umständlich und einschüchternd. Das gilt nicht nur für Nutzende, denen die Archivarbeit fremd ist, sondern auch für Leserinnen und Leser mit kognitiven Beeinträchtigungen.&lt;/p&gt;
&lt;h1 id="die-lösung"&gt;Die Lösung&lt;/h1&gt;
&lt;p&gt;An dieser Stelle helfen die Metadaten des Archivs weiter. Aus ihnen lassen sich interaktive visuelle Abstraktionen bauen, die den Lesenden einen anderen sinnlichen Zugang eröffnen und damit Ergonomie wie Zugänglichkeit zugleich verbessern. Um das Archiv visuell begehbar zu machen, genügt eine Treemap – oder irgendein Diagramm, das hierarchische Daten übersichtlich aufgliedert.&lt;/p&gt;
&lt;h1 id="das-experiment"&gt;Das Experiment&lt;/h1&gt;
&lt;p&gt;Mein erster Versuch passt den Code der
für &lt;code&gt;D3.js&lt;/code&gt; an und ergänzt ihn um Hyperlinks. Dargestellt wird die Handschrift BnF Ms. Fr. 640 mit ihren Folios und den Einträgen auf jedem Folio; die Farben zeigen die jeweils vorherrschende Kategorie an. Fährt man mit der Maus über einen Eintrag, erscheinen weitere Angaben, darunter der Link zur Handschrift.&lt;br&gt;
So wird die Treemap zu einem interaktiven visuellen Register, das den Lesenden auf einen Blick und ohne Verzögerung Überblick verschafft – nicht nur über den Inhalt der Handschrift, sondern auch über den Umfang jedes Folios und jedes Eintrags.&lt;br&gt;
&lt;del&gt;In den kommenden Monaten werde ich diese Idee weiterverfolgen und andere Diagramme und andere Hierarchien ausprobieren … Bleiben Sie dran!&lt;/del&gt; Eine neue Version der Treemap finden Sie
.&lt;/p&gt;
&lt;div class="callout flex px-4 py-3 mb-6 rounded-md border-l-4 bg-blue-100 dark:bg-blue-900 border-blue-500"
data-callout="note"
data-callout-metadata=""&gt;
&lt;span class="callout-icon pr-3 pt-1 text-blue-600 dark:text-blue-300"&gt;
&lt;svg height="24" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"&gt;&lt;path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" d="m16.862 4.487l1.687-1.688a1.875 1.875 0 1 1 2.652 2.652L6.832 19.82a4.5 4.5 0 0 1-1.897 1.13l-2.685.8l.8-2.685a4.5 4.5 0 0 1 1.13-1.897zm0 0L19.5 7.125"/&gt;&lt;/svg&gt;
&lt;/span&gt;
&lt;div class="callout-content dark:text-neutral-300"&gt;
&lt;div class="callout-title font-semibold mb-1"&gt;Hinweis&lt;/div&gt;
&lt;div class="callout-body"&gt;&lt;p&gt;Am besten wirkt die Darstellung im hellen Modus der Webseite (Mondsymbol oben rechts anklicken).&lt;/p&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;head&gt;
&lt;meta charset="UTF-8" /&gt;
&lt;meta http-equiv="X-UA-Compatible" content="IE=edge" /&gt;
&lt;meta name="viewport" content="width=device-width, initial-scale=1.0" /&gt;
&lt;title&gt;&lt;/title&gt;
&lt;link rel="preconnect" href="https://fonts.gstatic.com" /&gt;
&lt;link
href="https://fonts.googleapis.com/css2?family=Open+Sans:wght@400;700&amp;display=swap"
rel="stylesheet" /&gt;
&lt;link rel="stylesheet" href="css/index.css" /&gt;
&lt;link rel="stylesheet" href="css/vis-treemap.css" /&gt;
&lt;link rel="stylesheet" href="css/vis-tooltip.css" /&gt;
&lt;/head&gt;
&lt;body&gt;
&lt;p&gt;Click any cell to zoom in, or the top to zoom out.&lt;/p&gt;
&lt;div id="treemap"&gt;&lt;/div&gt;
&lt;script src="https://cdn.jsdelivr.net/npm/d3@7.9.0/dist/d3.min.js" integrity="sha384-CjloA8y00+1SDAUkjs099PVfnY2KmDC2BZnws9kh8D/lX1s46w6EPhpXdqMfjK6i" crossorigin="anonymous" referrerpolicy="no-referrer"&gt;&lt;/script&gt;
&lt;script src="js/vis-treemap.js"&gt;&lt;/script&gt;
&lt;script src="js/vis-tooltip.js"&gt;&lt;/script&gt;
&lt;script src="js/index.js"&gt;&lt;/script&gt;
&lt;/body&gt;</description></item><item><title>Das Archiv auf einen Blick</title><link>https://clementgodbarge.com/de/post/dashboard/</link><pubDate>Mon, 24 May 2021 16:00:00 +0000</pubDate><guid>https://clementgodbarge.com/de/post/dashboard/</guid><description>&lt;h1 id="das-problem"&gt;Das Problem&lt;/h1&gt;
&lt;p&gt;Historische Archive können von entmutigender Unordnung sein. Das &lt;em&gt;Mediceo del Principato&lt;/em&gt; im
ist dafür ein Musterfall: Nur ein kleiner Teil des Bestands ist erschlossen, und viele Dokumente liegen ohne erkennbaren Grund über mehr als 6.500 Bände verstreut. Hinzu kommt, dass das Archiv nur eine begrenzte Zahl von Bänden – &lt;em&gt;filze&lt;/em&gt;, wie man sie dort nennt – zur Einsicht ausgibt: in normalen Zeiten 4 &lt;em&gt;filze&lt;/em&gt; am Tag, in Pandemiezeiten indes 4 alle zwei Wochen. Wo ausführliche Findmittel fehlen, zwingt schon die schiere Größe des Archivs die Forschenden, sich Strategien zurechtzulegen, um die gesuchten Dokumente rasch aufzuspüren.&lt;/p&gt;
&lt;h1 id="die-lösung"&gt;Die Lösung&lt;/h1&gt;
&lt;p&gt;Die einen vertrauen auf den Zufall, die anderen versuchen es zusätzlich mit begründeten Vermutungen – nach Chronologie, Empfängern, Verfassern, Herkunft des Bestands, Sprache und dergleichen. Wer all diese Variablen aber gleichzeitig &lt;em&gt;vor Augen&lt;/em&gt; hat, entdeckt in der Struktur des Archivs womöglich Muster, mit denen niemand gerechnet hatte, und kann seine Vermutungen entsprechend schärfen. Meine Erfahrung ist: Die Metadaten, die Forschende ohnehin in einer Tabelle sammeln, verschaffen, einmal grafisch aufbereitet, im Archiv einen ganz anderen Überblick.&lt;/p&gt;
&lt;h1 id="das-experiment"&gt;Das Experiment&lt;/h1&gt;
&lt;p&gt;Ich arbeite derzeit über die Korrespondenz eines Spions des 16. Jahrhunderts. Seine Briefe verteilen sich auf Hunderte von &lt;em&gt;filze&lt;/em&gt;; er schrieb sie unter wechselnden Identitäten, an wechselnde und mitunter überraschende Adressaten, von wechselnden Orten aus. Um jene &lt;em&gt;filze&lt;/em&gt; zu finden, in denen die erhofften Briefe mit einiger Wahrscheinlichkeit liegen, habe ich mir ein Dashboard gebaut – eine interaktive Webanwendung zur Datenvisualisierung (
), die Daten aller Art, darunter geografische und chronologische Angaben, mit einem hierarchischen Diagramm (
) des Bestands verknüpft. Das Dashboard zeigt mir auf einen Blick, was schon gefunden ist, wie viel das ausmacht, und gibt mir eine ungefähre Ahnung, wo weitere Briefe zu vermuten wären. Klicke ich zudem einzelne Variablen an, richten sich alle Diagramme neu aus und lassen bestimmte Zusammenhänge hervortreten.&lt;/p&gt;
&lt;h1 id="wie-es-weitergeht"&gt;Wie es weitergeht&lt;/h1&gt;
&lt;p&gt;Vielleicht wichtiger noch: Dieses Dashboard lässt sich in ein visuelles Register umwidmen. Sobald die kritische Edition dieser Briefe online erscheint, wird es als zweiter Zugang dienen, von dem aus die Leserinnen und Leser die Daten durchstöbern können. Aus Gründen der Vertraulichkeit kann ich vorerst nur einen geschwärzten Screenshot zeigen; das vollständige Dashboard gebe ich im kommenden Jahr frei. Ein Prototyp wird schon bald verfügbar sein. Bleiben Sie dran!&lt;/p&gt;</description></item><item><title>Semantische Auszeichnung in BnF Ms. Fr. 640 sichtbar machen</title><link>https://clementgodbarge.com/de/post/visualization/</link><pubDate>Sun, 20 Dec 2020 18:15:00 +0000</pubDate><guid>https://clementgodbarge.com/de/post/visualization/</guid><description>&lt;h1 id="überblick"&gt;Überblick&lt;/h1&gt;
&lt;p&gt;Datenreiche wissenschaftliche Editionen stecken voller editorischer Annotationen, die sich für die verschiedensten Forschungszwecke auslesen, analysieren und visualisieren lassen. So auch
, erschienen 2020, deren Metadaten als Datei im GitHub-Repository der Edition zum Herunterladen bereitliegen. In diesem Beitrag zeige ich, wie man all diese Variablen in einer Korrelationsmatrix zusammenführt und auf verschiedene Weise sichtbar macht.&lt;/p&gt;
&lt;h1 id="die-daten"&gt;Die Daten&lt;/h1&gt;
&lt;p&gt;Das Making and Knowing Project erzeugt eine Tabelle mit laufend aktualisierten Angaben zum Inhalt der Handschrift: &lt;code&gt;entry_metadata.csv&lt;/code&gt;. Die Datei liegt im
des Making &amp;amp; Knowing Project. Wer mag, kann sich auch eigene .csv-Dateien mit zusätzlicher Auszeichnung erzeugen – dank Matthew Kumars vorzüglichem
, einer Python-Fassung von BnF Ms. Fr. 640.&lt;/p&gt;
&lt;h2 id="python-einrichten"&gt;Python einrichten&lt;/h2&gt;
&lt;p&gt;Wir nehmen Pandas für die Datenaufbereitung, Matplotlib und seaborn für die Heatmaps und schließlich NetworkX, um aus den Korrelationen Netzwerke zu bauen.&lt;br&gt;
Für Variablen dieser Art meiden wir die Pearson-Korrelation und greifen stattdessen zur 𝜙𝐾-Methode. Lesen Sie unbedingt
, was es mit diesem Korrelationsmaß und der zugehörigen Bibliothek &lt;code&gt;PhiK&lt;/code&gt; auf sich hat.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-python" data-lang="python"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;#install packages&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;pip&lt;/span&gt; &lt;span class="n"&gt;install&lt;/span&gt; &lt;span class="n"&gt;phik&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# import modules&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="nn"&gt;pandas&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="nn"&gt;pd&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="nn"&gt;matplotlib.pyplot&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="nn"&gt;plt&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="nn"&gt;seaborn&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="nn"&gt;sns&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="nn"&gt;networkx&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="nn"&gt;nx&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="die-daten-vorbereiten"&gt;Die Daten vorbereiten&lt;/h2&gt;
&lt;p&gt;Zunächst laden wir die aktuelle Metadatendatei der Edition aus dem Ordner „metadata“ ihres
herunter.
Wir behalten nur die Spalten, die wir brauchen. Für diese Demonstration nehme ich sämtliche semantischen Tags aus der englischen Übersetzung &lt;code&gt;tl&lt;/code&gt;; ebenso gut könnten Sie die Tags der französischen Transkription &lt;code&gt;tc&lt;/code&gt; oder der normalisierten Fassung &lt;code&gt;tcn&lt;/code&gt; wählen.
Die Werte sind durch Semikolons getrennt, und Python soll sie für uns zählen. Dazu dient die Stack-Unstack-Methode mit dem regulären Ausdruck &lt;code&gt;[^;\s][^\;]*[^;\s]*&lt;/code&gt;.
Damit die Matrix lesbarer wird, benennen wir die Spalten um. Wer es eilig hat, kann diesen Schritt überspringen – nur sollte man im Kopf behalten, dass unser Dataframe an dieser Stelle &lt;code&gt;tagsrn&lt;/code&gt; heißt.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-python" data-lang="python"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# load the edition&amp;#39;s metadata&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;df&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;pd&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;read_csv&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;entry_metadata.csv&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# select the tags you want to correlate&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;dftags&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;df&lt;/span&gt;&lt;span class="p"&gt;[[&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;al_tl&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;bp_tl&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;cn_tl&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;df_tl&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;env_tl&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;m_tl&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;md_tl&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;ms_tl&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;mu_tl&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;pa_tl&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;pl_tl&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;pn_tl&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;pro_tl&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;sn_tl&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;tl_tl&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;tmp_tl&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;wp_tl&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;de_tl&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;el_tl&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;it_tl&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;la_tl&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;oc_tl&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;po_tl&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;]]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# count comma separated values&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;tagcount&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;dftags&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;stack&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;dropna&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="kc"&gt;False&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;str&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;count&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;r&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;[^;\s][^\;]*[^;\s]*&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;unstack&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# rename columns&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;tagsrn&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;tagcount&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;rename&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;columns&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;al_tl&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;animals&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;bp_tl&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;body parts&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;cn_tl&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;currency&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;df_tl&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;definitions&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;env_tl&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;environment&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;m_tl&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;material&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;md_tl&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;medical&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;ms_tl&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;measurement&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;mu_tl&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;music&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;pa_tl&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;plant&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;pl_tl&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;toponym&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;pn_tl&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;person&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;pro_tl&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;profession&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;sn_tl&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;sensory&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;tl_tl&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;tool&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;tmp_tl&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;temporal&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;wp_tl&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;weapons&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;de_tl&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;German&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;el_tl&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;Greek&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;it_tl&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;Italian&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;la_tl&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;Italian&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;oc_tl&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;Occitan&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;po_tl&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;Poitevin&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;})&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h1 id="korrelieren"&gt;Korrelieren&lt;/h1&gt;
&lt;p&gt;Ist der Dataframe bereinigt, können wir die Korrelationskoeffizienten zwischen den Variablen berechnen. An dieser Stelle sollte man seine Daten wirklich verstehen und sich vergewissern, dass man das passende Korrelationsmaß verwendet; das Paket &lt;code&gt;pandas-profiling&lt;/code&gt; leistet dabei gute Dienste.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-python" data-lang="python"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# calculate correlation coefficient with the phi k method&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;cortag&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;tagsrn&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;phik_matrix&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;code&gt;cortag&lt;/code&gt; ist unsere Korrelationsmatrix. Nun können wir verschiedene Darstellungen ausprobieren.&lt;/p&gt;
&lt;h1 id="visualisieren"&gt;Visualisieren&lt;/h1&gt;
&lt;p&gt;Am nächsten liegt eine farbkodierte Matrix, erzeugt mit dem
von &lt;code&gt;seaborn&lt;/code&gt;.&lt;/p&gt;
&lt;h3 id="korrelations-heatmap"&gt;Korrelations-Heatmap&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-python" data-lang="python"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;f&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;ax&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;plt&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;subplots&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;figsize&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;16&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;14&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;ax&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;sns&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;heatmap&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;cortag&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;linewidths&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mf"&gt;.03&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;vmin&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;cmap&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;Oranges&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;square&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="kc"&gt;True&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;
&lt;figure &gt;
&lt;div class="flex justify-center "&gt;
&lt;div class="w-full" &gt;
&lt;img alt="Korrelations-Heatmap von BnF Ms. Fr. 640"
srcset="https://clementgodbarge.com/post/visualization/heatmap_hu_943abdd98e24b0a3.webp 320w, https://clementgodbarge.com/post/visualization/heatmap_hu_eca41311a0e0ac17.webp 480w, https://clementgodbarge.com/post/visualization/heatmap_hu_1650defb643c0285.webp 760w"
sizes="(max-width: 480px) 100vw, (max-width: 768px) 90vw, (max-width: 1024px) 80vw, 760px"
src="https://clementgodbarge.com/post/visualization/heatmap_hu_943abdd98e24b0a3.webp"
width="760"
height="665"
loading="lazy" data-zoomable /&gt;&lt;/div&gt;
&lt;/div&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;Wer den Text gut kennt, sieht sofort, dass die Heatmap sehr wohl Sinn ergibt. Personennamen etwa korrelieren stark mit Latein – kein Wunder, war es doch gerade unter den Humanisten des 16. Jahrhunderts üblich, sie zu latinisieren.&lt;/p&gt;
&lt;p&gt;Manche werden einwenden, die Heatmap renne offene Türen ein. Ganz unrecht haben sie nicht; auf den ersten Blick scheinen die medizinischen Tags das zu bestätigen, korrelieren sie doch erwartungsgemäß mit Körperteilen, Maßangaben und Pflanzen.&lt;/p&gt;
&lt;p&gt;Liest man die Heatmap aber genauer, Zeile für Zeile, stößt man auf durchaus interessante und unerwartete Zusammenhänge. Dass medizinische Tags mit italienischen und lateinischen Wörtern korrelieren, gibt etwa Hinweise auf die Herkunft der medizinischen Rezepte in Ms. Fr. 640. Und die Korrelation von Berufen, Definitionen und Maßangaben zeigt, wie stark die berufliche Identität den technischen Diskurs des 16. Jahrhunderts strukturiert.&lt;/p&gt;
&lt;h3 id="korrelations-clustermap"&gt;Korrelations-Clustermap&lt;/h3&gt;
&lt;p&gt;Heatmaps sind fürs „Explorieren“ nützlich, wirken auf ein Publikum aber leicht unübersichtlich – zumal, wenn man bestimmte semantische Cluster in der Handschrift erörtern (oder noch suchen) will. Hier kann das Modul &lt;code&gt;clustermap&lt;/code&gt; von Seaborn interessante Ergebnisse liefern.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-python" data-lang="python"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;clustermap&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;sns&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;clustermap&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;cortag&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;figsize&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;12&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;13&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt; &lt;span class="n"&gt;dendrogram_ratio&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mf"&gt;.1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mf"&gt;.2&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt; &lt;span class="n"&gt;vmin&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;cmap&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;Oranges&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;cbar_pos&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mf"&gt;.06&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mf"&gt;.12&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mf"&gt;.03&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mf"&gt;.68&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;
&lt;figure &gt;
&lt;div class="flex justify-center "&gt;
&lt;div class="w-full" &gt;
&lt;img alt="Korrelations-Clustermap von BnF Ms. Fr. 640"
srcset="https://clementgodbarge.com/post/visualization/clustermap_hu_677e6e5028f9d902.webp 320w, https://clementgodbarge.com/post/visualization/clustermap_hu_2dac945fa40a8ac6.webp 480w, https://clementgodbarge.com/post/visualization/clustermap_hu_3abaf7b36a53572.webp 753w"
sizes="(max-width: 480px) 100vw, (max-width: 768px) 90vw, (max-width: 1024px) 80vw, 760px"
src="https://clementgodbarge.com/post/visualization/clustermap_hu_677e6e5028f9d902.webp"
width="753"
height="760"
loading="lazy" data-zoomable /&gt;&lt;/div&gt;
&lt;/div&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;Abgesehen davon, dass sie wie ein verpixeltes Insekt aussieht (ja, „pixelated“ steht im OED), trennt die Clustermap sauber die isolierten Tags (oben und links) von den stärker vernetzten. Auch abgelegene Cluster wie Musik und Poitevin (wer hätte das gedacht!) heben sich von zentraleren ab – Maßangaben, Material, Definitionen, Waffen. Die Berufe sind zwar besser vernetzt, gehören aber, jedenfalls in dieser Matrix, keinem bestimmten Cluster an.&lt;/p&gt;
&lt;h3 id="korrelationsnetzwerk"&gt;Korrelationsnetzwerk&lt;/h3&gt;
&lt;p&gt;Will man die Korrelationen der Matrix noch stärker verdichten, bieten Netzwerkgraphen eine elegante Lösung – besonders dort, wo es darum geht, den Inhalt der Handschrift zu vermitteln.&lt;br&gt;
Dafür müssen wir die Matrix in eine Liste von Kanten und Knoten verwandeln und einen Schwellenwert festlegen, der die schwächeren Korrelationen aus dem Graphen verbannt.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-python" data-lang="python"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# transform the data&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;links&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;cortag&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;stack&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;reset_index&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;links&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;columns&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;var1&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;var2&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;value&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# threshold &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;links_filtered&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;links&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;loc&lt;/span&gt;&lt;span class="p"&gt;[(&lt;/span&gt;&lt;span class="n"&gt;links&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;value&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="mf"&gt;.6&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;links&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;var1&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;!=&lt;/span&gt; &lt;span class="n"&gt;links&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;var2&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;])]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;links_filtered&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# create edges&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;G&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;nx&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;from_pandas_edgelist&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;links_filtered&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;var1&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;var2&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# draw network using Kamada &amp;amp; Kawai&amp;#39;s algorithm &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;plt&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;figure&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="n"&gt;figsize&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;12&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="mi"&gt;12&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;nx&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;draw_kamada_kawai&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;G&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;with_labels&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kc"&gt;True&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;node_color&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;red&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;node_size&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;400&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;edge_color&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;black&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;linewidths&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;font_size&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;14&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;
&lt;figure &gt;
&lt;div class="flex justify-center "&gt;
&lt;div class="w-full" &gt;
&lt;img alt="Korrelationsgraph von BnF Ms. Fr. 640"
srcset="https://clementgodbarge.com/post/visualization/graph_hu_396032c00cb7f7f3.webp 320w, https://clementgodbarge.com/post/visualization/graph_hu_85295e5fba6293bc.webp 480w, https://clementgodbarge.com/post/visualization/graph_hu_4190dbca7e86ffc1.webp 760w"
sizes="(max-width: 480px) 100vw, (max-width: 768px) 90vw, (max-width: 1024px) 80vw, 760px"
src="https://clementgodbarge.com/post/visualization/graph_hu_396032c00cb7f7f3.webp"
width="760"
height="760"
loading="lazy" data-zoomable /&gt;&lt;/div&gt;
&lt;/div&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;Sind es zu viele Kanten und Knoten, lässt sich der Schwellenwert anpassen, bis das Bild aufgeräumter wird. Oder Sie exportieren den Graphen mit &lt;code&gt;.write_gexf()&lt;/code&gt; und spielen in &lt;code&gt;Gephi&lt;/code&gt; damit weiter.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-python" data-lang="python"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;nx&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;write_gexf&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;G&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;graph.gexf&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Das Ergebnis sehen Sie am Anfang dieses Beitrags.&lt;/p&gt;
&lt;h3 id="update-kreisförmiges-gewichtetes-netzwerk"&gt;Update: Kreisförmiges gewichtetes Netzwerk&lt;/h3&gt;
&lt;p&gt;Auf der Suche nach Wegen, Korrelationsmatrizen als gewichtete Netzwerke darzustellen, bin ich auf einen interessanten Ansatz gestoßen, den
und den ich hier auf unseren Datensatz übertrage.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-python" data-lang="python"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# create graph weighted by correlation coefficients (unfiltered)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;Gx&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;nx&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;from_pandas_edgelist&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;links&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;var1&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;var2&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;edge_attr&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;value&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# determine a threshold to remove some edges&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;threshold&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mf"&gt;0.4&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# list to store edges to remove&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;remove&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# loop through edges in Gx and find correlations which are below the threshold&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;var1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;var2&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;Gx&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;edges&lt;/span&gt;&lt;span class="p"&gt;():&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;corr&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;Gx&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;var1&lt;/span&gt;&lt;span class="p"&gt;][&lt;/span&gt;&lt;span class="n"&gt;var2&lt;/span&gt;&lt;span class="p"&gt;][&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;value&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="c1"&gt;#add to remove node list if abs(corr) &amp;lt; threshold&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="nb"&gt;abs&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;corr&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt; &lt;span class="n"&gt;threshold&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;remove&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;append&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="n"&gt;var1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;var2&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# remove edges contained in the remove list&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;Gx&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;remove_edges_from&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;remove&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;str&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;len&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;remove&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39; edges removed&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Sind einige Kanten entfernt, legen wir Farbe und Stärke der übrigen fest.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-python" data-lang="python"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# determine the colors of edges&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;assign_colour&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;correlation&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;correlation&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;=&lt;/span&gt; &lt;span class="mf"&gt;0.8&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;#ff872c&amp;#39;&lt;/span&gt; &lt;span class="c1"&gt;# orange&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;else&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;#f11d28&amp;#39;&lt;/span&gt; &lt;span class="c1"&gt;# red&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;assign_thickness&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;correlation&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;benchmark_thickness&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;scaling_factor&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;benchmark_thickness&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="nb"&gt;abs&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;correlation&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;**&lt;/span&gt;&lt;span class="n"&gt;scaling_factor&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;assign_node_size&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;degree&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;scaling_factor&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;50&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;degree&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="n"&gt;scaling_factor&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Außerdem bekommen die Knoten eine Größe, die ihrer Zahl an Verbindungen entspricht.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-python" data-lang="python"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# assign node size depending on number of connections (degree)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;node_size&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;key&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;value&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="nb"&gt;dict&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Gx&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;degree&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;items&lt;/span&gt;&lt;span class="p"&gt;():&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;node_size&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;append&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;assign_node_size&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;value&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Heraus kommt ein gewichteter Graph, der mehr Knoten und erheblich mehr Kanten verträgt und dabei lesbar und aussagekräftig bleibt.&lt;/p&gt;
&lt;p&gt;
&lt;figure &gt;
&lt;div class="flex justify-center "&gt;
&lt;div class="w-full" &gt;
&lt;img alt="Gewichteter Korrelationsgraph von BnF Ms. Fr. 640"
srcset="https://clementgodbarge.com/post/visualization/weightedgraph_hu_7b75f2e5fc7edb1b.webp 320w, https://clementgodbarge.com/post/visualization/weightedgraph_hu_9f0550eb49c17f11.webp 480w, https://clementgodbarge.com/post/visualization/weightedgraph_hu_a9106989817361fb.webp 760w"
sizes="(max-width: 480px) 100vw, (max-width: 768px) 90vw, (max-width: 1024px) 80vw, 760px"
src="https://clementgodbarge.com/post/visualization/weightedgraph_hu_7b75f2e5fc7edb1b.webp"
width="760"
height="760"
loading="lazy" data-zoomable /&gt;&lt;/div&gt;
&lt;/div&gt;&lt;/figure&gt;
&lt;/p&gt;</description></item></channel></rss>