Exkurs: Reguläre Ausdrücke#
In diesem kleinen Exkurs lernen Sie, wie Sie komplexe Muster in Zeichenketten finden und dadurch gezieltere Operationen als mit den nativen String-Funktionen ausführen können.
Lernziele#
Was Sie am Ende der Lektion beantworten können sollen:
Was sind Reguläre Ausdrücke?
Wie nutzt man Reguläre Ausdrücke in Python?
Wir empfehlen zur Vertiefung auch die folgenden Ressourcen:
Automate the Boring Stuff: Pattern Matching with Regular Expressions
Zur Vertiefung Regulärer Ausdrücke: RegExOne
Zum Testen von Regular Expressions: Regular Expressions 101
Reguläre Ausdrücke#
Wir können Ihnen im Rahmen dieses Exkurses nur einen ganz grundlegenden Überblick bieten. Wenn Sie aber weitergehend mit Textquellen und umfangreichen Datenbeständen arbeiten wollen, dann lohnt sich die Vertiefung. Mit Regulären Ausdrücken können Sie nämlich Informationen aus unstrukturierten Text- beziehungsweise Datensammlungen extrahieren, indem nach Übereinstimmungen anhand von spezifischen Suchmustern gesucht wird. Denken Sie beispielsweise an Telefonnummern, E-Mail-Adressen oder Datumsangaben, die häufig auf eine bestimmte Art und Weise strukturiert sind. Statt nach konkreten E-Mail-Adressen zu suchen, können Sie durch eine abstrakte Notation diese Struktur beschreiben und nach Übereinstimmungen suchen.
Reguläre Ausdrücke sind programmiersprachenunabhängig, sie sind also keine Eigenheit von Python allein, sondern eigenständig anwendbar. Auch viele Textverarbeitungsprogramme wie Word bieten im Funktionsumfang des “Suchen-und-Ersetzens” etwa die Möglichkeit, Reguläre Ausdrücke zu nutzen. Einmal richtig eingearbeitet, können Sie einem viel Zeit ersparen.
Um Reguläre Ausdrücke in Python einsetzen zu können, müssen Sie eine spezielle Bibliothek importieren: re. Das tun Sie über den bereits kennengelernten Befehl import.
import re
text = '''Das Referat „Text+Berg – 150 Jahre alpinistische Texte:
OCR-Fehler, Crowd Correction“ von SIMON CLEMATIDE (Zürich) diskutierte die
Voraussetzungen für erfolgreiches Crowd Sourcing.[20] Im Rahmen des Projekts
Text+Berg realisierte das Institut für Computerlinguistik der Universität Zürich
eine Online-Plattform zur Korrektur des OCR-Textes der digitalisierten Jahrbücher
des Schweizerischen Alpenklubs (SAC) von 1864 bis 1899.[21] Entscheidend
für die Motivierung von Freiwilligen und damit für den Erfolg des Vorhabens waren e
ine sorgfältig programmierte Benutzeroberfläche und ein einfacher Workflow. Dazu kamen
begleitende Massnahmen, um die Motivation der Teilnehmenden aufrechtzuerhalten.
Hierzu gehörten spielerische Elemente und Layout-Massnahmen, die den Teilnehmenden
Rückmeldungen zum Datenzustand und zur geleisteten Arbeit geben. Ein Vorteil war,
dass es sich beim potentiellen Teilnehmerkreis um gut organisierte und am Thema
interessierte Vereinsmitglieder mit hoher Sachkenntnis handelte.'''
Wir wollen nun auf Basis eines Auszugs aus dem Tagungsbericht “Digitale Daten in den Geisteswissenschaften. Interdisziplinäre Perspektiven für semantische und strukturelle Analysen” einige Basics der re-Bibliothek und der RegEx-Syntax kennenlernen. Hier der Übersicht halber noch einmal der Text:
Das Referat „Text+Berg – 150 Jahre alpinistische Texte: OCR-Fehler, Crowd Correction“ von SIMON CLEMATIDE (Zürich) diskutierte die Voraussetzungen für erfolgreiches Crowd Sourcing.[20] Im Rahmen des Projekts Text+Berg realisierte das Institut für Computerlinguistik der Universität Zürich eine Online-Plattform zur Korrektur des OCR-Textes der digitalisierten Jahrbücher des Schweizerischen Alpenklubs (SAC) von 1864 bis 1899.[21] Entscheidend für die Motivierung von Freiwilligen und damit für den Erfolg des Vorhabens waren eine sorgfältig programmierte Benutzeroberfläche und ein einfacher Workflow. Dazu kamen begleitende Massnahmen, um die Motivation der Teilnehmenden aufrechtzuerhalten. Hierzu gehörten spielerische Elemente und Layout-Massnahmen, die den Teilnehmenden Rückmeldungen zum Datenzustand und zur geleisteten Arbeit geben. Ein Vorteil war, dass es sich beim potentiellen Teilnehmerkreis um gut organisierte und am Thema interessierte Vereinsmitglieder mit hoher Sachkenntnis handelte.
Reguläre Ausdrücke werden in Python als Strings dargestellt. Es empfiehlt sich, mit sogenannten raw strings zu arbeiten. Dazu setzen Sie vor den String einfach ein klein geschriebenes “r”.
r"ente" repräsentiert die einfachste Form Regulärer Ausdrücke. Er besteht lediglich aus Literalen, also einer schlichten Zeichenfolge, die für sich selbst steht (abcdefg…, ABCDEFG…, 0123456…). Es sind keine Metazeichen enthalten, die eine Sonderbedeutung tragen. Sehen Sie sich den Output dieses Beispiels an:
match_one = re.search(r"ente", text)
print(match_one)
Grundlegende Methoden#
Wir haben hier die Methode search(regex, string) verwendet, um nach dem Vorkommen eines Teilstrings zu suchen, der dem Regulären Ausdruck r"ente" entspricht. Zurückgeliefert wird bei dieser Methode die erste Übereinstimmung. War die Suche erfolgreich dann wird der Fund als Match-Objekt gespeichert, andernfalls liefert die Suche ein None zurück. Mit einem solchen Match-Objekt, also dem Wissen, dass ein Zeichenmuster in einem Text enthalten ist, können Sie auf vielfältige Weise weiterarbeiten. Sie wissen allerdings nicht mehr über die Übereinstimmung als ihre Position (span=(727, 731) gibt die Indexpositionen an, an denen die Übereinstimmung beginnt und endet – das können Sie mit dem Slicingtext[727:731] leicht gegenprüfen). Zudem wird Ihnen bei dieser Methode lediglich die erste Übereinstimmung zurückgeliefert. Wenn wir uns an unsere bisherige Arbeit mit Textdaten zurückerinnern, dann interessierte uns nicht nur das erste Vorkommen, sondern häufig die Gesamtanzahl.
Hierfür können wir die Methode findall(regex, string) nutzen. Sie liefert alle Übereinstimmungen eines Regulären Ausdrucks im Listenformat zurück. Die Zeichenkette wird von links nach rechts gescannt und dementsprechend stellt sich auch die Reihenfolge der Listenelemente dar. Auf diese Weise können wir prüfen, wie oft die Zeichenfolge “ein” im Auszug vorkommt:
match_two = re.findall(r"ein", text)
print(match_two)
Die Mustersuche lediglich mit Literalen birgt, wie an diesem Beispiel festgestellt werden kann, die Gefahr des Over Matchings, das heißt, wir erhalten zu viele falsche positive Ergebnisse (false positives). Der Ausdruck ist zu unspezifisch und bietet zu viel Spielraum. Es wird beim Matching kein Unterschied gemacht, ob die Zeichenfolge für das Wort “ein” oder einen Teilstring in einem Wort wie “Vereinsmitglieder” steht. Auch wenn wir auf herkömmliche Weise mit Booleschen Operatoren wie in arbeiten, werden wir mit dem Problem des Over Matching konfrontiert:
# create empty list
matches = []
# split text
text_split = text.split()
# check if string is in text and append matches to list
for each in text_split:
if "ein" in each:
matches.append(each)
# output
print(matches)
Zwar ließe sich dieses einfache Problem mit der Prüfung der Identität (==) noch relativ umstandslos lösen, aber je komplizierter das gesuchte Muster, desto aufgeblähter würde der Code. Die spezifische Syntax der Regulären Ausdrücke ermöglicht über den Abgleich von Literalen hinaus die Definition komplexer Strukturen. Diese Syntax wollen wir uns nun genauer anschauen.
Zuvor noch ein kleiner Hinweis: Mit regulären Ausdrücken können wir auch auf eine umfassendere Art und Weise Teilstrings ersetzen respektive entfernen oder Texte aufteilen. Hierfür stehen die folgenden Methoden zur Verfügung:
Die Methode
sub(regex, repl, string)nimmt einen Regulären Ausdruck und sucht nach Übereinstimmungen im String. Die Matches werden dann durch ein Replace-Argument ersetzt. Optional kann angegeben werden, wie oft der Vorgang des Ersetzens durchzuführen ist.Die Methode
re.split(regex, string, maxsplit=0)bietet die Möglichkeit, einen String auf Basis des Vorkommens eines bestimmten Musters aufzusplitten.
Es gibt noch eine Vielzahl weiterer Funktionen. Die Dokumentation liefert Ihnen diesbezüglich einen umfassenden Überblick. Wir werden nachfolgend vor allem mit findall oder sub arbeiten.
Die Syntax#
In Regulären Ausdrücken haben zahlreiche Zeichen eine Sonderbedeutung, was die Definition abstrakter Muster ermöglicht. Nachfolgend finden Sie einige grundlegende Elemente der Notation aufgelistet.
Zeichenklassen#
\w= Alphanumerische Zeichen, inklusive Unterstrich; entspricht[a-zA-Z0-9_]\W= alles außer alphanumerische Zeichen; entspricht[^a-zA-Z0-9_]\d= eine Ziffer; entspricht[0-9]\D= alle Zeichen außer Ziffern; entspricht[^0-9]\s= ein Whitespace, also Leerzeichen, Tabs, Newlines usw.; entspricht[\t\n\r\f\v]\S= alles außer Whitespaces; entspricht[^\t\n\r\f\v]
Aufgabe: Formulieren Sie mit den Zeichenklassen einige Reguläre Ausdrücke, um ein Gefühl dafür zu bekommen, wie sie funktionieren.
#example
nonalpha_chars = re.findall(r"\W", text)
print(set(nonalpha_chars)) # use set() to remove duplicates
# your code
Aufgabe: Recherchieren Sie in der Dokumentation des re-Moduls wofür die nachfolgenden Zeichenklassen stehen. Definieren Sie mit ihnen und Literalen einen regulären Ausdruck, der nur das Wort “ein” matcht:
\b=\B=
# your code
Aufgabe: Lesen Sie auf Basis der obigen Notation die Jahreszahlen aus dem Textauszug aus. Nutzen Sie dazu die findall-Methode.
# your code
Metazeichen#
wie “[”, “]”, “^”, “", “(”, oder “)” helfen dabei, etwas über Zeichen auszudrücken:
.= Platzhalter für ein beliebiges Zeichen außer Newlines; zwei Punkte stehen entsprechend für zwei beliebige Zeichen usw.r".ut"kann demnach mit “hut”, “tut”, “gut” usw. matchen.Die eckigen Klammern “
[” und “]” werden zur Definition einer Zeichenauswahl eingesetzt.Bsp. A)
[abc]matcht “a”, “b” oder “c”Bsp. B)
[a-c]kürzt die Auswahl aus Beispiel A ab, wenn nach einer Sequenz gesucht wird, matcht “a”, “b”, oder “c”.Bsp. C) Das Caret-Zeichen “^” in den Sets
[^abc]und[^a-c]negiert die Angabe im Range, gematcht wird also irgendein Zeichen außer “a”, “b” oder “c”Wichtig: Sonderzeichen verlieren in Sets ihre Bedeutung.
"[+*]"matcht mit den für sich selbst stehenden Zeichen “+” oder “*”. Zeichenklassen wie/woder/Wbehalten weiterhin ihre Bedeutung in Sets.^ = matcht einen Zeilenanfang; im
MULTILINE-Modus wird direkt nach einem Newline gematchtSonderbedeutung: Das sogenannte Caret-Zeichen bedeutet, wenn es in einer Zeichenspanne direkt hinter der öffnenden Klammer steht, die Negation der Auswahl. Denken Sie an die Zeichenklassen
\D=[^0-9]oder\W=[^a-zA-Z0-9_].$ = matcht das Zeilenende vor einem Newline (oder schlicht das Ende einer Zeichenkette)
|= repräsentiert eine Alternative, z.B. kann der Reguläre Ausdruckr"e[s|r]"sowohl Übereinstimmungen mit “er” als auch mit “es” identifizieren()= steht für eine Gruppierung, das heißt, Sie können bestimmte Teilausdrücke zusammenfassen: z.B. “(Haus|Master)arbeit”\Der Backslash kann genutzt werden um die besondere Bedeutung der Metazeichen aufzuheben. In einem Regulären Ausdruck stehen sie dann nur noch für sich selbst. Bsp.:r"\[[0-9]\]"matcht eine Zahl, die in eckigen Klammern steht, beispielsweise “[1]”.
Schauen wir uns zwei Beispiele zum Einsatz von Metazeichen an:
any_short_words = re.findall(r"\b\w\w[s|n]\b", text)
print(any_short_words)
some_short_words = re.findall(r"\b[A-Z].[s|n]\b", text)
print(some_short_words)
Können Sie die Muster der Regulären Ausdrücke beschreiben? Ihre Antwort
Multipliers#
Sie haben nun schon einige Grundlagen kennengelernt. Was noch fehlt, ist die Möglichkeit darzustellen, dass bestimmte Teilausdrücke wiederholt werden sollen. Um die Jahreszahlen aus dem Textauszug auszulesen, sah Ihr Regulärer Ausdruck oben wahrscheinlich ungefähr so aus:
years_option_a = re.findall(r"\d\d\d\d", text)
print(years_option_a)
years_option_b = re.findall(r"[0-9][0-9][0-9][0-9]", text)
print(years_option_b)
Mit sogenannten Multiplikatoren oder Quantoren können Sie diese Ausdrücke vereinfachen:
{m}= gibt an, dass genau m Zeichenfolgen des voranstehenden Regulären Ausdrucks gematcht werden sollen
Angewendet auf die Anforderung, alle Jahreszahlen aus dem Textauszug auszulesen, sieht der verkürzte Reguläre Ausdruck nun wie folgt aus:
years = re.findall(r"\d{4}", text)
print(years)
Es ist auch möglich eine Range aus Minimal- und Maximalwiederholung anzugeben:
{m,n}= gibt an, dass mindestens m und maximal n Zeichenfolgen des voranstehenden Regulären Ausdrucks gematcht werden sollen
Wenn wir aus dem Textauszug Zahlen mit mindestens zwei und maximal drei Zeichenfolgen auslesen wollen, sieht der entsprechende Code wie folgt aus:
numbers = re.findall(r"\d{2,3}", text)
print(numbers)
Was fällt Ihnen bei diesem Output einschränkend auf? Ihre Antwort
Es kann auch möglich sein, dass wir nach einem Muster suchen, das bestimmte Substrings enthalten kann, aber nicht muss. Hierfür steht das ? zur Verfügung. In der Notation der Range entspricht es dem Zusatz {0,1}. Der Ausdruck r”\beine?\b” liefert beispielsweise Übereinstimmungen sowohl für “ein” als auch “eine”.
var = re.findall(r"\beine?\b", text)
print(var)
*bedeutet, dass das voranstehende Zeichen beziehungsweise der voranstehende Teilausdruck keinmal oder beliebig oft vorkommen kann. In der Notation der Range entspricht das dem Zusatz{0,}
numbers = re.findall(r"\d\d*", text)
print(numbers)
+bedeutet, dass das voranstehende Zeichen beziehungsweise der voranstehende Teilausdruck mindestens einmal oder beliebig oft vorkommen kann. In der Notation der Range entspricht das dem Zusatz{1,}
word_ending = re.findall(r"\w+g\b", text)
print(word_ending)
word_endings = re.findall(r"\w+[g|n]\b", text)
print(word_endings)
specific_words = re.findall(r"Vor\w+", text)
print(specific_words)
Beschreiben Sie die Muster der obigen drei Regulären Ausdrücke: Ihre Antwort
Wir haben jetzt ausreichend Mittel an der Hand, um beispielsweise alle Sätze aus dem Auszug auszulesen und in einer Liste zu speichern:
# extract all sentences
sentences = re.findall(r".+?\.", text)
print(sentences)
Beschreiben Sie das Muster des Regulären Ausdrucks. Gibt es Verbesserungspotenzial? Ihre Antwort
Übungsaufgabe#
Nachdem Sie nun die Basics im Umgang mit Regulären Ausdrücken kennengelernt haben, sollen Sie auf Basis des gesamten Tagungsberichts nach einigen Mustern suchen und dafür Reguläre Ausdrücke formulieren.
Extrahieren Sie
alle Zahlen
alle Anmerkungen, wie zum Beispiel “[1]”
alle Wörter, die mit einem “A” oder “a” beginnen
alle Bestandteile, die in Anführungszeichen gesetzt sind
alle Wörter am Ende eines Abschnitts (Tipp: Schauen Sie sich in der Dokumentation an, wie der MULTILINE-Modus funktioniert)
Prüfen Sie außerdem, ob es hier doppelte Leerzeichen gibt und wenn ja wie oft
Entfernen Sie alle Anmerkungen und überflüssigen Leerzeichen. Weisen Sie den Text einer neuen Variablen zu.
Zusatz:
Knobelaufgabe: Extrahieren Sie alle Personennamen (Vor- und Nachname) und Herkunftsorte.
Die extrahierten Daten müssen Sie nicht weiterverarbeiten. Es genügt, wenn Ihr Programm diese mit print() ausgibt.
Zum Lösungsnotebook
example_text = """Der Arbeitskreis „Digital Humanities Munich“ (dhmuc)[1] widmete seinen ersten Workshop 2016 dem Thema „Digitale Daten in den Geisteswissenschaften. Interdisziplinäre Perspektiven für semantische und strukturelle Analysen“.[2] Insgesamt 14 Vorträge erörterten aktuelle Forschungen und Infrastrukturen im Bereich der maschinellen Textanalyse.
Folgende Institutionen zeichneten für die Organisation des Workshops verantwortlich: dhmuc – Arbeitskreis “Digital Humanities Munich”, das Institut für Computerlinguistik Universität Zürich [3], das Historische Seminar der Ludwig-Maximilians-Universität München [4], die IT-Gruppe Geisteswissenschaften (ITG) der Ludwig-Maximilians-Universität München [5] sowie die Bayerische Akademie der Wissenschaften [6].
Einführung
ECKHART ARNOLD (München), MARK HENGERER (München), NOAH BUBENHOFER (Zürich) und CHRISTIAN RIEPL (München) machten klar, dass das Vorhandensein grosser Mengen an digitalen Textkorpora den Geisteswissenschaften neue Zukunftsperspektiven eröffnet, gleichzeitig aber auch neue Herausforderungen an die Disziplinen stellt. Der Brückenschlag zwischen Philologie und Informationstechnologie erfordert von den Forschenden ein hohes Mass an Technikaffinität. Das Verständnis von Text als Daten und dessen interaktive graphische Visualisierung verändert die hermeneutischen Herangehensweisen und Methoden.
Panel 1: Korpora
Im Eröffnungsreferat stellte PETER MAKAROV (Zürich) sein PhD Projekt zum Thema „Towards automated content event analysis: Mining for protest events“ vor. Es ist Teil des POLCON Projekts unter Professor Hanspeter Kriesi.[7] Das Projekt bewegt sich zwischen Politikwissenschaft und Computerlinguistik. Ziel ist, herauszufinden, inwiefern moderne Natural Language Processing Technik die thematische Extraktion von Daten aus dem Internet unterstützen kann. Konkret geht es in der Studie um die Extraktion von News-Texten im Zusammenhang mit Öffentlichen Protesten.
Methodisch setzt das Projekt auf Machine-Learning-Verfahren. Hierzu müssen geeignete Klassifizierungsmodelle erstellt und Entwicklungszyklen implementiert werden, mit deren Hilfe Trainings-Korpora erstellt werden können. In einem iterativen Prozess werden diese Trainingsdaten annotiert und verbessert. Dabei hat sich gezeigt, dass linguistische Standardmodelle zur Annotation nicht geeignet waren, um die Identifikation von Textstellen, die Protest indizierten, zu verbessern. Daher werden vereinfachte, besser auf die konkrete Fragestellung zugeschnittene Annotationssysteme entwickelt.
DANIEL KNUCHEL (Zürich) referierte unter dem Titel „HIV/AIDS diskurslinguistisch – ein multimediales Korpus“ über sein Promotionsprojekt. In diesem analysiert er, welches Wissen heute zum Thema HIV/AIDS in der Öffentlichkeit zirkuliert. Dazu baute der Referent ein Korpus aus unterschiedlichen Quellen (Massenmedien, Selbsthilfe-Blogs, Social Media) auf. Er wies darauf hin, dass bei solchen Vorhaben nebst den konzeptuellen und technischen Fragen die rechtlichen Bedingungen zur Datennutzung frühzeitig geklärt werden müssen. Wichtig sei zudem, dass von Anfang an auf Nachhaltigkeit geachtet werde, um spätere Nutzungen der Daten zu ermöglichen.
MAX HADERSBECK (München) berichtete in seinem Vortrag über die Erfahrungen mit der FinderApp “WittFind“.[8] Die webbasierte Applikation steht Forschenden nun seit vier Jahren zur Verfügung, um den Open Access zugänglichen Teil des Nachlasses von Ludwig Wittgenstein nach Wörtern, Phrasen, Sätzen und semantischen Begriffen zu durchsuchen. Sie setzt dazu regelbasierte computerlinguistische Verfahren ein. WittFind zeichnet sich dadurch aus, dass die gefundenen Textstellen zusammen mit dem Faksimileextrakt dargestellt werden und eine Überprüfung anhand des Originaltexts jederzeit möglich ist.
Unter anderem am Beispiel des englischen Neologismus “cherpumple” [9] stellte SUSANNE GRANDMONTAGNE (München), das System „NeoCrawler“ [10] vor. NeoCrawler verfolgt die Entstehung und Verbreitung von Neologismen im Internet. Die Ergebnisse werden automatisiert für weitere linguistische Analysen aufbereitet. Zudem stellt das System Zeitreihenverlaufsanalysen zur Verfügung. Eine Benutzeroberfläche unterstützt die manuelle Kategorisierung der erhobenen Daten. Aus rechtlichen Gründen kann diese Möglichkeit jedoch nicht im Rahmen von Crowd Sourcing genutzt werden.
Die prosopographische Erforschung der Herrschaftselite der Habsburgermonarchie steht im Zentrum des Projekts „Kaiserhof“ [11], das MARK HENGERER und GERHARD SCHÖN (München) vorstellten. Nebst der eindeutigen Identifikation von Personen ist die Messbarkeit qualitativer Aspekte eine der hauptsächlichen Herausforderungen, um Netzwerke und „Reichweiten von Integration“ visualisieren zu können. Dabei hat sich der Ansatz bewährt, von Begriffen mittlerer Reichweite auszugehen. Visualisierungen (etwa von Verwandtschaftsbeziehungen oder Geolokalisierungen) sind in diesem Zusammenhang von hohem heuristischem Wert.
Natural Language Processing / Suche
Zeitangaben sind eine zentrale Information in historischen Dokumenten. Das war der Ausgangspunkt für die Präsentation von NATALIA KORCHAGINA (Zürich) zu “Natural language processing for historical documents“. Doch die maschinelle Textextraktion aus den oft handschriftlichen Dokumenten ist komplex. Ziel des Forschungsvorhabens der Referentin ist es, ein Tool für die automatisierte Extraktion von Zeitangaben aus historischen Texten zu entwickeln. Als Quellengrundlage dient ein Korpus von digitalisierten Schweizer Rechtstexten zwischen dem 10. und 18. Jahrhundert.
In einer ersten Phase des Projekts wurde unter Nutzung des an der Universität Heidelberg entwickelten Zeittaggers HeidelTime [12] ein fehlerfreies, aber kleines manuell annotiertes Gold Standard Korpus erstellt. Auf dieser Grundlage wird sodann mit einem hybriden Vorgehen, das machine-learning und regelbasierte Methoden kombiniert, ein grösseres Silver Standard Korpus erarbeitet, das für die Extraktion von Zeitangaben herangezogen werden kann.
Zeitgenössische Rechtstexte standen im Zentrum des Forschungsprojekts von KYOKO SUGISAKI (Zürich). Sie präsentierte in ihrem Vortrag unter dem Titel “Natural language processing in speziellen Textsorten, z.B. legislative Texte“ ihre soeben abgeschlossene Doktorarbeit. Am Beispiel von online verfügbaren Schweizer Gesetzestexten erstellte sie ein qualitativ hochwertiges Korpus von fachspezifischen Texten. Im Verlauf der Arbeiten zeigte sich, dass vorhandene Referenzkorpora (etwa die Sammlung Schweizerischer Rechtsquellen) genutzt werden können, jedoch an die Spezifika des Vorhabens angepasst werden müssen. Mittels Kombination von verschiedenen Analyseverfahren und Tools (u.a. POS-tagging, morphosyntaktische Analyse, Style-Checking) konnte die Qualität der Texterkennung deutlich verbessert werden.
Visualisierung
Unter dem Titel „Visualisierungen in den Digital Humanities“ diskutierten NOAH BUBENHOFER, KLAUS ROTHENHÄUSLER und DANICA PAJOVIC (alle Zürich) die theoretischen Grundlagen von Visualisierungen und hinterfragten gängige Visualisierungspraktiken in den Digital Humanities. Ausgangspunkt ist die Feststellung, dass Visualisierungen nicht nur bei der Darstellung von Analyseergebnissen, sondern auch bei der Datenexploration eine wichtige Rolle spielen.
Besonders bei explorativen Visualisierungen sind gemäss den Referenten methodisch-technische Aspekte wichtig. Denn Diagramme sind nicht Bilder. Sie sind hoch abstrahierte Darstellungen, die Hypothesen über Sachverhalte transportieren. Visualisierungen lassen sich entlang einer Reihe von grafischen, datentypischen, diagrammatischen, semiotischen, ästhetischen, technischen und diskursiven Attributen kategorisieren und beurteilen.
Anhand der Darstellung von Geokollokationen, das heißt von sprachlichen Äußerungen über Orte zeigte Noah Bubenhofer, wie durch Sprechen eine Vorstellung von Welt konstruiert wird.[13] Die naheliegende Visualisierung von Geokollokationen auf einer Weltkarte ist dann ein voraussetzungsvoller Vorgang, der unhinterfragte Prämissen von Kartendarstellungen übernimmt. Bubenhofer plädierte daher dafür, auch nicht kartenbasierte Visualisierungen in Betracht zu ziehen. Das Beispiel illustrierte, wie Denkstile, Software und technische Möglichkeiten in Visualisierungen mit einfliessen und diese in gewisser Weise vorbestimmen.
MATTHIAS REINERT (München) präsentierte in seinem Referat „deutsche-biographie.de – ein historisch biografisches Informationssystem. Computerlinguistischer Ansatz und Visualisierung“, das aus diesem Vorhaben resultierende Internetangebot.[14] In rund 48.000 Lexikonartikeln bietet es Informationen zu rund 540.000 Personen. Für die zuverlässige Volltexterfassung und -kodierung sowie den Normdatenabgleich von Personen und Orten wurden seit 2012 computerlinguistische Verfahren eingesetzt. Hierzu wurden lokale Grammatiken und eine korpora-spezifische Wortdatenbank erstellt. Das historisch-biografische Informationssystem ermöglicht eine Geo-Visualisierung und die Darstellung von Ego-Netzwerken. In der Diskussion betonte der Referent, dass im Zusammenhang mit einem solchen interaktiven Angebot eine transparente Kommunikation über die Möglichkeiten und Grenzen des Systems und der Datenbasis unerlässlich ist, um den Nutzern die Einschätzung der Evidenz der gewonnen Resultate zu ermöglichen.
Unter dem Titel „Theatrescapes“ [15] argumentierte TOBIAS ENGLMEIER (München), dass die stetig wachsenden, nun auch für die Geisteswissenschaften verfügbaren Datenbestände oft nur mit Techniken der Informationsvisualisierung erfasst werden könnten und interpretierbar seien. Das Projekt „Theatrescapes. Mapping Global Theatre Histories“ nutzt für die interaktive Kartendarstellungen WebGL (Web Graphics Library) [16] und den Google Maps API [17]. Der Referent zeigte auf, dass mittels dieses pragmatischen Ansatzes die technischen Hürden bei der Georeferenzierung von grossen Datenbeständen mit vertretbarem Aufwand überwunden und ansprechende Resultate wie etwa interaktive historisierte Kartendarstellungen erzielt werden können. Allerdings betonte er, wie schon Noah Bubenhofer vor ihm, dass Entscheidungen über den Einsatz von bestimmter Software über technische Aspekte hinausreichen und auch inhaltliche Konsequenzen haben.
EMMA MAGES (München) stellte den „Audioatlas Siebenbürgisch-Sächsischer Dialekte“ (ASD) vor, einen interaktiven Online-Atlas.[18] Er erschließt eine umfangreiche Audiodokumentation deutscher Ortsdialekte Siebenbürgens und der Marmarosch und macht diese in Transkription und Audioaufnahmen zugänglich. Nebst der eigentlichen Transkription wurde eine morphosyntaktische Etikettierung vorgenommen und eine Ontologie für die Erschliessung entworfen. Mittels Kartierung erlaubt der ASD unter anderem qualitative und quantitative Sichten auf die örtliche Verteilung der Dialekte.
In seinem Referat über die Online-Plattform „VerbaAlpina“ berichtete STEPHAN LÜCKE (München) über die Herausforderungen, die sich bei diesem politische Grenzen überschreitenden und mehrsprachigen Ansatz stellten.[19] Ziel des Langzeitprojekts „Verba Alpina“ ist es, den sprachlich stark fragmentierten Alpenraum in seiner kultur- und sprachgeschichtlichen Zusammengehörigkeit zu erschliessen. Das Projekt fokussiert auf die Wechselbeziehung (sowohl in onomasiologischer wie semasiologischer Perspektive) zwischen Wörtern und bezeichneten Konzepten. Die sprachlichen Zusammenhänge werden ergänzt mit ethnographischen, historischen und politischen Aspekten und in einer interaktiven Online-Karte mit Crowd-Sourcing-Komponente dargestellt.
Crowd
Das Referat „Text+Berg – 150 Jahre alpinistische Texte: OCR-Fehler, Crowd Correction“ von SIMON CLEMATIDE (Zürich) diskutierte die Voraussetzungen für erfolgreiches Crowd Sourcing.[20] Im Rahmen des Projekts Text+Berg realisierte das Institut für Computerlinguistik der Universität Zürich eine Online-Plattform zur Korrektur des OCR-Textes der digitalisierten Jahrbücher des Schweizerischen Alpenklubs (SAC) von 1864 bis 1899.[21] Entscheidend für die Motivierung von Freiwilligen und damit für den Erfolg des Vorhabens waren eine sorgfältig programmierte Benutzeroberfläche und ein einfacher Workflow. Dazu kamen begleitende Massnahmen, um die Motivation der Teilnehmenden aufrechtzuerhalten. Hierzu gehörten spielerische Elemente und Layout-Massnahmen, die den Teilnehmenden Rückmeldungen zum Datenzustand und zur geleisteten Arbeit geben. Ein Vorteil war, dass es sich beim potentiellen Teilnehmerkreis um gut organisierte und am Thema interessierte Vereinsmitglieder mit hoher Sachkenntnis handelte.
Abschliessend stellte GERHARD SCHÖN (München) das Projek „Play4Science“ [22] und die in diesem Rahmen entwickelte Spiel-Plattform „Artigo“ vor. Das Projekt bringt Geisteswissenschaftler/innen, Informatiker/innen und Computerlinguist/innen zusammen, um zweckgerichtete soziale Spiel-Software („Games with a Purpose“ (GWAP)) zu entwickeln, die seit einiger Zeit auch im wissenschaftlichen Bereich erfolgreich Crowd-Sourcing-Ansätze unterstützen. Ziel von Play4Science ist, eine anpassbare universelle Plattform anzubieten, die von allen Fächern für verschiedenste Anwendungen sozialer Software genutzt werden kann.
Die bereits realisierte Spiel-Plattform „Artigo“ [23] lädt zur Verschlagwortung von Gemälden aus einer Bilddatenbank ein. Sie schaltet zwei Mitspieler zusammen, die unabhängig voneinander relevant erscheinende Begriffe für dieselben Bilder eingeben. Die solcherart Peer-validierten Begriffe werden in der Datenbank gespeichert und sind für spätere Suchabfragen nutzbar.
Fazit
Der Workshop bot einen guten Überblick über den State-of-the-Art computerlinguistischer Ansätze für die digitale Aufbereitung von Textkorpora. Er wies auf die Herausforderungen hin, die sich bei der interdisziplinären Zusammenarbeit an der Schnittstelle zwischen Technik und geisteswissenschaflticher Forschung stellen. Es wurde klar, dass eine fundierte Fragestellung entscheidend für den Erfolg von computerlinguistischen Vorhaben ist. Zugleich wurde aber unter dem Stichwort „code matters“ auch betont, dass technologische Aspekte nicht vernachlässigt werden dürfen, da sie Einfluss auf Vorgehensweisen und Resultate haben. Von den Geisteswissenschaftlern muss daher verlangt werden, dass sie wissen, was die verwendeten Algorithmen tun. Dies gilt insbesondere auch für heuristisch und explorativ eingesetzte Visualisierungen, bei denen sich die Forschenden stets zu fragen haben, ob sie den generierten Visualisierungen genug kritisch gegenüberstehen. Unter geisteswissenschaftlichen Vorzeichen kann eine in den Visual Analytics mitunter unterstellte korrelationsbasierte „ground truth“ nicht vorausgesetzt werden.
In den Diskussionen hat sich ferner die Sicherstellung der Nachhaltigkeit in computerlinguistischen Vorhaben als zentraler Aspekt herausgestellt. Dabei geht es um mehr als Datenverfügbarkeit. Entscheidend sind das Bewusstsein für die Brüchigkeit der Datengrundlagen und der Umgang mit Unschärfen und Unvollkommenheiten. In einer weiteren Perspektive identifizierte der Workshop eine Reihe zentraler Erfolgsfaktoren für Digital Humanities-Projekte. So gilt es die rechtlichen Bedingungen für die Datennutzung frühzeitig zu klären, eine ausbaufähige Infrastruktur aufzubauen, die Mitarbeitenden auszuwählen, auszubilden und zu begeistern sowie die langfristige Finanzierung sicherzustellen. Insgesamt bot die Tagung einen guten Überblick über die Möglichkeiten der maschinellen Analyse und Interpretation von Texten. Es herrschte Konsens darüber, dass sich die Geisteswissenschaften dadurch in den kommenden Jahren stark verändern werden."""
# your code