Verbesserungen Kapitel 3

This commit is contained in:
Felix Lohmeier 2017-04-07 12:57:09 +02:00
parent 1379c9cfe3
commit 4a47e6801b
3 changed files with 19 additions and 17 deletions

View File

@ -45,7 +45,7 @@ rm -f marcxml*
### 1.5 Automatische Verarbeitung starten
Das Script benötigt eine Reihe von Parametern, darunter das Quellverzeichnis, das Verzeichnis mit den Transformationsdateien und das Zielverzeichnis. Bei der Verarbeitung von XML Dateien ist zusätzlich das Format und der XML-Pfad (analog zum Klick in der GUI beim Erstellen der Projekte) anzugeben. Die abschließenden Parameter -m und -R sind technischer Natur und sorgen dafür, dass OpenRefine bis zu 3GB Arbeitsspeicher verwenden darf und unnötige Neustarts vermieden werden.
Das Script benötigt die eine Reihe von Parametern, darunter das Quellverzeichnis, das Verzeichnis mit den Transformationsdateien und das Zielverzeichnis. Bei der Verarbeitung von XML Dateien ist zusätzlich das Format und der XML-Pfad (analog zum Klick in der GUI beim Erstellen der Projekte) anzugeben. Die abschließenden Parameter -m und -R sind technischer Natur und sorgen dafür, dass OpenRefine bis zu 3GB Arbeitsspeicher verwenden darf und unnötige Neustarts vermieden werden.
Geben Sie den folgenden Befehl im Terminal ein (läuft mehrere Stunden):
@ -53,12 +53,12 @@ Geben Sie den folgenden Befehl im Terminal ein (läuft mehrere Stunden):
./openrefine-batch.sh -a input -b config -c output -f xml -i recordPath=zs:searchRetrieveResponse -i recordPath=zs:records -i recordPath=zs:record -i recordPath=zs:recordData -i recordPath=record -m 3G -R
```
Das Script lädt zunächst OpenRefine und den Python-Client in einen Unterordner und führt dann für jede Datei die Transformation aus und speichert die verarbeiteten Dateien im Zielverzeichnis im Format TSV.
Das Script lädt zunächst OpenRefine und den Python-Client in einen Unterordner und führt dann für jede Datei die Transformation aus und speichert die verarbeiteten Dateien im Zielverzeichnis im Format TSV (Tabellendokument mit Tabs als Trennzeichen).
## Schritt 2: Spalten einheitlich sortieren (und nicht benötigte MARC-Felder löschen)
Schauen Sie sich die ersten Zeilen der TSV-Dateien mit ```head -n1 *.tsv``` an. Die verschiedenen Pakete enthalten sehr unterschiedliche Spalten und sie sind in unterschiedlicher Reihenfolge sortiert. Mit dem Befehl ```head -q -n1 *.tsv | tr "\t" "\n" | sort | uniq -c``` könnten Sie sich einen Überblick darüber verschaffen, wie oft eine Spalte in den verschiedenen TSV-Dateien vorkommt. Leider sind die Daten uneinheitlich codiert, so dass sehr viele unterschiedliche MARC-Felder belegt sind. Die daraus resultierende hohe Anzahl an Spalten stellt hohe Leistungsanforderungen an OpenRefine. Der Arbeitsspeicher wird vermutlich nicht ausreichen, um alle Daten in ein Projekt zu laden. Führen Sie die folgenden Schritte aus, um die Spalten einheitlich zu sortieren und die Anzahl der Felder zu reduzieren.
Schauen Sie sich die ersten Zeilen der TSV-Dateien mit ```head -n1 *.tsv``` an. Die verschiedenen Pakete enthalten unterschiedliche Spalten und sie sind in unterschiedlicher Reihenfolge sortiert. Mit dem Befehl ```head -q -n1 *.tsv | tr "\t" "\n" | sort | uniq -c``` könnten Sie sich einen Überblick darüber verschaffen, wie oft eine Spalte in den verschiedenen TSV-Dateien vorkommt. Leider sind die Daten uneinheitlich codiert, so dass sehr viele unterschiedliche MARC-Felder belegt sind. Die daraus resultierende hohe Anzahl an Spalten stellt hohe Leistungsanforderungen an OpenRefine. Der Arbeitsspeicher wird vermutlich nicht ausreichen, um alle Daten in ein Projekt zu laden. Führen Sie die folgenden Schritte aus, um die Spalten einheitlich zu sortieren und die Anzahl der Felder zu reduzieren.
### 2.1 Anzahl der Werte pro MARC-Feld zählen
@ -94,7 +94,7 @@ Bei rund 580.000 Datensätzen können wir vermutlich diejenigen Felder vernachl
### 2.3 Transformationsdatei für OpenRefine generieren
Wenn Sie die Funktion ```All / Edit Columns / Re-order / remove columns...``` über die grafische Oberfläche durchführen und anschließend die Funktion ```Undo / Redo / Extract ...``` aufrufen, können Sie sich anschauen, wie die Transformationsregel für diese Funktion in JSON definiert ist. Diese ist sehr einfach aufgebaut und sieht ungefähr so aus (in diesem Beispiel werden nur die Spalten A, B, C erhalten):
Wenn Sie die Funktion ```All / Edit Columns / Re-order / remove columns...``` über die grafische Oberfläche durchführen und anschließend die Funktion ```Undo / Redo / Extract ...``` aufrufen, können Sie sich anschauen, wie die Transformationsregel für diese Funktion in JSON definiert ist. Diese ist sehr einfach aufgebaut und sieht so aus (in diesem Beispiel werden nur die Spalten A, B, C erhalten):
```
[
@ -111,10 +111,9 @@ Wenn Sie die Funktion ```All / Edit Columns / Re-order / remove columns...``` ü
```
Das ermöglicht es uns die Transformationsdatei mit der Templating-Funktion von OpenRefine zu generieren:
* Löschen Sie alle Spalten bis auf die Erste (MARC-Feld)
* Löschen Sie alle nicht benötigten Felder (Zeilen). Je weniger Felder enthalten sind, desto übersichtlicher wird die weitere Bearbeitung in den folgenden Kapiteln und desto geringer wird der Bedarf an Arbeitsspeicher. Als Orientierung können Sie die Basifelder in [Dublin Core (unqualified)](http://www.loc.gov/marc/marc2dc.html) heranziehen.
* Löschen Sie alle nicht benötigten MARC-Felder (Zeilen). Je weniger Felder enthalten sind, desto übersichtlicher wird die weitere Bearbeitung in den folgenden Kapiteln und desto geringer wird der Bedarf an Arbeitsspeicher. Als Ausgangspunkt können Sie die Basisfelder in [Dublin Core (unqualified)](http://www.loc.gov/marc/marc2dc.html) heranziehen.
* Rufen Sie im Menü "Export" den Punkt Templating auf
* Geben Sie folgendes in die Felder ein...
* Geben Sie Folgendes in die Felder ein...
Prefix:
```
@ -167,9 +166,9 @@ wget https://github.com/felixlohmeier/seminar-praxis-der-digitalen-bibliothek/ra
OpenRefine führt unterschiedliche Datenstrukturen sinnvoll zusammen. Wenn die Dateien unterschiedlich viele Spalten oder eine andere Reihenfolge der Spalten haben, so ist das kein Problem. OpenRefine nimmt alle Spalten der ersten Datei auf und belegt diese mit neuen Zeilen. Sobald in einer weiteren Datei eine neue Spalte auftaucht, die OpenRefine noch nicht bekannt ist, so wird diese hinten angehängt.
Für das Laden der gesamten rund 580.000 Datensätze werden etwa XXX GB freier Arbeitsspeicher benötigt. Starten Sie OpenRefine mit dem zusätzlichen Parameter ```-m 4G```, damit OpenRefine über mehr Speicher verfügen kann. Sollten Sie auf Ihrer virtuellen Maschine nicht über genügend freien Arbeitsspeicher verfügen, dann reduzieren Sie den Wert im Parameter ```-m``` und laden Sie nur einen Teil der Daten.
Für das Laden der gesamten rund 580.000 Datensätze werden etwa 5 GB freier Arbeitsspeicher benötigt. Starten Sie OpenRefine mit dem zusätzlichen Parameter ```-m 5G```, damit OpenRefine über mehr Speicher verfügen kann. Sollten Sie auf Ihrer virtuellen Maschine nicht über genügend freien Arbeitsspeicher verfügen, dann reduzieren Sie den Wert im Parameter ```-m``` und laden Sie nur einen Teil der Daten.
```
~/openrefine-2.7-rc.2/refine -m 4G
~/openrefine-2.7-rc.2/refine -m 5G
```
Erstellen Sie ein neues Projekt und laden Sie die im vorigen Schritt erstellten TSV-Dateien aus dem Ordner ```output``` hoch.

View File

@ -17,7 +17,7 @@ Hinweise:
* {%s%}New column name: Titel{%ends%}
* {%s%}Expression: value + if(isNonBlank(cells["245 : b"].value),". ","") + if(isNonBlank(cells["245 : b"].value),cells["245 : b"].value,"") + if(isNonBlank(cells["245 : n"].value)," - ","") + if(isNonBlank(cells["245 : n"].value),cells["245 : n"].value,"") + if(isNonBlank(cells["245 : p"].value)," - ","") + if(isNonBlank(cells["245 : p"].value),cells["245 : p"].value,"") + if(isNonBlank(cells["246 : a"].value)," - ","") + if(isNonBlank(cells["246 : a"].value),cells["246 : a"].value,""){%ends%}
** Als JSON-Datei: [3-1-3-1.json](openrefine/3-1-3-1.json)**
**Als JSON-Datei: [3-1-3-1.json](openrefine/3-1-3-1.json)**
## Aufgabe 2: Löschen Sie alle Datensätze, in denen das Feld "Titel" nicht belegt ist
@ -33,7 +33,7 @@ Hinweise:
* {%s%}All / Edit rows / Remove all matching rows{%ends%}
* {%s%}Facette schließen{%ends%}
** Als JSON-Datei: [3-1-3-2.json](openrefine/3-1-3-2.json)**
**Als JSON-Datei: [3-1-3-2.json](openrefine/3-1-3-2.json)**
## Aufgabe 3: Generieren Sie einheitliche ISBN-Nummern mit 13 Ziffern
@ -57,7 +57,7 @@ Hinweise:
Anmerkung: Alle Sonderfälle, in denen noch Text hinter den ISBN-Nummern steht, sind mit diesen Transformationsregeln noch nicht behandelt. Dafür liegt aber zumindest für einen Teil der Datensätze eine einheitliche ISBN13-Kodierung vor.
** Als JSON-Datei: [3-1-3-3.json](openrefine/3-1-3-3.json)**
**Als JSON-Datei: [3-1-3-3.json](openrefine/3-1-3-3.json)**
## Aufgabe 4: Ergänzen Sie ein Feld "id" für den Suchindex
@ -68,7 +68,7 @@ Der Suchindex Solr erwartet ein Feld "id" mit eindeutiger Kennung in der ersten
* {%s%}Spalte "001" / Edit column / Add column based on this column... / New column name: id{%ends%}
** Als JSON-Datei: [3-1-3-4.json](openrefine/3-1-3-4.json)**
**Als JSON-Datei: [3-1-3-4.json](openrefine/3-1-3-4.json)**
## Aufgabe 5: Wenden Sie die vorbereitete Transformationsdatei zur Generierung weiterer Felder an
@ -76,7 +76,7 @@ Der Suchindex Solr erwartet ein Feld "id" mit eindeutiger Kennung in der ersten
Das identifizieren wichtiger Felder wie Titel, Urheber, Ort, Erscheinungsjahr, Medientyp in den MARC-Daten ist mühsam und sprengt den Rahmen dieses Seminars. Ich habe daher eine Transformationsdatei erstellt, die Regeln zur Generierung weiterer Felder enthält. Diese unvollständige Empfehlung bildet auch die Grundlage für die folgenden Aufgaben. Diese haben nicht zum Ziel ein perfektes Mapping zu erstellen, sondern sollen ein paar Problemfelder illustrieren und sinnvolle Beispieldaten für den Suchindex (Kapitel 8) und die Kataloganzeige (Kapitel 9) bilden.
Hinweise:
* Verwenden Sie die **JSON-Datei ** Als JSON-Datei: [3-1-3-5.json](openrefine/3-1-3-5.json)****
* Verwenden Sie die **JSON-Datei [3-1-3-5.json](openrefine/3-1-3-5.json)**
## Lösung
@ -91,9 +91,13 @@ OpenRefine bietet viele Möglichkeiten die Daten in verschiedene Formate zu expo
* Alle Spalten löschen außer diejenigen, die in Kapitel 7.6 angelegt wurden: id, ISBN, ISSN, Sprache, LCC, DDC, Urheber, Medientyp, Ort, Verlag, Jahr, Datum, Beschreibung, Schlagwoerter, Beitragende, Reihe, Vorgaenger, Nachfolger, Link, Titel
* Export / Tab-separated value
** Als JSON-Datei: [3-1-3-6.json](openrefine/3-1-3-6.json)****
**Als JSON-Datei: [3-1-3-6.json](openrefine/3-1-3-6.json)**
Zur Prüfung der exportierten Datei können Sie ```csvstat``` verwenden (vgl. [Kapitel 3.1.2, Schritt 2](3-1-2-alle-daten-automatisiert-verarbeiten.md)).
Zur Prüfung der exportierten Datei können Sie wieder das Script ```count-tsv.sh``` verwenden (vgl. [Kapitel 3.1.2, Schritt 2.1](3-1-2-alle-daten-automatisiert-verarbeiten.md)). Beispiel:
```
./count-tsv.sh hsh-ksf.tsv
```
## Literatur

View File

@ -5,7 +5,6 @@
* Geben Sie im Terminal folgende Befehle ein:
```
java -version
wget http://archive.apache.org/dist/lucene/solr/6.5.0/solr-6.5.0.tgz
tar zxf solr-6.5.0.tgz
```