Vernetzte und normierte Daten für die historischen Wissenschaften

histHub entwickelt eine Plattform für vernetzte und normierte Daten für die historischen Wissenschaften in der Schweiz. Über die Plattform lassen sich zahlreiche herausragende Datenbestände zur Schweizer Geschichte durchsuchen. histHub bindet die historischen Daten in die Workflows (Recherche, Datenbearbeitung und -produktion, Auswertung) der interessierten Zielgruppen ein und wird dadurch zu einer Anlaufstelle für die Forschungscommunity der digitalen Geisteswissenschaften.

Vernetzen

Verschiedene Datenbestände zur Schweizergeschichte durchsuchen? Vergleichen, was in welcher Datenbank über eine historische Person steht?
histHub vernetzt historische Datenbestände für die Forschung und die interessierte Öffentlichkeit.
histHub entwickelt und vertreibt auf die Bedürfnisse der Community zugeschnittene Vernetzungstools, die flexibel genutzt und weiterentwickelt werden können. Auf diese Weise wird die nationale und internationale Vernetzung von historischen Daten gefördert und vereinfacht.

Normieren

Burg, Schloss, veste, castrum oder hus? Henker, meyster, tiller oder doch Scharfrichter? Historische Begriffe verändern sich nicht nur über den Lauf der Zeit, sondern variieren auch geografisch.
Die Normdaten von histHub schaffen Klarheit und verweisen auf die historischen Quellen.
histHub modelliert und verwaltet einen Normdatensatz zur Schweizer Geschichte. Durch den Einsatz semantischer Datenmodellierung ist der histHub-Normdatensatz sowohl einfach adaptierbar als auch in der Lage, feinste historische Unterschiede abzubilden. Mit den histHub-Normdaten sind eindeutige Aussagen über Personen, Orte, Organisationen und Konzepte über Epochen- und Sprachgrenzen hinweg möglich.

Mitmachen

histHub befindet sich im Aufbau und hat eine offene Projektanlage. Bis Ende 2019 soll histHub zu einer Produktions- und Forschungsumgebung der historischen Wissenschaften in der Schweiz werden. histHub entwickelt Nutzerschnittstellen, die es künftigen Partnern ermöglicht, ihre Daten in histHub einzuspeisen, anzulegen, anzureichern und zu vernetzen.
-> Kontaktaufnahme

GREL

openrefinehistHub befasst sich in einer Blogserie mit der Aufbereitung und Anreicherung von Daten in OpenRefine. Alle Beiträge der Serie werden in einer Übersicht gesammelt.

Bereits in früheren Beiträgen sind wir auf die General Refine Expression Language, kurz GREL, gestossen. Befehle an OpenRefine werden in GREL formuliert, es ist jedoch auch möglich andere Sprachen (Python/Jython oder Clojure) zu verwenden. In diesem Beitrag werden wir uns mit GREL befassen, um eigene Befehle formulieren zu können.

Verwendung von GREL

GREL kann sowohl zum Bearbeiten von Zelleninhalten als auch zum Facettieren verwendet werden. Die Sprache funktioniert gleich, egal ob Inhalte gesucht oder geändert werden.

Immer zu beachten ist, dass GREL-Befehle nur über die aktuell gefilterten oder facettierten Einträge und Zeilen ausgeführt werden. Ist also bereits eine Facette aktiv, werden die dadurch «versteckten» Einträge von dem Befehl nicht betroffen. Ebenfalls wichtig ist, dass GREL case-sensitive ist.

Facettieren mit GREL

Eine Spalte kann über Facet – Custom Text Facet ein GREL-Bearbeitungsfenster aufgerufen werden.

openrefine-GREL-facet-menu

Zu Übungszwecken ist diese Art GREL zu verwenden praktisch, weil keine Daten verändert werden.

Das selbe Fenster kann auch bei einer bereits in der linken Seitenleiste angezeigten Facette aufgerufen werden, indem bei der Facette oben rechts auf «change» geklickt wird.

Bearbeiten mit GREL

Häufiger als zum Facettieren wird GREL zum Bearbeiten von Zelleninhalten und Spalten verwendet. Sowohl beim Hinzufügen einer Spalte (Spaltenmenü – Edit column – Add column based on this column) als auch beim Bearbeiten aller Zellen in einer Spalte (Spaltenmenü – Edit cells – Transform) wird ein GREL-Bearbeitungsfenster geöffnet:

GREL edit window

Der Aufbau von GREL

OpenRefine funktioniert sehr stark über Spalten. Befehle werden mithilfe von Variablen auf eine ganze Spalte (oder Zeile) angewendet, wobei auch andere Spalten mit einbezogen werden können.

In einem GREL-Befehl wird die Variable definiert, die über einen Punkt abgetrennt noch genauer spezifiziert werden kann. Daran werden Funktionen angehängt.

Variablen

Es gibt in GREL verschiedene Variablen:

  • value: der Wert in einer (jeder) Zelle der Spalte, über die der GREL-Befehl angewendet wird.
  • row: eine Zeile mit mehreren Zellen
  • cells: alle Zellen der aktuellen Zeile
  • cell: die Zelle in der Spalte, über die der Befehl ausgeführt wird. Für cell gibt es die beiden Ausprägungen
    • cell.value: der Wert in der Zelle
    • cell.recon: das Ergebnis des Reconciling für die Zelle
  • recon: wird in Zusammenhang mit dem Reconciling, also dem Abgleich mit einer online verfügbaren Ressource wie z.B. Wikidata, verwendet
  • record: ein record ist ein Zusammenschluss von einer oder mehr Zeilen

Genauere Beschreibungen der Variablen gibt es im Wiki zu OpenRefine.

Funktionen

GREL-Funktionen gibt es viele, im GREL-Bearbeitungsfenster ist unter «Help» eine Liste zu finden, in der die Funktionen erklärt werden. Deshalb gehen wir hier nicht vertieft darauf ein, welche Funktion was macht.

functions help

In OpenRefine sind die Funktionen alphabetisch geordnet. Thematisch geordnet und ausführlicher erklärt sind die Funktionen im Wiki. Dort sind sie zuerst inhaltlich unterteilt. Suchen wir beispielsweise eine Funktion für einen String, also einen Text, wählen wir die entsprechende Seite.

Befehle können auf verschiedene Arten aufgebaut werden:

  • Zuerst die Funktion, also z.B.
    replace(WERT, "suchen nach", "ersetzen mit")

    WERT kann hier auch eine andere Spalte sein auf die mit

    cells["columnname"].value

    verwiesen wird

  • zuerst der Ort, wo die Funktion angewendet wird, also z.B.
    value.replace("suchen nach", "ersetzen mit")

    Value wendet die Funktion auf die aktuelle Spalte an, auch hier kann mit

    cells["columnname"].value

    auf eine andere Spalte verwiesen werden
    Vorteil dieser Variante ist, dass mehrere Funktionen aneinander gehängt werden können. Es können z. B. alle «:» mit «» ersetzt werden und danach noch Leerschläge am Anfang oder Ende entfernt werden:

    value.replace("suchen nach", "ersetzen mit").trim()

Controls sehen aus wie Funktionen. Controls ermöglichen Loops und Branches, also «wenn X dann Y sonst Z» Konstruktionen.

Arbeiten mit GREL

GREL-Befehle lassen sich mit der integrierten Hilfe zusammenstellen. Oft finden sich in Anleitungen, wie sie auch in diesem Blog publiziert werden, fertig formulierte Beispiele, in denen nur noch die Namen der Spalten für das eigene Projekt angepasst werden müssen.

OpenRefine bietet einige eingebaute Hilfen an. So wird bereits beim Eingeben die Syntax überprüft. Hat sich ein Fehler eingeschlichen, der der Grammatik von GREL widerspricht, wird dies rechts vom Eingabefenster gemeldet. Im Tab «Preview» wird angezeigt, was der Befehl mit den Inhalten der Spalte machen wird. So kann direkt überprüft werden, ob das Resultat den Erwartungen entspricht. Im Tab «History» sind die bisher verwendeten Befehle aufgelistet, sowohl aus dem aktuell offenen Projekt als auch aus anderen Projekten. Da diese Liste schnell unübersichtlich wird, bietet OpenRefine die Möglichkeit, Befehle mit einem Stern zu versehen. Diese werden dann im Tab «Starred» aufgelistet. Häufig genutzte Befehle können so leicht wieder abgerufen werden, und das über Projekte hinweg.

Fragen, Anregungen oder Wünsche zu histHub oder zur Blogserie zu OpenRefine nehmen wir gerne per Mail entgegen.

Aufbereitung der Forschungsdaten der SSRQ für histHub

Projekte und Forschende, die über Forschungsdaten zu historischen Personen, Orten, Organisationen oder Konzepten verfügen, können diese in histHub mit den Daten verwandter Projekte verlinken und mit Normdaten anreichern. Die fünf Träger von histHub erarbeiten anhand ihrer Daten einen Normdatensatz sowie mehrere kontrollierte Vokabulare zur Schweizer Geschichte.

Die Daten aus den zwei XML-Datenbanken zu historischen Ortsnamen bzw. zu historischen Begriffen (Schlagwörter und Lemmata) sowie aus dem RDFTriplestore zu historischen Personen und Organisationen der Sammlung Schweizerischer Rechtsquellen (SSRQ) wurden für den histHub-Normdatensatz nach den folgenden Schritten aufbereitet.

Als erstes beschrieben die Entwickler Bernhard Ruef und Natalia Korchagina die drei Datenbanken und deren Daten eingehend. Gonzalo García Lara, der für das Back-End der histHub-Datenbank zuständig ist, analysierte die Datenstruktur mit Hilfe der Dokumentation. Danach zeichnete er ein erstes generisches Datenmodell mit dem Unified-Modeling-Language (UML)-Editor plantUML. Dieses Open-Source-Tool hat sich im Vergleich zur Konkurrenz (UML Designer, Papyrus und yUML) als praktischstes Tool zur Erstellung von Klassendiagrammen erwiesen. Es verfügt über eine einfache Syntax, das Umsetzen geht schnell mit Hilfe der Anleitung und die Kontrolle über das Erscheinungsbild, d. h. Farben und Formen von Kästchen etc., ist gewährleistet.

Physisches Datenmodell V5 (Gonzalo García Lara)

Das relationale Datenmodell wurde in mehreren Schritten nach eingehenden Diskussionen im gesamten Team überarbeitet und verfeinert. Es liegt nun in einer vorläufigen 5. Version als UML-Grafik sowie in Form von Tabellen, Attributen und Beziehungen inkl. Beschreibungen vor und beinhaltet alle Informationen über Personen, Organisationen, Orte, Schlagworte und Lemmata der drei Datenbanken der SSRQ. Die Umsetzung des generischen Modells erfolgte mit der frei verfügbaren relationalen Datenbank PostgreSQL.

Die Forschungsdaten aus den SSRQ-Datenbanken können dank der grafischen Oberfläche bzw. dem GUI, das Marc Zobrist mit dem quelloffenen Webframework Django programmierte, gesucht, angezeigt, editiert und gelöscht werden. Die Suche mit automatischer Ergänzung nach Personen, Organisationen, Orten oder Begriffen ergibt die gewünschte Trefferlisten, in der man mit einem Klick auf einen Eintrag die mit dem Eintrag verbundenen Attribute anzeigen lassen kann. Auch die Aufnahme von neuen Entitäten oder die Mutation von bestehenden Daten ist möglich. Der Import der Inhalte der SSRQ-Datenbanken hatte zur Folge, dass bisher unbekannte Inkonsistenzen aufgedeckt und korrigiert werden konnten.

Suchresultat für die Suche nach «Rapperswil Burg» (Marc Zobrist)

Die Datenbereinigung ist in vollem Gange, damit aus der Fülle von Forschungsdaten der Normdatensatz zu Personen, welche bereits via Metagrid multilateral verlinkt sind und deren Vornamen im Vornamen-Vokabular publiziert sind, generiert werden kann.

 

Spalten bearbeiten

openrefinehistHub befasst sich in einer Blogserie mit der Aufbereitung und Anreicherung von Daten in OpenRefine. Alle Beiträge der Serie werden in einer Übersicht gesammelt.

Dabei haben wir festgestellt, dass OpenRefine stark über die Spalten organisiert ist. Bearbeitungsschritte, Facetten oder Filter werden jeweils für eine Spalte aufgerufen. Was ist denn nun, wenn wir den Inhalt von Spalten verändern wollen? Damit befasst sich dieser Beitrag.

Im Beitrag zum Bearbeiten von Spalten und Zellen haben wir bereits gelernt, Inhalte von Spalten zu trennen. Dafür gibt es ein eigenes Bearbeitungsfenster, das uns die Sache erleichtert. Jetzt werden wir andere Möglichkeiten zum Hinzufügen einer neuen Spalte betrachten.

Spalten hinzufügen

OpenRefine bietet verschiedene Wege, Spalten hinzu zu fügen. Als Programm zum Reinigen und Ergänzen von Daten bietet es, anders als beispielsweise Excel, keine Option zum Einfügen einer leeren Spalte. Es gibt jedoch Möglichkeiten, Inhalte aus einer Spalte in neue Spalten aufzuteilen oder neu zu gliedern. Diese werden im Folgenden gezeigt. Datengrundlage ist weiterhin das Projekt mit den Metadaten zu den Fotografien von Annemarie Schwarzenbach.

Add column based on this column

OpenRefine geht davon aus, dass wir die bestehenden Daten in einem Projekt weiter bearbeiten wollen. Das Programm ist explizit nicht auf das Erheben von Daten ausgelegt, entsprechend ist das Eintippen von Daten in Zellen hier eher mühsam.

Wollen wir nun eine neue Spalte bilden, die von einer der bestehenden Spalten ausgeht, wählen wir im Spaltenmenü «Edit column» – «Add column based on this column». Standardmässig ist im sich daraufhin öffnenden Fenster «value» ausgefüllt, demnach wird in jeder Zelle der neuen Spalte der Wert der Zelle der bereits vorhandenen Spalte ausgefüllt. Eine solche simple Kopie einer Spalte ist immer dann sinnvoll, wenn das Original behalten werden soll. Dies beispielsweise vor weiteren Transformationen wir dem Abgleich mit externen Daten.

Der neuen Spalte muss ein Name gegeben werden. Im Bearbeitungsfeld kann mit GREL («General Refine Expression language») der Inhalt angepasst werden. Soll wie im obigen Beispiel bei allen Zellen in der neuen Spalte ein Text hinzugefügt werden, wird dieser neue Text zwischen ‚ ‚ gesetzt. «value» verweist auf den Wert in der Zelle der Ursprungsspalte. Die verschiedenen Elemente werden mit einem «+» verbunden. Im Tab «Help» im Bearbeitungsfenster sind weitere GREL-Befehle aufgeführt. In einem späteren Blogbeitrag werden wir uns intensiver mit der Sprache befassen.

Spalten verbinden

Sollen die Inhalte mehrerer Spalten in einer einzigen zusammengefasst werden, gibt es dazu zwei mögliche Formeln. Zunächst muss wie eben das Bearbeitungsfenser über Spaltenmenü – «Edit column» – «Add column based on this column» aufgerufen werden.

cells["Column 1"].value + cells["Column 2"].value

Wenn in allen Spalten, die zusammengefügt werden sollen, keine Leerzeichen im Namen vorkommen, geht auch der kürzere Befehl:

cells.Column1.value + cells.Column2.value

Spalten trennen

OpenRefine bietet eine einfache Oberfläche, um Spalten zu trennen. Diese wird in diesem Beitrag gezeigt. Es ist jedoch auch möglich, über „Add column based on this column“ Spalten zu trennen und dabei nur bestimmte Teile zu behalten. Der GREL-Befehl dafür ist:

value.split("X")[Y]

Bei („X“) ist das Zeichen einzufügen, bei dem geteilt werden soll. Bei [Y] wird angegeben, welcher Teil behalten werden soll. Dabei wird bei 0 angefangen zu zählen. Wollen wir beispielsweise aus dem String «Spanien, San Cugat: Stadtansicht» das Wort «Spanien» herauslösen ist der richtige Befehl

value.split(",")[0]

Komplizierter wird es, wenn im obigen Beispiel der Ortsname herausgegriffen werden soll:

value.split(",").join(":").split(":")[1]

Weil unser Beispiel nach dem Muster «Land, Ort: Kurztitel» aufgebaut ist müssen wir hier sowohl bei «,» als auch bei «:» trennen. «split» lässt nicht mehrere Argumente zu, deshalb müssen wir zuerst trennen, dann wieder zusammenfügen. Zum Schluss geben wir mit [1] den zweiten Teil aus.

Die einzelnen Teile der Formel werden mit «.» zusammengehängt. Um die Formel zu verstehen können diese Teile nacheinander eingefügt werden. In der Vorschau wird dann jeweils das aktuelle Ergebnis angezeigt:

openrefine add column based on this column

Anfang 2018 werden wir das Reconciling beschrieben, also den Abgleich eines OpenRefine-Projekts mit anderen Daten, beispielsweise mit Wikidata. Dort werden wir wieder auf das Hinzufügen von Spalten zurückkommen. Denn durch das Reconciling ist es möglich, zusätzliche Informationen aus dem anderen Datenbestand abzugreifen und in das eigene Projekt einzufügen. So können beispielsweise Ortsnamen um Koordinaten oder Personen mit Lebensdaten ergänzt werden.

Fragen, Anregungen oder Wünsche zu histHub oder zu OpenRefine nehmen wir gerne per Mail entgegen.

histHub-geo und histHub-geotype

Im Herbst 2013 stellten Dodis, das HLS und die SSRQ am internationalen DARIAH-DE Expert workshop on controlled vocabularies, der von Michael Piotrowski am Institut für Europäische Geschichte in Mainz organisiert wurde, ihre Ortstypen vor. Nach dem Workshop verfolgten die Schweizer Teilnehmenden das Ziel, eine Ortstypologie für historische Orte der Schweiz zu entwickeln. Die Idee wurde in den Projektplan von histHub aufgenommen und wird nun zusammen mit dem Idiotikon und ortsnamen.ch in die Tat umgesetzt.

Der interne Workshop, der am 29. November 2017 in Bern stattfand und an dem alle Trägerinstitutionen von histHub teilnahmen, zeigt die Fortschritte des Projekts. Manuela Weibel, Idiotikon/ortsnamen.ch, präsentierte die geleisteten Arbeiten an der Ontologie histHub-geo und an der Typologie histHub-geotype. Zusammen mit dem ausgewiesenen Ontologieexperten Francesco Beretta, histHub/CNRS, hat sie diese entwickelt.

Nach der Definition eines Ortes hält Manuela Weibel fest, dass histHub nicht Ortsnamen, sondern Orte modelliert, die immer einen Namen, eine Lokalisierung und einen Typ haben sowie eine oder mehrere Funktionen und eine Geschichte aufweisen können. Ein Ort kann abstrakt oder konkret sein, verfügt jedoch immer über eine konkrete Projektion auf der Erdoberfläche.

HistHub-geotype ist eine Ortstypologie, die in Form eines Thesaurus angelegt ist und in hierarchischer Form die Typen und Untertypen abbildet. Diese können mit Hilfe eines Baumdiagramms visualisiert und mit weiteren Vokabularen, wie z. B. swissNAMES3D, geoNames oder TGN, verknüpft werden.

Von den Ortstypen muss die Ortsfunktion unterschieden werden. Es kann sein, dass die Funktion eines Ortes sich im Laufe der Zeit ändert und dass ein Ort gleichzeitig mehrere Funktionen hat. Eine Kirche wird als Kirche gebaut und nach der Säkularisierung als Versammlungsort, später als Restaurant mit Diskothek genutzt. Die Fragen, ob bei Funktionsänderungen der Typ gleich bleibt und wann ein Identitätswechsel stattfindet, werden nicht abschliessend diskutiert.

Mitte März 2018 wird histHub einen öffentlichen Workshop zur Ortstypologie und dem Ortsdatenmodell durchführen. Falls Sie daran teilnehmen und mitdiskutieren möchten, können Sie sich bereits jetzt bei uns per Mail melden.

Deduplizieren mit OpenRefine

openrefineIn einer Blogserie befasst sich histHub mit der Aufbereitung und Anreicherung von Daten in Openrefine. Dieser Beitrag beleuchtet das Deduplizieren, also das finden und löschen doppelter Einträge.

Kriterien zum Deduplizieren

Voraussetzung dafür ist (mindestens) eine Spalte, in der Dubletten eindeutig als solche auftauchen. In den Metadaten zu den Fotografien von Annemarie Schwarzenbach gibt es zwei Signatur-Spalten. Beide diese Spalten enthalten einzigartige Signaturen für jede einzelne Zeile. Richtige Dubletten enthält dieser Datensatz nicht. 

Zu Übungszwecken können wir nun beispielsweise anhand der Spalte Titel_Name deduplizieren, so dass jeweils nur ein Eintrag pro identischen Titel übrigbleibt.  

Die Methode zum Entfernen von Dubletten, die wir gleich zeigen werden, übernimmt jeweils den ersten vorkommenden Eintrag und entfernt alle anderen. 

Vorgehen 

OpenRefine bietet keinen einfachen «Dedupliziere»-Knopf. Die Sortier-Funktion und die Blank-Down Funktion werden in Kombination mit einer Facette zum Ziel führen. Doch der Reihe nach. 

Sortieren 

Nachdem wir entschieden haben, anhand welcher Spalte dedupliziert werden soll, sortieren wir alle Einträge in dieser Spalte. Dazu zuerst «Sort» wählen,

openrefine sort

und im sich darauf öffnenden Fenster auf «ok» klicken: 

openrefine sort 

Dies sortiert die Zeilen alphabetisch. Die Sortierung ist jedoch noch nicht permanent. In der Spalte «All», in der OpenRefine jeder Zeile selbst einen Identifier gibt, haben alle Zeilen ihren ursprünglichen Identifier behalten. Und nach dieser Spalte richtet sich die Sortierung, von der OpenRefine ausgeht. Die Sortierung permanent zu machen benötigt nur wenige Klicks.  

In der Kopfzeile gibt es neu neben den Schaltflächen zur Auswahl der Anzahl sichtbarer Zeilen den Butten «Sort». Ein Klick darauf öffnet ein Dropdown-Menü, aus dem wir «Reorder rows permanently» wählen. 

 openrefine sort permanent

Die Identifier in der Spalte «All» beginnen jetzt wieder bei 1, das heisst alle Zeilen haben einen neuen Identifier von OpenRefine erhalten. Erst jetzt ist die Sortierung eine Transformation an den Daten, die auch im Undo/Redo Tab rückgängig gemacht werden kann. 

Blank down 

Die Funktion «Blank down» ist im Standardrepertoire von OpenRefine. Sie entfernt den Inhalt aller aufeinanderfolgenden identischen Einträge, wobei sie den ersten beibehält. Zu finden ist die Funktion unter Edit cells – Blank down: 

 openrefine blank down

Wie immer zeigt OpenRefine an, wie viele Zeilen bearbeitet wurden. 

Facettieren 

Die «doppelten» Einträge sind nun dadurch markiert, dass sie in der Spalte «Titel_Name» keinen Inhalt haben. Zeilen mit leeren Zellen in einer Spalte lassen sich ganz leicht per Facette herausgreifen. 

 openrefine facet by blank

In der Facettenauswahl muss nun «true» gewählt werden. Bei der Betrachtung der Facette wird deutlich, dass es in dem Datensatz bei fast 3500 Einträgen 950 unterschiedliche Titel gibt. So viele Zeilen werden nach dem Deduplizieren übrigbleiben. (Keine Sorge, die Schritte lassen sich ganz leicht rückgängig machen). 

Entfernen 

Das Entfernen von Zeilen wird über die Spalte «All» aufgerufen. 

 openrefine remove all matching rows

Übrig bleiben «0 matching rows», da eine Facette aktiv ist. Diese kann nun einfach entfernt werden. 

Rückgängig machen 

Das Deduplizieren ist zwar ein relativ aufwändiger Ablauf, für OpenRefine sind es jedoch nur drei Schritte. Sichtbar wird das, wenn wir auf «Undo/Redo» gehen.  

 openrefine undo redo deduplicate

Hier lassen sich diese Arbeitsschritte nachvollziehen und rückgängig machen.

Fragen, Anregungen oder Wünsche zu OpenRefine oder zu histHub nehmen wir gerne per Mail entgegen. 

Temporale Ausdrücke in historischen Texten

In Texten beschreiben temporale Ausdrücken verschiedene Phänomene, z. B. einen Zeitpunkt oder eine Zeitspanne. Ein Datum kann explizit mit 25. Dezember 2015 oder implizit als Weihnachten 2015 genannt werden. Ebenso kommen relative Begriffe wie «im nächsten Jahr» oder «heute» oder gar freie Formulierungen wie «nach der Verlobung von Prinz Harry» vor.

Für das Tagging solcher Ausdrücke wurde 2009 der TEI-kompatible Standard TimeML eingeführt. Er teilt temporale Ausdrücke in folgende vier Kategorien:

  • DATE für Datierungen nach dem heutigen Kalender (z. B. 25.12.2015)
  • TIME für Ausdrücke, die sich auf eine Tageszeit beziehen (z. B. Mitternacht)
  • DURATION für Ausdrücke, die einen Zeitraum beschreiben (z. B. eine Woche)
  • SET für sich wiederholende Zeiträume (z. B. jedes Jahr)

Die Computerlinguistin Natalia Korchagina sammelte für ihre Dissertation bei Prof. Martin Volk zum Thema «Automatische Erkennung temporaler Ausdrücke in historischen Texten» aus verschiedenen Ressourcen temporale Ausdrücke. Mit Hilfe von HeidelTime, einem regelbasierten System zur Extraktion von temporalen Ausdrücken, und zwei Annotatorinnen extrahierte sie solche Ausdrücke aus edierten Quellen der SSRQ von 1450 bis 1550. Zusätzlich wurden temporale Ausdrücke aus der SSRQ Datenbank historischer Begriffe (Schlagworte und normalisierte Lemmata inkl. Schreibvarianten), Zeitangaben aus den Nachbarschaftsfällen der Zürcher Rats- und Richtbüchern des 15. Jahrhunderts (StAZH), die Festtage aus Hermann Grotefends «Zeitrechnung des Deutschen Mittelalters und der Neuzeit» sowie der sechs digital entstehenden Editionen der SSRQ SG und ZH integriert.

Diese Liste mit ca. 3000 Einträgen – geordnet nach den obigen vier Kategorien – wird histHub für einen Thesaurus temporaler Ausdrücke und das Tagging von Texten und Quellen nachnutzen und allen Interessierten zur Verfügung stellen.

Anhand der temporalen Ausdrücke im Laufe der Zeit könnte zum Beispiel erforscht werden, ob diese Ausdrücke wandelnde Zeitwahrnehmungen widerspiegeln oder welchen Einfluss die Einführung der mechanischen Uhren im Spätmittelalter bzw. des gregorianischen Kalenders auf das Zeitgefühl der Menschen hatte.

Abbildung: Der Ketzerturm mit Zifferblatt. Ausschnitt aus dem Plan der Stadt Zürich von Jos Murer, 1576.

Annemarie Schwarzenbach

histHub setzt sich seit Oktober mit den Metadaten zu den Fotografien von Annemarie Schwarzenbach auseinander. In einer Blogserie zeigen wir, wie die tabellenförmigen Daten in OpenRefine verbessert und angereichert werden können.

Aus Anlass des 75. Todestags von Annemarie Schwarzenbach hat das Schweizerische Literaturarchiv nun über 3000 Fotografien auf Wikimedia Commons zur Verfügung gestellt. Für histHub bietet dies Gelegenheit, den Blick über die Metadaten zu den Fotografien hinaus auf das Schaffen von Annemarie Schwarzenbach und ihre jetzt offen verfügbaren Bilder zu erweitern.

Reisende

Die meisten der auf Wikimedia Commons publizierten Fotografien entstanden auf den ausgedehnten Reisen Annemarie Schwarzenbachs. Die 1908 in eine reiche Zürcher Familie hineingeborene Frau unternahm vor allem in den 1930er Jahren Reisen auf vier Kontinenten, bis sie 1942 an den Folgen eines Velounfalls starb. Unterwegs verfasste sie literarische Werke, aber auch Reportagen für heimische Zeitungen und Zeitschriften. Ihre Fotografien begleiteten diese Reisereportagen.

Die Fotografien sind angereichert und ergänzt mit Metadaten, mit denen sich die Blogserie von histHub bisher auseinandergesetzt hat. Die Kombination von Metadaten mit den auf Wikimedia Commons verfügbaren Digitalisaten hilft bei der Orientierung. Eine Facette in OpenRefine zeigt schnell, dass in dem verfügbaren Bestand Fotografien aus über 30 Ländern vorhanden sind.

Spanien

Öffnen wir die Metadaten, so wie sie auf opendata.swiss angeboten werden, verweisen die ersten Einträge auf eine Reise nach Spanien. Eine Facette auf der Spalte „Land“ zeigt, dass Annemarie Schwarzenbach 1933 in Katalonien und im Baskenland weilte, und 1936 Mallorca besuchte. Dies lässt sich allein anhand der Metadaten herausfinden. Von diesen Reisen sind 21 Fotografien auf Wikimedia Commons verfügbar.

CH-NB_-_Spanien,_San_Sebastian-_Hafen_-_Annemarie_Schwarzenbach_-_SLA-Schwarzenbach-A-5-01-055
Spanien, San Sebastian – Hafen – SLA-Schwarzenbach-A-5-01-055

Auf die Bilder aus Spanien stossen wir eher zufällig, es sind quantitativ nicht sehr viele. Wie kann uns die bisherige Arbeit an den Metadaten in OpenRefine beim Überblick über die Fotografien helfen?

USA

Sortieren wir, wieder in OpenRefine, die Facetten nach «Land» anhand der Anzahl Einträge zeigt sich, dass über 500 der Fotografien in den USA verortet sind. Diese Bilder entstanden alle zwischen 1936 und 1938, genauere Datierungen gibt es kaum. Es ist bekannt, dass Annemarie Schwarzenbach in diesen Jahren mehrfach in die USA reiste.  

CH-NB_-_USA,_Cincinnati-OH-_Menschen_-_Annemarie_Schwarzenbach_-_SLA-Schwarzenbach-A-5-10-092
USA, Cincinnati-OH – Menschen – SLA-Schwarzenbach-A-5-10-092

Dabei interessierte sie sich für die Auswirkungen der Grossen Depression auf die Menschen und ihren Alltag. So zeigt dieses Bild eine Frau beim Durchsuchen von Müll. Die Metadaten geben mit einer Facette über die Spalte «Kurzbeschreibung» preis, dass ein Drittel dieser Fotografien, nämlich rund 160 von über 500, mit dem Wort «Menschen» beschrieben wurde. Natürlich ist eine solche Suche auf in Wikimedia Commons möglich. Der Suchbegriff für alle Einträge, die sowohl «USA» und «Menschen» enthalten ist «USA Menschen incategory:CH-NB-Annemarie_Schwarzenbach». Der Zugang über die Metadaten ermöglicht eine explorative Herangehensweise, die nicht vom Bild selbst ausgeht.

Persien

Annemarie Schwarzenbach reiste mehrfach nach Persien, 450 Bilder in der Sammlung auf Wikimedia Commonst sind dort entstanden. Sie nahm an archäologischen Ausgrabungen teil und bereiste verschiedene Gebiete des Landes. In Teheran heiratete sie 1935 einen französischen Diplomaten, was ihr einen Diplomatenpass verschaffte.

CH-NB_-_Persien-_Reisealltag_-_Annemarie_Schwarzenbach_-_SLA-Schwarzenbach-A-5-04-044
Persien – Reisealltag – SLA-Schwarzenbach-A-5-04-044

Annemarie Schwarzenbach interessierte sich für das Alltägliche. Sie fotografierte nicht nur die Landschaften, Menschen, Bauten und die Natur, sondern auch den Alltag der europäischen Reisenden.

Fotografien

Der Nachlass von Annemarie Schwarzenbach ist seit 1980 im Schweizerischen Literatutarchiv. Seit den 1980er Jahren wurde sie auch als Person und als Schriftstellerin wieder bekannter. 75 Jahre nach ihrem Tod sind Annemarie Schwarzenbachs Werke gemeinfrei. Dass die Bilder jetzt auf Wikimedia Commons zugänglich gemacht wurden erhöht ihre Sichtbarkeit. Verfügbar sind sie aber auch im Katalog HelveticArchives und damit auch über swissbib.

Besonders schön an der Publikation dieser Fotografien ist der hohe Grad der Erschliessung. Die Metadaten sind ausführlich für jedes einzelne Bild erfasst. So ist nicht nur der visuelle Zugang direkt über die Bilder möglich. Die Metadaten vereinfachen es, die Reisen der Annemarie Schwarzenbach anhand ihrer Fotografien nachzuzeichnen. 

Fragen, Anregungen oder Wünsche nehmen wir gerne per Mail entgegen. 

Bericht: Workshop on the creation of an international Data for History consortium


Vom 23. bis 24. November 2017 fand an der École normale supérieure in Lyon ein Workshop zur Gründung des internationalen Konsortiums Data for History statt, der vom Pôle histoire numérique des Laboratoire de recherche historique Rhône-Alpes organisiert wurde. Am Workshop nahmen rund 40 Expertinnen und Experten aus den Niederlanden, Frankreich, Griechenland, Italien, Deutschland, Luxemburg, Österreich und der Schweiz teil.

Nach der herzlichen Begrüssung durch den Gastgeber Bernard Hours (Université Jean-Moulin Lyon 3, Direktor des Laboratoire de recherche historique Rhône-Alpes) führte Georg Bruseker (FORTH, Center for Cultural Heritage – Institute of Computer Science, Heraklion) in das Thema des Workshops ein: Die Special Interest Group (SIG), die das CIDOC-CRM trägt, unterstützt offiziell Data for History, die flexible Erweiterung (extension) des CIDOC-CRM für historische Daten. Solche Erweiterungen für spezifische Wissensdomänen gibt es bereits in anderen Bereichen; z. B. FRBRoo ist eine Erweiterung der Bibliotheken, welche die standardisierte Norm für bibliographische Daten in CIDOC-CRM integriert.

Francesco Beretta (CNRS/Université Lyon, Laboratoire de recherche historique Rhône-Alpes), der Initiator der Erweiterung, stellte das Projekt zur Modellierung, Kuration und Interoperabilität von historischen Daten vor. Das internationale Konsortium ist offen für alle interessierten Projekte und Institutionen, um eine Ontologie für historische Daten zu entwickeln, die zugleich den Bedürfnissen der einzelnen Forschungsprojekte gerecht wird sowie die Interoperabilität der Daten mit denjenigen von allen anderen Projekten ermöglicht. Ziel des Konsortiums ist es, geschlossene Systeme (Datensilos) zu öffnen sowie Forschungsdaten und Datenmodelle zu teilen.

Mit Hilfe eines Ontologie-Management-Tools, eines Forums sowie von Workshops zu verschiedenen Themen soll kollaborativ eine Extension für CIDOC-CRM erarbeitet werden. Neue Unterklassen zur Ergänzung der Klassen (histC), domänenspezifische Thesauri (histT) und Properties von CRM (histP), die Projekte für die Arbeit mit historischen Daten benötigen, können in Data for History als Vorschlag (proposal) publiziert werden. Dadurch erhält die Community die Möglichkeit, sie zu prüfen und zu validieren. Das Tool erscheint auch für Forschende attraktiv, die keine Ontologiespezialisten sind, aber ihre Daten gut kennen, denn sie können sich an hier publizierten Modellen, z. B. zu Personen, orientieren. Der Prototyp des Ontologie-Management-Tools wurde in Lyon von symogih.org für das Konsortium entwickelt und hilft den Forschenden miteinander zu kommunizieren.

Nach der Einführung folgten zehn Kurzpräsentationen von den an Data for History interessierten Projekten. Bernhard Ruef (Informatiker der Rechtsquellenstiftung des Schweizerischen Juristenvereins und Teilprojektleiter histHub-Norm) stellte «histHub – a hub for historical data in Switzerland» vor. Die folgenden Diskussionen im Anschluss an die Referate und während des gemeinsamen Abendessens in einem typischen Lyoner Bouchon zeigten, dass das Konsortium Data for History ein reales Bedürfnis ist.

Am zweiten Tag wurden die verschiedenen Aufgaben des Konsortiums besprochen und Koordinatoren gefunden, die einen Bereich des Konsortiums bis zum nächsten Treffen voranbringen werden. Dieses entwickelt eine Online-Plattform, die flexible und projektspezifische Anpassungen des CIDOC-CRM für historische Daten ermöglicht.

Es erscheint sinnvoll, dass histHub sich an der entstehenden Erweiterung des CIDOC-CRM für historische Daten aktiv beteiligt und die histHub-Ontologie in diesem Rahmen produziert. Dies wird histHub von Anfang an eine internationale Dimension verleihen und die Dateninteroperabilität und -integration erleichtern.

Cluster

openrefineHistHub befasst sich in einer Blogserie mit der Aufbereitung und Anreicherung von Daten in Openrefine. Dieser Beitrag beschäftigt sich mit Clustern als Methode zum Reinigen von Daten und mit den verschiedenen Methoden, die OpenRefine dafür bietet.

Die Beispiele und Screenshots in diesem Beitrag stammen wieder aus dem Projekt mit den Metadaten zu den Fotografien von Annemarie Schwarzenbach. Die Arbeitsschritte können mit einem anderen Datensatz (oder über andere Spalten dieses Datensatzes) nachvollzogen werden.

Cluster sind Vorschläge des Computers, welche Einträge in einer Spalte das gleiche meinen könnten. Bei den Facetten wird jeweils das Vorkommen des exakt gleichen Eintrags gezählt. Schon ein kleiner Unterschied wie ein Leerschlag macht aus eigentlich identischen Einträgen verschiedene. Mit Clustern ist die Korrektur solcher Fehler ganz einfach. histHub zeigt wie.

Es gibt zwei Möglichkeiten, Cluster aufzurufen

  • Eine Text-Facette für die zu bearbeitende Spalte aufrufen (Spaltenmenü -> «Facet» -> «Text facet»), dann in der Facetten-Anzeige oben rechts auf den Button «Cluster»
  • Über Spaltenmenü -> «Edit cells» -> «Cluster and edit…»

Beide Wege führen zum gleichen Ziel:

OpenRefine Cluster

OpenRefine hat hier mit einem Algorithmus nach ähnlichen Einträgen gesucht. In diesem Beispiel sind die Einträge bis auf einen Doppelpunkt gleich. In der Spalte «Merge?» kann nun ein Haken gesetzt werden, wenn die Einträge vereinheitlicht werden sollen. In der Spalte «New Cell Value» schlägt OpenRefine vor, wie der vereinheitlichte Inhalt aussehen soll. Alle Einträge werden mit diesem Text ersetzt.

Diese Vorschläge richten sich, je nach gewähltem Algorithmus, entweder danach

  • Welche Ausprägung des vermutlich gleichen Werts zuerst vorkommt, oder
  • Welche Ausprägung des vermutlich gleichen Werts häufiger vorkommt.

Es muss also immer kontrolliert werden, ob hier der gewünschte Wert eingegeben wurde.

Unten links können bequem alle Vorschläge ausgewählt oder die Auswahl aufgehoben werden. «Export Clusters» ermöglicht den Export als JSON. «Merge Selected & Re-Cluster» vereinheitlicht die ausgewählten Einträge und erstellt neue Cluster. Danach kann mit anderen Algorithmen (siehe unten) nach weiteren Vorschlägen gesucht werden. «Merge Selected & Close» vereinheitlicht die ausgewählten Einträge und schliesst das Cluster-Fenster. «Close» bricht die Aktion ab.

Clustervorschläge können nur als Ganzes angenommen oder abgelehnt werden. Wenn also von vier Einträgen in einem Cluster drei zusammengehören, der Vierte jedoch eigenständig bleiben soll, muss der Cluster abgelehnt werden. Ein anderer Algorithmus liefert möglicherweise das gewünschte Ergebnis, ansonsten muss von Hand nachgebessert werden.

Der Link «Browse this Cluster» erscheint bei Mouseover. Damit lassen sich alle Zeilen in einem vorgeschlagenen Cluster ansehen und bei Bedarf von Hand vereinheitlichen.

Erkennt Openrefine mehrere Cluster, bietet es mit Facetten die Möglichkeit zur Einschränkung.

OpenRefine Cluster Facetten

So können beispielsweise zuerst die Cluster bearbeitet werden, die mehr als 40 Zeilen in der Tabelle betreffen, oder die eine bestimmte Zeichenanzahl nicht über- oder unterschreiten.

Ein sinnvolles Vorgehen ist es, die verschiedenen Cluster-Methoden einfach durch zu probieren, ein vertieftes Verständnis der dahinterstehenden Mechanismen ist nicht zwingend nötig. Ein Überblick über die Eigenheiten der Cluster-Methoden ist aber sinnvoll, da so gezielt die passende Methode für die vorliegenden Daten gewählt werden kann. Die Reihenfolge der Methoden orientiert sich daran, wie exakt die Übereinstimmung für einen Clustervorschlag sein muss.

Key collision

Unter diesem Begriff werden Clustermethoden gesammelt, die nach dem wesentlichen Teil («key») des Werts suchen. Stimmt dieser überein, schlägt die Methode Cluster vor.

Key collision Methoden brauchen wenig Zeit für die Berechnung, auch wenn grosse Datensätze bearbeitet werden.

fingerprint

FIngerprint ist die Standardmethode, weil sie wenige falsche Treffer vorschlägt. Sie entfernt Leerzeichen und Satzzeichen, betrachtet alle Buchstaben als Kleinbuchstaben und ignoriert Umlaute. Einzelne Worte werden auseinandergenommen. Da Satzzeichen ignoriert werden, fügt die Methode also beispielsweise «Schwarzenbach, Annemarie» und «Annemarie Schwarzenbach» in einem Cluster zusammen.

Die Methode ist nicht ideal für Datensätze mit vielen Umlauten, weil sie diese ignoriert.

ngram-fingerprint

Diese Methode funktioniert ähnlich, wird aber durch ein N-Gramm ergänzt. Dadurch werden auch Cluster erkannt, wenn innerhalb des Strings, also der Zeichenkette, Buchstaben vertauscht sind.

Die Grösse des N-Gramms kann gewählt werden. Ein grosser Wert hat keine Vorteile gegenüber der Standard fingerprint Methode. Ein 2-Gramm oder 1-Gramm hingegen wird einige falsche Vorschläge, aber auch neue Matches hervorbringen.

Beispielsweise findet ein normaler fingerprint keine Übereinstimmung zwischen «Teheran» und «Tehran». Ein ngram-fingerprint mit dem Wert 1 clustert die Einträge zusammen.

metaphone-3

Diese Methode basiert auf einem phonetischen fingerprint. Metaphone-3 ist spezifisch auf die englische Aussprache zugeschnitten, ist also vor allem bei englischsprachigen Datensätzen anzuwenden.

cologne-phonetic

Wie metaphone-3 ist cologne-phonetic eine phonetische fingerprint Methode. Cologne-phonetic ist auf die deutsche Sprache ausgelegt.

Die phonetischen Methoden helfen, Schreibfehler oder Ungleichheiten aufgrund verschiedenener Rechtschreibungen aufzuspüren.

nearest neighbour

Die bisher beschriebenen Methoden brauchen kaum Berechnungszeit. Oft sind sie aber entweder zu eng oder zu locker, so dass es viele falsche Cluster gibt, aber auch Einträge nicht zusammen geclustert werden, obwohl sie zusammengehören.

Präziser sind Methoden, die nach der Nächste-Nachbarn-Klassifikation funktionieren. Strings werden verglichen, und wenn die Abweichung einen bestimmten Grenzwert nicht überschreitet, wird ein Cluster vorgeschlagen.

Der Nachteil daran ist, dass es schon für kleine Datenmengen sehr viele Berechnungen braucht, was die Methode langsam macht. OpenRefine schaltet deshalb eine key collision davor, die Blöcke mit ähnlichen Einträgen schafft. Es ist möglich, die Grösse der Blöcke im Feld «Block» zu bestimmen, wenn eine «nearest neighbour» Methode gewählt wurde. Werte unter drei verlangsamen die Berechnung und bringen selten bessere Ergebnisse.

Der Unterschied zwischen den nearest neighbour Methoden liegt in der Art der Berechnug der Differenz zwischen zwei Strings.

levensthein

Auch Bearbeitungs-Distanz genannt, berechnet diese Methode die Anzahl Bearbeitungsschritte zwischen zwei strings. «Teheran» und «Tehran» ist einen Arbeitsschritt entfernt (einen Buchstaben einfügen), «Buenos Aires» und «Buenosaires» zwei.

In OpenRefine kann die Distanz im Feld «Radius» eingestellt werden. Grosse Zahlen liefern hier, vor allem bei kurzen Zeichenketten, übermässig viele Treffer.

PPM

Diese Methode baut auf der Kompression von Textstrings auf. Eine solche Kompression berechnet den Inhalt eines Strings. Entsprechend muss der Inhalt von Zelle A ungefähr dem Inhalt von A+B entsprechen.

Diese Methode gibt sehr viele Treffer zurück. Deshalb sollte sie erst nach den anderen Cluster-Methoden genutzt werden. Ausserdem ist sie für längere Einträge pro Zelle präziser als für kürzere.

Mehr Informationen zum Clustern

OpenRefine selbst hat auf Github ausführliche Erläuterungen zu den Clustermethoden publiziert, die auch als Grundlage für diesen Artikel dienen.

Fragen, Anregungen oder Wünsche zu OpenRefine oder zu histHub nehmen wir gerne per Mail entgegen.

Bearbeiten von Spalten und Zellen

openrefineHistHub befasst sich in einer Blogserie mit der Aufbereitung und Anreicherung von Daten in Openrefine. Dieser Beitrag zeigt häufig angewandte Transformationen.

Als Grundlage dienen weiterhin die Metadaten zu den Fotografien von Annemarie Schwarzenbach, die im Beitrag über das Erstellen eines OpenRefine Projekts vorgestellt wurden.

Häufige Transformationen

Die Spalte «Titel_Name» enthält Informationen über die Fotografie, die meist aus einem Land, einem Ortsnamen und einer genaueren Bezeichnung bestehen. Diese wollen wir extrahieren. Es gibt in der Tabelle zwar eine Spalte «Ort», mit einer Facette lässt sich aber schnell herausfinden, dass diese nur Orte in der Schweiz enthält. Um eine Spalte mit Ortsangaben weltweit zu erstellen, wollen wir aus der Spalte «Titel_Name» Ortsangaben extrahieren. Davor putzen wir die Einträge.

Whitespace entfernen

Ein häufiges Phänomen sind überzählige Leerzeichen am Anfang oder Ende einer Zelle. OpenRefine stellt eine Funktion zur Verfügung, die mit einem Klick solche Zeichen entfernt. Über das Spaltenmenü -> «Edit cells» -> «Common transforms» -> «Trim leading and trailing whitespace» wird diese aufgerufen. In diesem Beispiel gibt es keine Leerzeichen am Anfang oder Ende eines Eintrags, OpenRefine bearbeitet also 0 Zeilen.

Auch die Funktion «Collapse consecutive whitespace» sollte vor weiteren Transformationen ausgeführt werden. Mit dieser Funktion werden 10 Zeilen bearbeitet, in denen es offenbar aufeinander folgende Leerzeichen gab.

Spalten trennen

Die meisten Einträge in der Spalte «Titel_Name» sind so aufgebaut, dass zuerst das Land, nach einem Komma die Ortschaft und danach eine genauere Bezeichnung für das Bild angegeben ist.

OpenRefine

Dies machen wir uns zunutze.

Über das Menü der Spalte «Titel_Name» wird «Edit column» -> «Split into several columns…» aufgerufen.

Darauf können die Parameter der Trennung der Spalte eingestellt werden. Zuerst trennen wir die genauere Bezeichnung hinter der Ortsbezeichnung ab.

OpenRefine bietet zwei Möglichkeit zur Trennung von Spalten an:

  • Bei einem bestimmten Trennzeichen, oder
  • bei einer bestimmten Anzahl von Zeichen.

Für unser Problem bietet sich einer Trennung nach dem «: » an. Der Leerschlag ist notwendig, sonst beginnt die zweite Spalte mit einem solchen. Reguläre Ausdrücke sind möglich. Eine Einführung inklusive Übungen  zu Regulären Ausdrücken bietet der Regexr. In OpenRefine kann bei der Trennung von Spalten eine maximale Anzahl neu zu bildender Spalten angegeben werden.

Rechts im Bearbeitungsfenster können weitere Optionen angewählt werden, die OpenRefine nach der Trennung der Spalten ausführt. «Guess cell type» bestimmt automatisch den Inhaltstyp der Zelle, also ob es sich um einen String (Text), eine Zahl oder ein Datum handelt. «Remove this column» entfernt die ursprüngliche Spalte. Diese Option soll jetzt nicht gewählt werden, wir wollen die ursprüngliche «Titel_Name» Spalte beibehalten.

Ein Klick auf «OK» trennt die Spalten. Neben der Spalte «Titel_Name» befinden sich jetzt die Spalte «Titel_Name 1» und die Spalte «Titel_Name 2» mit der genaueren Bezeichnung des Inhalts der Fotografie, und «Titel_Name 3».

Diese letzte Spalte wurde so nicht erwartet. Eine Facette zeigt, dass lediglich zwei Zeilen in dieser Spalte einen Inhalt haben.

OpenRefine Facet

Offensichtlich befand sich in diesen Zellen mehr als ein «: », so dass sie mehr als einmal geteilt wurden. Dies hätte sich mit einer «2» bei «Split into _ columns at most (leave blank for no limit)» verhindern lassen. Beheben lässt sich der Fehler, indem der letzte Schritt rückgängig gemacht (siehe unten) und mit dieser Einstellung nochmal wiederholt wird.

Die Spalte «Titel_Name 1» wird nun erneut aufgeteilt, diesmal beim «, ». Der Prozess ist derselbe wie vorhin. Diesmal setzen wir aber ein Häkchen bei «Remove this column», und legen die maximale Anzahl der Spalten auf 2 fest. Daraus entstehen die Spalten «Titel_Name 1 1» und «Titel_Name 1 2».

Umbenennen von Spalten

Diese Namen sind etwas unhandlich, wir werden deshalb sinnvollere Spaltenüberschriften vergeben.

Dies wird im Spaltenmenü unter «Edit column» -> «Rename this column» gemacht. Aussagekräftigere Titel sind z.B. «Land» für «Titel_Name 1 1», «Ort_weltweit» für «Titel_Name 1 2» und «Kurztitel» für «Titel_Name 2». Aus einer Spalte, die Ortsnamen und andere Inhalte enthielt, haben wir jetzt übersichtliche Informationen extrahiert.

OpenRefine lässt Leerzeichen in Spaltenüberschriften zu. Da andere Anwendungen damit Probleme haben ist es dennoch sinnvoll, von Anfang an auf Leerzeichen oder Sonderzeichen wie Umlaute zu verzichten.

Undo/Redo

Verschiedentlich wurde schon auf die Möglichkeit verwiesen, Arbeitsschritte rückgängig zu machen.

Schnell und einfach geht das mit der Tastenkombination Ctrl + Z. OpenRefine bietet aber mehr.

Im Tab «Undo/Redo» in der linken Seitenspalte können einzelne oder mehrere Schritte rückgängig gemacht oder wiederholt werden. Der aktuelle Stand des Schwarzenbach-Metadaten-Projekts sieht so aus:

Alle Arbeitsschritte sind aufgelistet, jeweils mit den umgesetzten Befehlen. Auch über das Menü ausgeführte Befehle sind hier als Text dargestellt.

Ein Klick auf einen Arbeitsschritt setzt das ganze Projekt wieder auf diesen Stand zurück.

Ausserdem kann der Code aller oder einiger der bisherigen Arbeitsschritte kopiert werden. Danach können sie in einem anderen oder auch im selben Projekt angewendet werden. Dazu auf «Extract» klicken. Hier können die gewünschten Arbeitsschritte ausgewählt werden.

Auf der rechten Seite wird das JSON angezeigt. Sind die gewünschten Arbeitsschritte ausgewählt, kann der Code mit Ctrl + A markiert und mit Ctrl + C kopiert werden.

Zur Übung kopieren wir den Code aller Arbeitsschritte. Dann setzen wir das Projekt im Tab Undo/Redo auf den Schritt 0 zurück, indem wir auf «0. Create Project» klicken. Danach «Apply» wählen, den zuvor kopierten Code mit Ctrl + V in das Textfeld einfügen, und mit «Perform Operations» anwenden. Das Projekt ist jetzt wieder auf dem gleichen Stand wie zuvor.

Auf diese Weise Arbeitsschritte zu kopieren funktioniert auch über Projekte hinweg, wenn die Spaltenüberschriften dieselben sind.

Fragen, Anregungen oder Wünsche nehmen wir gerne per Mail entgegen.