Vorbereitung Seminar 21.11. / Überarbeitung Kapitel 7

This commit is contained in:
Felix Lohmeier 2016-11-20 01:28:51 +01:00
parent fc82a602cf
commit 1272072fe8
5 changed files with 155 additions and 23 deletions

View File

@ -18,4 +18,4 @@ Beiträge der Studierenden in den Lerntagebüchern:
* [Noch ein paar kleine Übungen zum warm werden mit OpenRefine](https://dennislerntnichtaus.wordpress.com/2016/11/08/noch-ein-paar-kleine-uebungen-zum-warm-werden-mit-openrefine/)
* [Datentransformation mit OpenRefine Teil 0](https://xyopendiscovery.wordpress.com/2016/11/08/datentransformation-mit-openrefine-teil-0/) und [Datentransformation: Transform… // Remove // Move column to …](https://xyopendiscovery.wordpress.com/2016/11/14/datentransformation-transform-remove-move-column-to/) und [Praxis “ yi-壹 ” ♥ Records bilden](https://xyopendiscovery.wordpress.com/2016/11/15/1-praxis-%e5%a3%b9-%e2%99%a5/)
* [Zwischenstand Bibliothekskatalog](https://lenaentdeckt.wordpress.com/2016/11/13/zwischenstand-bibliothekskatalog/) und [Datentransformation mit OpenRefine](https://lenaentdeckt.wordpress.com/2016/11/13/datentransformation-mit-openrefine/)
* [Zwischenstand Bibliothekskatalog](https://lenaentdeckt.wordpress.com/2016/11/13/zwischenstand-bibliothekskatalog/) und [Datentransformation mit OpenRefine](https://lenaentdeckt.wordpress.com/2016/11/13/datentransformation-mit-openrefine/) und [Tabelle kippen und Code speichern](https://lenaentdeckt.wordpress.com/2016/11/19/tabelle-kippen-und-code-speichern/)

View File

@ -6,9 +6,22 @@ OpenRefine verfügt über hilfreiche Undo/Redo-Funktionen, mit denen Sie auch al
Hinweise:
* Nutzen Sie die Funktion "Extract" im Bereich Undo/Redo und speichern Sie die Regeln in einer Textdatei zwischen (z.B. mit Windows Editor). Wenden Sie diese anschließend über die Funktion "Apply" in einem neuen Projekt an.
* Nutzen Sie die Funktion "Extract" im Bereich Undo/Redo und speichern Sie die Regeln in einer Textdatei zwischen (z.B. mit Windows Editor).
* Wenden Sie diese anschließend über die Funktion "Apply" in einem neuen Projekt an (z.B. per copy & paste)
Literatur:
## Lösung
Transformationsregeln extrahieren (altes Projekt):
* {%s%}Oben links Menü Undo / Redo den Button Extract... drücken{%ends%}
* {%s%}Alles im rechten Textfeld in die Zwischenablage kopieren (z.B. mit STRG+A und STRG+C){%ends%}
Transformationsregeln anwenden (neues Projekt):
* {%s%}Oben links Menü Undo / Redo den Button Apply... drücken{%ends%}
* {%s%}Den Inhalt der Zwischenablage einfügen (z.B. mit STRG+V) und den Button Perform Operations drücken.{%ends%}
## Literatur
* [History-Funktionen in OpenRefine Dokumentation](https://github.com/OpenRefine/OpenRefine/wiki/History)
* [JSON and my notepad or how to write script in google refine](http://kb.refinepro.com/2012/06/google-refine-json-and-my-notepad-or.html)
* [JSON and my notepad or how to write script in google refine](http://kb.refinepro.com/2012/06/google-refine-json-and-my-notepad-or.html)

View File

@ -4,17 +4,109 @@
Hinweise:
* Auf dem Webserver können mit Sie mit dem Befehl ```top``` die aktuellen Prozesse und deren Speicherbedarf sehen.
* Vermeiden Sie es, die Dateinamen von OpenRefine in den Daten speichern zu lassen. Dafür gibt es eine Checkbox beim Import.
* Auf dem Webserver können mit Sie mit dem Befehl ```top``` die aktuellen Prozesse und deren Speicherbedarf beobachten.
* Vermeiden Sie es, die Dateinamen von OpenRefine in den Daten speichern zu lassen. Das ist das Standardverhalten, kann aber mit einer Checkbox beim Import abgeschaltet werden.
* In der Version 2.6rc1 von OpenRefine ist ein **Bug im XML-Import von mehreren Dateien**, daher müssen wir für diese Aufgabe die Version 2.6rc2 oder die aktuelle Entwicklungsversion nutzen.
## Aufgabe 2: Wenden Sie die Transformationsregeln aus Kapitel 7.3 auf das neue Projekt an
```
sudo docker run --rm -p 8888:3333 -v /home/stud/refine:/data felixlohmeier/openrefine:2.6rc2 -i 0.0.0.0 -m 3G -d /data
```
## Lösung
Putty zweimal starten und jeweils per SSH verbinden:
* Terminal 1: {%s%}top eingeben und mehrfach > drücken, um die Sortierung bis zur Spalte RES zu verschieben. Die Spalte RES zeigt den Ressourcenverbrauch an Arbeitsspeicher für jeden Prozess. Wenn OpenRefine wie oben im Docker Startbefehl 3GB zugeteilt sind, dann darf diese Angabe niemals 3,0g überschreiten.{%ends%}
* Terminal 2: {%s%}sudo docker run --name=refine-server --rm -p 8888:3333 -v /home/stud/refine:/data felixlohmeier/openrefine:2.6rc2 -i 0.0.0.0 -m 3G -d /data{%ends%}
In der grafischen Oberfläche von OpenRefine:
* {%s%}Create Project / Durchsuchen... / 100 Dateien auswählen / Next / Configure Parsing Options{%ends%}
* {%s%}Parse data as XML files{%ends%}
* {%s%}In der Vorschauansicht an die Stelle <record xmlns="http://www.loc.gov/MARC21/slim"> klicken{%ends%}
* {%s%}Checkbox "Store file source..." deaktivieren / Projektnamen vergeben und Button "Create Project" drücken{%ends%}
## Aufgabe 2: Wenden Sie die Transformationsregeln aus Kapitel 7.3 auf das neue Projekt an und beobachten Sie den Speicherbedarf
Hinweise:
* Beobachten Sie auch hier den Speicherbedarf und notieren Sie sich die Laufzeit.
* Beobachten Sie auch hier den Speicherbedarf während der Transformation. Beenden Sie anschließend den Docker-Container mit OpenRefine, starten Sie ihn neu und laden anschließend noch einmal das transformierte Projekt. Prüfen Sie erneut den Speicherbedarf.
* Nutzen Sie Ihre gespeicherten Transformationsregeln oder die aus der Datei [07_3.json](https://felixlohmeier.gitbooks.io/seminar-wir-bauen-uns-einen-bibliothekskatalog/content/openrefine/07_3.json)
* In der Version 2.6rc2 von OpenRefine ist ein [Bug in der Funktion Columnize by key/value columns](https://github.com/OpenRefine/OpenRefine/issues/1093), daher müssen wir für diese Aufgabe die Version 2.6rc1 oder die aktuelle Entwicklungsversion nutzen.
## Aufgabe 3: Wenden Sie die Transformationsregeln aus Kapitel 7.3 auf alle 4500 Datensätze an
```
sudo docker run --rm -p 8888:3333 -v /home/stud/refine:/data felixlohmeier/openrefine:2.6rc1 -i 0.0.0.0 -m 3G -d /data
```
## Lösung
Putty zweimal starten wie in Lösung zu Aufgabe 1 und ```top``` weiterhin beobachten
In OpenRefine Projekt aus Aufgabe 1 laden und...
* {%s%}Menü oben links "Undo / Redo" aufrufen und Button "Apply..." drücken {%ends%}
* {%s%}Den Inhalt aus der Datei 07_3.json in die Zwischenablage kopieren und in das Textfeld von "Apply" einfügen und Button "Perform Operations" drücken{%ends%}
Speicherbedarf beim Laden von transformierten Projekten prüfen:
* {%s%}Docker-Container mit STRG+C beenden und noch gleich mit dem bekannten Kommando wieder starten{%ends%}
* {%s%}Im Browser das Projekt in OpenRefine laden und in top den Speicherbedarf prüfen.{%ends%}
## Aufgabe 3: Erstellen Sie Projekte für alle 4.500 Dateien in geeigneten Paketgrößen
Hinweise:
* Am wenigsten klicken müssen Sie, wenn Sie alle 4500 Dateien auf einmal laden. Dann wird OpenRefine jedoch nicht genug Arbeitsspeicher zur Verfügung haben, um alle Transformationen durchzuführen.
* Machen Sie eine kleine Hochrechnung auf Basis des Speicherbedarfs aus Aufgabe 2, planen Sie mindestens 25% Reserve ein und wählen Sie auf dieser Basis die Größe ihrer "Pakete".
* Für das Projekt erstellen müssen Sie wieder die Version 2.6rc2 verwenden, wie in Aufgabe 1.
* Am wenigsten klicken müssen Sie, wenn Sie alle 4500 Dateien auf einmal laden. Dafür wird der Arbeitsspeicher aber nicht ausreichen, erst recht nicht, wenn Sie dann anschließend die Transformationen durchführen wollen.
* Machen Sie eine kleine Hochrechnung auf Basis des Speicherbedarfs aus Aufgabe 2, planen Sie mindestens 25% Reserve ein und wählen Sie auf dieser Basis die Größe ihrer "Pakete".
* OpenRefine räumt den Arbeitsspeicher erst nach längerer Zeit von alleine auf. Wenn Sie viele Projekte hintereinander erstellen könnte es auch hier zu Engpässen kommen. Stoppen Sie den Docker-Container am besten nach jedem erstellten Projekt und starten Sie ihn direkt wieder neu. Damit sind Sie auch sicher, dass die erstellten Projekte sauber abgespeichert werden.
## Lösung
* wie in Aufgabe 1
* Empfohlene Paketgröße: {%s%}30 Projekte mit je 150 Dateien bei 3GB Arbeitsspeicher für OpenRefine{%ends%}
## Aufgabe 4: Wenden Sie die Transformationsregeln auf alle in Aufgabe 3 erstellten Projekte an
Hinweise:
* Für das Anwenden der Transformationen müssen Sie die Version 2.6rc1 verwenden, wie in Aufgabe 2.
* Da Sie die viele Klickarbeit aus Aufgabe 3 bestimmt nicht wiederholen wollen, erstellen Sie zunächst eine Sicherheitskopie der Daten. Beenden Sie dazu den Dockercontainer und führen Sie den folgenden Kopierbefehl aus:
```
cp -r refine refine-backup
```
* Falls bei den Transformationen etwas schiefgehen sollte, können Sie die Daten aus dem Backup wie folgt zurückspielen:
```
rm -r -f refine
cp -r refine-backup refine
```
## Lösung
* wie in Aufgabe 2
## Aufgabe 5: Alle Projekte einzeln als TSV exportieren
Hinweise:
* Wählen Sie das Format Tab separated value (TSV) im Export-Menü oben rechts.
## Lösung
* {%s%}Projekte nacheinander in OpenRefine laden und im Menü oben rechts Export / "Tab separated value" wählen. Der Download sollte automatisch beginnen. Speichern Sie die Daten lokal in einem beliebigen Verzeichnis.{%ends%}
## Aufgabe 6: Neues Projekt aus den TSV Dateien erstellen
Hinweise:
* Vermeiden Sie es, die Dateinamen von OpenRefine in den Daten speichern zu lassen. Das ist das Standardverhalten, kann aber mit einer Checkbox beim Import abgeschaltet werden.
* Wenn der Arbeitsspeicher nicht ausreicht, um alle Daten in ein Projekt zu laden, dann müssen Sie wohl oder übel mit mehreren Projekten arbeiten.
## Lösung
* {%s%}Create Project / Durchsuchen... / TSV Dateien auswählen / Next / Configure Parsing Options{%ends%}
* {%s%}Parse data as CSV / TSV / separator-based files{%ends%}
* {%s%}Checkbox "Store file source..." deaktivieren / Projektnamen vergeben und Button "Create Project" drücken{%ends%}

View File

@ -117,6 +117,7 @@ Wie Variante 1 mit folgenden Verbesserungen:
* Die IDs der zu verarbeitenden Projekte können nun an den Befehl zum Aufruf des Scripts angehängt werden. Wenn keine Projekt-IDs angegeben werden, dann werden diejenigen Projekte verarbeitet, deren Name mit ```TRANSFORM``` beginnt. Dazu werden die vorhandenen Projekte ausgelesen und daraus die Projektnummern mit einem grep-Befehl ausgefiltert und in eine Variable geschrieben.
* Die anzuwendenden Transformationsdateien werden zu Beginn in einer Variable ```jsonfiles``` definiert (und können direkt im Script geändert werden). Das Script wendet diese Transformationsdateien in der genannten Reihenfolge auf alle zu verarbeitenden Projekte an.
* Das Script lädt selbsttätig die aktuellen Transformationsdateien aus dem Script in Gitbook, d.h. aus dem Verzeichnis https://felixlohmeier.gitbooks.io/seminar-wir-bauen-uns-einen-bibliothekskatalog/content/openrefine/ in das Arbeitsverzeichnis von OpenRefine und überschreibt ggf. gleichlautende Dateien.
* Der Server wird für jedes Projekt einzeln gestartet und beendet, damit der Arbeitsspeicher nicht voll läuft.
* Statt der festen Wartezeit (sleep 15) erfolgt eine Abfrage, ob der Server erreichbar ist, bevor das Script fortschreitet. Das beschleunigt die Verarbeitung, wenn der Server schneller als in 15 Sekunden startet und beugt Fehlern vor, falls der Server ausgelastet ist und mal länger als 15 Sekunden braucht.
* Am Ende werden zur Erfolgskontrolle die exportierten TSV-Dateien ausgegeben.
* Das Script gibt die Konfigurationswerte sowie regelmäßig Start- und Endzeitpunkte aus.
@ -125,7 +126,7 @@ Wie Variante 1 mit folgenden Verbesserungen:
```
#!/bin/bash
# Script zur Transformation und zum Export von Projekten mit OpenRefine
# Variante "Komfort", Stand: 18.11.2016
# Variante "Komfort", Stand: 20.11.2016
#
# Voraussetzungen:
# 1. Docker
@ -210,10 +211,23 @@ if [ -z "$1" ]
echo ""
fi
# Server beenden und Container löschen
echo "Server beenden und Container löschen..."
sudo docker stop refine-server
sudo docker rm refine-server
echo ""
# Schleife für Transformation und Export der Projekte
for projectid in "${projects[@]}" ; do
echo "Start Projekt $projectid @ $(date)"
# Server starten
echo "Server starten..."
sudo docker run -d --name=refine-server -p ${port}:3333 -v ${workdir}:/data felixlohmeier/openrefine:2.6rc1 -i 0.0.0.0 -m ${ram} -d /data
# Warten bis Server vollständig gestartet ist
until curl --silent http://localhost:${port} | grep -q -o "OpenRefine" >/dev/null ; do sleep 1; done
# Transformationen durchführen
for jsonfile in "${jsonfiles[@]}" ; do
@ -225,15 +239,15 @@ for projectid in "${projects[@]}" ; do
echo "Exportiere in ${projectid}.tsv"
sudo docker run --rm --link refine-server -v ${workdir}:/data felixlohmeier/openrefine:client-py -E --output=${projectid}.tsv ${projectid}
# Server beenden und Container löschen
echo "Server beenden und Container löschen..."
sudo docker stop refine-server
sudo docker rm refine-server
echo "Ende Projekt $projectid @ $(date)"
echo ""
done
# Server beenden und Container löschen
echo "Server beenden und Container löschen..."
sudo docker stop refine-server
sudo docker rm refine-server
# Endzeitpunkt ausgeben
echo "Endzeitpunkt: $(date)"
echo ""

View File

@ -1,6 +1,6 @@
#!/bin/bash
# Script zur Transformation und zum Export von Projekten mit OpenRefine
# Variante "Komfort", Stand: 18.11.2016
# Variante "Komfort", Stand: 20.11.2016
#
# Voraussetzungen:
# 1. Docker
@ -85,10 +85,23 @@ if [ -z "$1" ]
echo ""
fi
# Server beenden und Container löschen
echo "Server beenden und Container löschen..."
sudo docker stop refine-server
sudo docker rm refine-server
echo ""
# Schleife für Transformation und Export der Projekte
for projectid in "${projects[@]}" ; do
echo "Start Projekt $projectid @ $(date)"
# Server starten
echo "Server starten..."
sudo docker run -d --name=refine-server -p ${port}:3333 -v ${workdir}:/data felixlohmeier/openrefine:2.6rc1 -i 0.0.0.0 -m ${ram} -d /data
# Warten bis Server vollständig gestartet ist
until curl --silent http://localhost:${port} | grep -q -o "OpenRefine" >/dev/null ; do sleep 1; done
# Transformationen durchführen
for jsonfile in "${jsonfiles[@]}" ; do
@ -100,15 +113,15 @@ for projectid in "${projects[@]}" ; do
echo "Exportiere in ${projectid}.tsv"
sudo docker run --rm --link refine-server -v ${workdir}:/data felixlohmeier/openrefine:client-py -E --output=${projectid}.tsv ${projectid}
# Server beenden und Container löschen
echo "Server beenden und Container löschen..."
sudo docker stop refine-server
sudo docker rm refine-server
echo "Ende Projekt $projectid @ $(date)"
echo ""
done
# Server beenden und Container löschen
echo "Server beenden und Container löschen..."
sudo docker stop refine-server
sudo docker rm refine-server
# Endzeitpunkt ausgeben
echo "Endzeitpunkt: $(date)"
echo ""