OpenRefine (früher Google Refine, davor Freebase Gridworks) ist das Standard-Werkzeug, um tabellarische Daten zu inspizieren, bereinigen, transformieren und gegen Authority-Files zu mappen. Java-basiert, läuft lokal als Web-App auf http://localhost:3333, alle Daten bleiben auf dem eigenen Rechner.

In der GLAM- und DH-Welt ist OpenRefine die naheliegende Brücke zwischen Excel-/CSV-basierter Erschliessungsarbeit und der Linked-Data-Welt: ein Sprint mit Cluster-Erkennung, Reconciliation gegen GND, Wikidata oder GeoNames verwandelt eine rohe Personen- oder Ortsliste in eine ID-angereicherte, weiterverarbeitbare Datei.

Installation und Start

# macOS via Homebrew
brew install --cask openrefine

# oder Download:
# https://openrefine.org/download.html

OpenRefine startet einen lokalen Server (localhost:3333); der Browser öffnet automatisch die UI. Daten werden in Projekten organisiert, die im Workspace-Verzeichnis als Snapshots persistiert werden — alle Änderungen sind reversibel via Undo/Redo, vollständige Operations-Historie ist als JSON exportierbar.

Datenimport

Unterstützte Formate beim Anlegen eines Projekts:

FormatHinweise
CSV / TSVmit Encoding-Erkennung, Trennzeichen-Auto-Detect
Excel (XLS/XLSX)mehrere Sheets, Header-Zeile optional
JSONPfad-Auswahl im Preview, Liste-of-Objects
XMLElement-Pfad-Auswahl
RDF (Turtle/N3/RDF/XML)mit RDF-Extension
Google Sheetsdirekt via URL
MARC21 (mit MARC2OpenRefine-Erweiterung)seltener

Für Sammlungs-Daten typisch: Excel-Export aus dem AIS, Import in OpenRefine, Bereinigung, Re-Import in das Quell-System mit angereicherten Spalten.

Facetten und Filter

Das Herzstück der Inspektion: Facets zeigen die Werteverteilung einer Spalte und erlauben das Filtern.

Facet-TypUse Case
Text Facetunique Werte zählen, Tippfehler aufspüren
Numeric FacetHistogramm, Ausreisser sehen
Timeline FacetDatums-Verteilungen visualisieren
Custom Text Facet (GREL)komplexe Klassifikationen
Text Filterregex-basierte Selektion
Scatterplot FacetKorrelation zweier numerischer Spalten

In der Praxis heisst das: vor jeder Transformation per Facet sehen, welche Werte überhaupt vorkommen — typisch der Moment, in dem 3 verschiedene Schreibweisen für „Zürich” auffallen.

Cluster — Tippfehler und Varianten finden

Das Killer-Feature für Erschliessungs-Daten. Auf einer Spalte → Edit cells → Cluster and edit. OpenRefine schlägt Wertegruppen vor, die nach verschiedenen Algorithmen ähnlich sind:

  • Key collision — schnell, gut für Capitalization, Whitespace, Punktuation (fingerprint, ngram-fingerprint, metaphone3, cologne-phonetic)
  • Nearest neighbor — slower, gut für Tippfehler-Cluster (levenshtein, ppm)

Pro Cluster wählt der Erfasser einen Cleaner-Namen oder bestätigt einen vorgeschlagenen — Hunderte Datensätze konsolidieren sich in Minuten.

GREL — General Refine Expression Language

OpenRefines Mini-Sprache für Cell-Transformationen. Einsatz: Edit cells → Transform.

// Trim und Lowercase
value.trim().toLowercase()

// Datumsformat normalisieren
toDate(value, "dd.MM.yyyy").toString("yyyy-MM-dd")

// Erste Komponente eines Compound-Felds
value.split(",")[0].trim()

// Aus "Goethe, Johann Wolfgang von (1749-1832)" zwei Spalten machen
// — Spalte „name": value.match(/(.+?) \(/)[0]
// — Spalte „dates": value.match(/\((.+?)\)/)[0]

// Whitespace-Normalisierung (mehrere Leerzeichen → eins)
value.replace(/\s+/, " ").trim()

// Null/Empty-Cells aus Nachbarspalte füllen
if(isBlank(value), cells["other_col"].value, value)

// Zellen splitten und auf neue Zeilen verteilen
value.split(";")
// → Edit cells → Split multi-valued cells

// JSON-Lookup auf eine externe Spalte
forEach(cells["tags"].value.split(","), v, v.trim()).join(" · ")

GREL-Funktionen sind dokumentiert unter Help → GREL Reference; alternativ Jython oder Clojure als Skriptsprachen wählbar.

Reconciliation — Werte gegen Authority mappen

Der zentrale Linked-Data-Workflow. Auf einer Spalte → Reconcile → Start reconciling….

Verfügbare Endpoints (entweder vorinstalliert oder via URL hinzufügen):

AuthorityEndpoint-URL
Wikidatahttps://wikidata.reconci.link/<lang>/api
GND (Lobid)https://lobid.org/gnd/reconcile
GeoNameshttps://geonames.reconci.link/
VIAFhttps://reconciliation-api.toolforge.org/openrefine/viaf
Getty AAThttps://services.getty.edu/vocab/reconcile/aat
Getty ULANhttps://services.getty.edu/vocab/reconcile/ulan
Getty TGNhttps://services.getty.edu/vocab/reconcile/tgn
ORCIDhttps://reconciliation.orcid.org/openrefine/api

Reconciliation-Schritte:

  1. Endpoint wählen, Entitäts-Typ auswählen (Q5 Mensch für Wikidata, Tp für GND etc.)
  2. OpenRefine schickt jeden Wert ans API, bekommt Match-Kandidaten zurück
  3. UI zeigt Confidence-Scores; bei eindeutigen Treffern auto-bestätigen, sonst manuell
  4. Zusätzliche Properties als neue Spalten anziehen (z. B. Geburtsdatum, Wikidata-Q-ID)

Tipp: vor der Reconciliation per Facet leere Werte und Cluster bereinigen, damit das API nicht mit Müll bombardiert wird.

Wikidata-Upload mit Schema-Editor

OpenRefine hat einen eingebauten Wikidata-Schema-Editor: Aus den OpenRefine-Spalten lassen sich Wikidata-Statements modellieren (Item-Property-Value mit Qualifiers und Referenzen) und nach Authentifizierung direkt in Wikidata schreiben.

Das ist der Standard-Workflow für GLAM-Wikidata-Initiativen: Sammlungs-Inventar in Excel, in OpenRefine reconciliieren, fehlende Items neu anlegen, bestehende um Properties anreichern. Bei Massen-Edits unbedingt mit der Wikidata-Community absprechen (Wikidata:WikiProject GLAM).

Export — zurück in die Welt

FormatUse Case
CSV / TSV / Excelzurück in den Erfassungs-Workflow
HTML TableBericht, Mailbody
Templated Export (Jinja-artig)TEI, EAD, MARC, RDF, JSON-LD generieren
Custom export über GRELexotische Formate

Der Templated Export ist mächtig: ein Jinja-Template kann pro Zeile einen <persName>-Block, einen MARC-Record oder einen JSON-LD-Knoten generieren — das ersetzt manchmal eine ganze Skript-Pipeline.

{
  "@id": "https://example.org/persons/{{cells["id"].value}}",
  "@type": "Person",
  "name": "{{cells["name"].value|escape}}",
  "gnd": "https://d-nb.info/gnd/{{cells["gnd"].value}}",
  "wikidata": "http://www.wikidata.org/entity/{{cells["wikidata"].value}}"
}{% if not forloop.last %},{% endif %}

Praktische Patterns für GLAM

Personen-Inventar reconciliieren

  1. Excel-Liste (Name, Geburtsjahr, ggf. Beruf) importieren
  2. Cluster für Tippfehler in „Name”-Spalte
  3. Reconcile gegen Wikidata mit Type Q5, optional Lookup-Hint mit Geburtsjahr
  4. Auto-match bei Confidence > 0.95, Rest manuell
  5. Spalten anreichern: GND-ID (P227), VIAF-ID (P214), Wikipedia-Link
  6. Export als CSV mit zusätzlichen Authority-Spalten

Aus Tabelle TEI generieren

  1. Eine Zeile pro Person; Spalten name, gnd, birth, death, note
  2. Templated Export mit TEI-Template generiert <listPerson> mit <person xml:id="…">
  3. Resultat ins TEI-Personenregister einfügen

Datums-Bereinigung

Häufiger Fall: gemischte Formate (23.4.1850, 23. April 1850, 1850-04-23, April 1850, circa 1850). Strategie:

// Robuste GREL-Pipeline
if(value.match(/^\d{4}-\d{2}-\d{2}$/) != null, value,
  if(value.match(/^\d{1,2}\.\d{1,2}\.\d{4}$/) != null,
    toDate(value, "d.M.yyyy").toString("yyyy-MM-dd"),
    if(value.match(/^\d{4}$/) != null, value + "-01-01",
      "needs-review")))

Dann Facet auf needs-review setzen und manuell durchgehen.

Splitting und Reshape

Multi-valued Cells (z. B. „Zürich; Bern; Basel”) via Edit cells → Split multi-valued cells auf neue Zeilen verteilen, dann pro Zeile reconciliieren, dann via Edit cells → Join multi-valued cells wieder zusammen — mit IDs statt Roh-Werten.

Werkzeuge und Erweiterungen

  • Project Operations Export — alle Schritte als JSON, reproduzierbar auf neuen Datasets via Apply
  • RDF Extension — Triples direkt aus OpenRefine schreiben
  • Wikidata Extension (eingebaut) — Schema-Editor und Upload
  • Commons Extension — Bilder zu Wikimedia Commons hochladen
  • Reconciliation Service Endpoints — eigene API-Endpoints definierbar
  • OpenRefine Client (CLI) — Headless-Betrieb für Pipelines

Häufige Fallen

  • Encoding: bei CSV-Import explizit UTF-8 wählen, sonst zerbrechen Umlaute. Excel kann beim Speichern als CSV stillschweigend Latin-1 schreiben.
  • Massen-Reconciliation gegen kostenlose Endpoints: Lobid und Wikidata sind grosszügig, aber 100’000 Anfragen brechen jeden Goodwill. Bei sehr grossen Sets erst lokalen Index aufbauen oder Premium-Service nutzen.
  • Cluster-Algorithmen sind nicht intelligent: sie gruppieren ähnlich, nicht gleich. Vor Bestätigung sichten — sonst wird aus „Hans Müller” und „Hans Müller jun.” ein Datensatz.
  • GREL evaluiert eager: bei grossen Datasets können Custom Facets langsam werden. Erst auf 100-Zeilen-Sample testen, dann auf voller Daten anwenden.
  • Reconciliation-Confidence ist nicht deterministisch: gleicher Input kann je nach Tagesform anderer Score liefern. Manuell prüfen, nicht blind auto-matchen.
  • Workspace lokal: Projekte liegen im OpenRefine-Workspace, nicht in der Cloud. Backup nicht vergessen — Projekt-Export als .tar.gz möglich.
  • Java-Heap-Size: bei Datasets > 500’000 Zeilen den -Xmx-Parameter beim Start erhöhen, sonst Out-of-Memory.

Verhältnis zu anderen Werkzeugen

  • Pandas / Python — programmatischer, weniger UI-zentriert; OpenRefine ist niederschwelliger für GLAM-Erfassende ohne Programmier-Hintergrund.
  • csvkit — CLI-Werkzeuge für CSV-Operationen; gut für Skripte, ohne Reconciliation-Layer.
  • MarcEdit — bibliotheksspezifisch für MARC-Records; OpenRefine ergänzt mit Authority-Reconciliation.
  • Pandoc — orthogonal: Pandoc transformiert Dokumente, OpenRefine transformiert Daten.