Kapitel 3.1.2 überarbeitet

This commit is contained in:
Felix Lohmeier 2017-04-07 10:35:08 +02:00
parent 2babd06fdf
commit 1379c9cfe3
4 changed files with 726 additions and 28 deletions

View File

@ -2,7 +2,7 @@
Ziel: Metadaten mit OpenRefine weiter bearbeiten, exportieren und in einen Suchindex laden
Bitte nehmen Sie sich für die folgenden Abschnitte insgesamt etwa 4 Stunden Zeit:
Bitte nehmen Sie sich für die folgenden Abschnitte insgesamt etwa 8 Stunden Zeit:
* [3.1 Daten mit OpenRefine für Indexierung vorbereiten](3-1-0-daten-mit-openrefine-fuer-indexierung-vorbereiten.md)
* [3.2 Suchmaschinenindex Solr](3-2-0-suchmaschinenindex-solr.md)

View File

@ -47,7 +47,7 @@ rm -f marcxml*
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.
Geben Sie den folgenden Befehl im Terminal ein:
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
@ -58,7 +58,7 @@ Das Script lädt zunächst OpenRefine und den Python-Client in einen Unterordner
## 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önnen 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 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.
### 2.1 Anzahl der Werte pro MARC-Feld zählen
@ -67,32 +67,34 @@ Download des Shell-Scripts:
wget https://github.com/felixlohmeier/seminar-praxis-der-digitalen-bibliothek/raw/master/scripte/count-tsv.sh && chmod +x count-tsv.sh
```
Script starten:
Script starten (läuft mehrere Stunden):
```
./count-tsv.sh output/*.tsv | tee felder.tsv
```
Das Script gibt Ihnen für jede Datei nach und nach die Belegung aller enthaltenen Felder aus. Sie werden feststellen, dass viele Felder kaum belegt sind. Die dritte Spalte gibt an, wie häufig das Feld mehrfachbelegt ist (d.h. wie häufig das Zeichen ```␟``` vorkommt, das wir in Kapitel 7.3, Schritt 7 als Trennzeichen für mehrfach belegte Felder festgelegt haben). Der letzte Teil des Befehls (```tee felder.tsv```) sorgt dafür, dass zusätzlich zu der Ausgabe auf der Kommandozeile die Ergebnisse in der Datei "felder.tsv" gespeichert wurden.
Das Script gibt Ihnen für jede Datei nach und nach die Belegung aller enthaltenen Felder aus. Sie werden feststellen, dass viele Felder kaum belegt sind. Die dritte Spalte gibt an, wie häufig das Feld mehrfachbelegt ist (d.h. wie häufig das Zeichen ```␟``` vorkommt, das wir in Kapitel 2.3.5 als Trennzeichen für mehrfach belegte Felder festgelegt haben). Der letzte Teil des Befehls (```tee felder.tsv```) sorgt dafür, dass die Ergebnisse zusätzlich zur Ausgabe auf der Kommandozeile in der Datei "felder.tsv" gespeichert wurden.
### 2.2 Datei felder.tsv in OpenRefine öffnen
Erstellen Sie ein neues Projekt in Openrefine und laden Sie die Datei felder.tsv hoch. Bei rund 580.000 Datensätzen können wir vermutlich diejenigen Felder vernachlässigen, die weniger als 100x belegt sind.
Erstellen Sie ein neues Projekt in Openrefine und laden Sie die Datei felder.tsv mit Standardeinstellungen hoch.
Summen bilden:
* Sort by Name column (if not already sorted) and make sort permanent
* Blank Down on name column to remove duplicate values
* On Value column, do Edit Cells -> Merge multi-valued cells
* On same column, do Edit Cells -> Transform with a GREL expression of forEach(value.split(','),v,v.toNumber()).sum()
* Facet by Blank on Name column, and select True (ie blank rows)
* Use All -> Edit Rows -> Remove all matching rows to delete the redundant rows
* Spalte MARC-Feld / Sort / Sort... OK
* Im neuen Menü "Sort" Reorder rows permanently wählen
* Spalte MARC-Feld / Edit cells / Blank down
* Spalte Vorkommen / Edit cells / Join multi-valued cells
* Spalte Vorkommen / Edit cells / Transform... forEach(value.split(','),v,v.toNumber()).sum()
* Spalte Mehrfachbelegung / Edit cells / Join multi-valued cells
* Spalte Mehrfachbelegung / Edit cells / Transform... forEach(value.split(','),v,v.toNumber()).sum()
Felder, die sehr selten belegt sind, löschen:
* Numeric facet
* Use All -> Edit Rows -> Remove all matching rows
Bei rund 580.000 Datensätzen können wir vermutlich diejenigen Felder vernachlässigen, die weniger als 100x belegt sind:
* Spalte Vorkommen / Facet / Customized Facet / Numeric log facet ... Regler auf 0.30 — 2.00 einstellen
* Spalte All / Edit rows / Remove all matching rows
* Facette schließen
### 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 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 ungefähr so aus (in diesem Beispiel werden nur die Spalten A, B, C erhalten):
```
[
@ -108,32 +110,45 @@ Wenn Sie die Funktion ```All / Edit Columns / Re-order / remove columns...``` ü
]
```
Das ermöglicht uns mit ein paar Texttransformationen die Konfigurationsdatei automatisch zu generieren:
* Die Spalten müssen in die eckigen Klammern nach ```"columnNames":``` eingefügt werden.
* Die Spalten müssen von Anführungszeichen umschlossen sein.
* Zwischen den Spalten steht ein Komma (nach der letzten Spalte also keins!).
Wir generieren die Konfigurationsdatei mit der Templating-Funktion von OpenRefine:
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.
* 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.
* Rufen Sie im Menü "Export" den Punkt Templating auf
* Geben Sie folgendes in die Felder ein...
Prefix:
...
```
[
{
"op": "core/column-reorder",
"description": "Reorder columns",
"columnNames": [
```
Row Template:
...
```
{{jsonize(cells["MARC-Feld"].value)}}
```
Row Separator (unverändert):
```
,
```
Suffix:
...
```
Klicken Sie auf Export und speichern Sie die Datei im selben Ordner, in dem auch das Script openrefine-batch.sh liegt.
]
}
]
```
Klicken Sie auf Export und speichern Sie die Datei im selben Ordner, in dem auch das Script openrefine-batch.sh liegt. Ändern Sie die Dateiendung in "json", z.B. mit folgendem Befehl: ```mv felder-tsv.txt felder-tsv.json```
Alternativ können Sie die folgenden vorbereiteten Dateien verwenden. Hier sind zwei Beispielkonfigurationen:
1. Alle Felder: [3-1-2_all.json](openrefine/3-1-2_all.json)
2. Feldauswahl auf Basis von Zielschema [Dublin Core (unqualified)](http://www.loc.gov/marc/marc2dc.html): [3-1-2_minimal.json](openrefine/3-1-2_minimal.json)
2. Feldauswahl auf Basis des Zielschemas [Dublin Core (unqualified)](http://www.loc.gov/marc/marc2dc.html): [3-1-2_minimal.json](openrefine/3-1-2_minimal.json)
### 2.4 Dateien erneut mit OpenRefine automatisiert verarbeiten

468
openrefine/3-1-2_all.json Normal file
View File

@ -0,0 +1,468 @@
[
{
"op": "core/column-reorder",
"description": "Reorder columns",
"columnNames": [
"001",
"010 : a",
"015 : 2",
"015 : a",
"016 : 2",
"016 : a",
"020 : 9",
"020 : a",
"020 : c",
"020 : z",
"022 : a",
"022 : y",
"024 : 2",
"024 : a",
"028 : a",
"029 : a",
"030 : a",
"034 : 2",
"034 : A",
"034 : d",
"034 : e",
"034 : f",
"034 : g",
"034 : u",
"035 : a",
"040 : 9",
"040 : a",
"040 : b",
"040 : c",
"040 : d",
"040 : e",
"040 : f",
"041 : a",
"041 : h",
"043 : c",
"044 : a",
"044 : c",
"050 : a",
"060 : a",
"079 : a",
"079 : b",
"079 : c",
"079 : q",
"079 : v",
"082 : a",
"083 : 2",
"083 : 9",
"083 : a",
"083 : z",
"084 : 2",
"084 : 9",
"084 : a",
"084 : e",
"084 : q",
"088 : a",
"089 : 2",
"089 : 9",
"089 : a",
"100 : 0",
"100 : 4",
"100 : a",
"100 : b",
"100 : c",
"100 : d",
"100 : e",
"100 : t",
"110 : 0",
"110 : 4",
"110 : 9",
"110 : a",
"110 : b",
"110 : c",
"110 : d",
"110 : e",
"110 : g",
"110 : n",
"110 : t",
"111 : a",
"111 : c",
"111 : d",
"111 : n",
"130 : 9",
"130 : a",
"130 : p",
"150 : 9",
"150 : a",
"151 : 9",
"151 : a",
"151 : z",
"153 : a",
"153 : j",
"210 : a",
"240 : a",
"245 : a",
"245 : b",
"245 : c",
"245 : h",
"245 : n",
"245 : p",
"246 : a",
"246 : b",
"246 : g",
"246 : i",
"250 : a",
"250 : b",
"253 : i",
"256 : a",
"260 : 0",
"260 : a",
"260 : b",
"260 : c",
"263 : a",
"264 : a",
"264 : b",
"264 : c",
"300 : a",
"300 : b",
"300 : c",
"300 : e",
"336 : 2",
"336 : a",
"336 : b",
"337 : 2",
"337 : a",
"337 : b",
"338 : 2",
"338 : a",
"338 : b",
"362 : a",
"363 : a",
"363 : b",
"363 : i",
"363 : j",
"363 : k",
"375 : 2",
"375 : a",
"377 : 2",
"377 : a",
"400 : 5",
"400 : 9",
"400 : a",
"400 : b",
"400 : c",
"400 : d",
"400 : e",
"400 : i",
"400 : t",
"400 : w",
"400 : x",
"410 : 5",
"410 : 9",
"410 : a",
"410 : b",
"410 : e",
"410 : i",
"410 : n",
"410 : t",
"410 : w",
"410 : x",
"411 : 9",
"411 : a",
"411 : c",
"411 : d",
"411 : i",
"411 : j",
"411 : n",
"411 : w",
"430 : 9",
"430 : a",
"450 : 9",
"450 : a",
"450 : x",
"451 : 9",
"451 : a",
"451 : i",
"451 : w",
"451 : x",
"451 : z",
"490 : a",
"490 : v",
"500 : 0",
"500 : 9",
"500 : a",
"500 : b",
"500 : c",
"500 : d",
"500 : e",
"500 : i",
"500 : w",
"501 : a",
"502 : a",
"502 : b",
"502 : c",
"502 : d",
"504 : a",
"505 : a",
"510 : 0",
"510 : 9",
"510 : a",
"510 : b",
"510 : e",
"510 : i",
"510 : w",
"511 : 0",
"511 : 9",
"511 : a",
"511 : c",
"511 : d",
"511 : i",
"511 : j",
"511 : n",
"511 : w",
"515 : a",
"520 : a",
"530 : 0",
"530 : 9",
"530 : i",
"530 : w",
"533 : 7",
"533 : a",
"533 : b",
"533 : c",
"533 : d",
"533 : e",
"533 : f",
"533 : n",
"534 : n",
"538 : a",
"546 : a",
"548 : 9",
"548 : a",
"548 : i",
"548 : w",
"550 : 0",
"550 : 9",
"550 : a",
"550 : i",
"550 : w",
"551 : 0",
"551 : 9",
"551 : a",
"551 : i",
"551 : w",
"551 : z",
"555 : a",
"583 : a",
"583 : k",
"583 : z",
"591 : a",
"600 : 0",
"600 : 2",
"600 : a",
"600 : b",
"600 : c",
"600 : d",
"600 : q",
"600 : t",
"600 : v",
"600 : x",
"600 : z",
"610 : 0",
"610 : 2",
"610 : 8",
"610 : 9",
"610 : a",
"610 : b",
"610 : t",
"610 : v",
"610 : x",
"610 : y",
"610 : z",
"611 : 0",
"611 : 2",
"611 : a",
"611 : c",
"611 : d",
"630 : a",
"630 : d",
"630 : p",
"630 : v",
"630 : x",
"648 : 2",
"648 : 8",
"648 : a",
"650 : 0",
"650 : 2",
"650 : 8",
"650 : 9",
"650 : a",
"650 : v",
"650 : x",
"650 : y",
"650 : z",
"651 : 0",
"651 : 2",
"651 : 9",
"651 : a",
"651 : v",
"651 : x",
"651 : y",
"651 : z",
"653 : 0",
"653 : 2",
"653 : a",
"653 : A",
"653 : S",
"655 : 0",
"655 : 2",
"655 : a",
"667 : 5",
"667 : a",
"670 : a",
"670 : b",
"670 : u",
"675 : a",
"678 : a",
"678 : b",
"678 : u",
"679 : a",
"680 : a",
"680 : i",
"689 : 0",
"689 : 5",
"689 : 9",
"689 : a",
"689 : A",
"689 : b",
"689 : c",
"689 : d",
"692 : a",
"700 : 0",
"700 : 2",
"700 : 4",
"700 : 9",
"700 : a",
"700 : c",
"700 : d",
"700 : e",
"710 : 0",
"710 : 2",
"710 : 4",
"710 : a",
"710 : b",
"710 : c",
"710 : d",
"710 : e",
"710 : g",
"710 : n",
"711 : a",
"711 : c",
"711 : d",
"711 : n",
"750 : 0",
"750 : 2",
"750 : 9",
"750 : a",
"751 : 0",
"751 : 2",
"751 : a",
"753 : a",
"770 : a",
"770 : d",
"770 : h",
"770 : i",
"770 : t",
"770 : w",
"772 : i",
"772 : t",
"772 : w",
"773 : d",
"773 : g",
"773 : i",
"773 : q",
"773 : t",
"773 : w",
"773 : x",
"775 : i",
"775 : t",
"776 : a",
"776 : d",
"776 : i",
"776 : t",
"776 : w",
"776 : z",
"780 : a",
"780 : d",
"780 : h",
"780 : i",
"780 : t",
"780 : w",
"785 : a",
"785 : d",
"785 : h",
"785 : i",
"785 : t",
"785 : w",
"787 : d",
"787 : h",
"787 : i",
"787 : n",
"787 : t",
"787 : w",
"787 : z",
"800 : a",
"800 : b",
"800 : n",
"800 : p",
"800 : t",
"800 : v",
"800 : w",
"810 : 9",
"810 : a",
"810 : p",
"810 : v",
"810 : w",
"830 : 9",
"830 : a",
"830 : b",
"830 : n",
"830 : p",
"830 : v",
"830 : w",
"856 : 3",
"856 : m",
"856 : q",
"856 : u",
"856 : y",
"856 : z",
"900 : a",
"900 : b",
"900 : c",
"900 : d",
"900 : f",
"900 : g",
"900 : s",
"900 : x",
"900 : z",
"912 : a",
"912 : b",
"950 : 2",
"950 : a",
"951 : 2",
"951 : a",
"951 : b",
"952 : c",
"952 : d",
"952 : e",
"952 : h",
"952 : j",
"952 : y",
"954 : 0",
"954 : a",
"954 : b",
"954 : c",
"954 : d",
"954 : e",
"954 : f",
"954 : g",
"954 : k",
"954 : x"
]
}
]

View File

@ -0,0 +1,215 @@
[
{
"op": "core/column-reorder",
"description": "Reorder columns",
"columnNames": [
"001",
"020 : a",
"022 : a",
"024 : a",
"041 : a",
"041 : h",
"050 : a",
"060 : a",
"082 : a",
"100 : 0",
"100 : 4",
"100 : a",
"100 : b",
"100 : c",
"100 : d",
"100 : e",
"100 : t",
"110 : 0",
"110 : 4",
"110 : 9",
"110 : a",
"110 : b",
"110 : c",
"110 : d",
"110 : e",
"110 : g",
"110 : n",
"110 : t",
"111 : a",
"111 : c",
"111 : d",
"111 : n",
"245 : a",
"245 : b",
"245 : c",
"245 : h",
"245 : n",
"245 : p",
"246 : a",
"246 : b",
"246 : g",
"246 : i",
"260 : 0",
"260 : a",
"260 : b",
"260 : c",
"500 : 0",
"500 : 9",
"500 : a",
"500 : b",
"500 : c",
"500 : d",
"500 : e",
"500 : i",
"500 : w",
"501 : a",
"502 : a",
"502 : b",
"502 : c",
"502 : d",
"504 : a",
"505 : a",
"510 : 0",
"510 : 9",
"510 : a",
"510 : b",
"510 : e",
"510 : i",
"510 : w",
"511 : 0",
"511 : 9",
"511 : a",
"511 : c",
"511 : d",
"511 : i",
"511 : j",
"511 : n",
"511 : w",
"515 : a",
"520 : a",
"530 : 0",
"530 : 9",
"530 : i",
"530 : w",
"533 : 7",
"533 : a",
"533 : b",
"533 : c",
"533 : d",
"533 : e",
"533 : f",
"533 : n",
"534 : n",
"538 : a",
"546 : a",
"548 : 9",
"548 : a",
"548 : i",
"548 : w",
"550 : 0",
"550 : 9",
"550 : a",
"550 : i",
"550 : w",
"551 : 0",
"551 : 9",
"551 : a",
"551 : i",
"551 : w",
"551 : z",
"555 : a",
"583 : a",
"583 : k",
"583 : z",
"591 : a",
"600 : 0",
"600 : 2",
"600 : a",
"600 : b",
"600 : c",
"600 : d",
"600 : q",
"600 : t",
"600 : v",
"600 : x",
"600 : z",
"610 : 0",
"610 : 2",
"610 : 8",
"610 : 9",
"610 : a",
"610 : b",
"610 : t",
"610 : v",
"610 : x",
"610 : y",
"610 : z",
"611 : 0",
"611 : 2",
"611 : a",
"611 : c",
"611 : d",
"630 : a",
"630 : d",
"630 : p",
"630 : v",
"630 : x",
"650 : 0",
"650 : 2",
"650 : 8",
"650 : 9",
"650 : a",
"650 : v",
"650 : x",
"650 : y",
"650 : z",
"651 : 0",
"651 : 2",
"651 : 9",
"651 : a",
"651 : v",
"651 : x",
"651 : y",
"651 : z",
"653 : 0",
"653 : 2",
"653 : a",
"653 : A",
"653 : S",
"655 : 0",
"655 : 2",
"655 : a",
"700 : 0",
"700 : 2",
"700 : 4",
"700 : 9",
"700 : a",
"700 : c",
"700 : d",
"700 : e",
"710 : 0",
"710 : 2",
"710 : 4",
"710 : a",
"710 : b",
"710 : c",
"710 : d",
"710 : e",
"710 : g",
"710 : n",
"711 : a",
"711 : c",
"711 : d",
"711 : n",
"751 : 0",
"751 : 2",
"751 : a",
"770 : t",
"772 : t",
"773 : t",
"775 : t",
"776 : t",
"780 : t",
"785 : t",
"787 : t",
"856 : q",
"856 : u",
]
}
]