Kapitel 7.5 und 7.6 überarbeitet und neues Script count-tsv.sh ergänzt
This commit is contained in:
parent
1817e196a8
commit
2a57f2b82e
|
@ -192,8 +192,7 @@ Hinweise:
|
||||||
|
|
||||||
Bedarf an Arbeitsspeicher:
|
Bedarf an Arbeitsspeicher:
|
||||||
|
|
||||||
* Alle Daten alle Felder (07_5-6_all.json): Beim Importieren ... GB, Fertiges Projekt laden ... GB
|
* Reduzierte Felder (07_5-6_minimal.json): 2,78 GB
|
||||||
* Reduzierte Felder (07_5-6_minimal.json): Beim Importieren ... GB, Fertiges Projekt laden ... GB
|
|
||||||
|
|
||||||
## Lösung
|
## Lösung
|
||||||
|
|
||||||
|
@ -201,3 +200,116 @@ Bedarf an Arbeitsspeicher:
|
||||||
* {%s%}Parse data as CSV / TSV / separator-based files{%ends%}
|
* {%s%}Parse data as CSV / TSV / separator-based files{%ends%}
|
||||||
* {%s%}Character encoding: UTF-8{%ends%}
|
* {%s%}Character encoding: UTF-8{%ends%}
|
||||||
* {%s%}Checkbox "Store file source..." deaktivieren / Projektnamen vergeben und Button "Create Project" drücken{%ends%}
|
* {%s%}Checkbox "Store file source..." deaktivieren / Projektnamen vergeben und Button "Create Project" drücken{%ends%}
|
||||||
|
|
||||||
|
## Aufgabe 8: Prüfen, wie häufig Felder belegt sind
|
||||||
|
|
||||||
|
Sie können sich mit den Facetten in OpenRefine einen Überblick über die Belegung der Spalten verschaffen. Wählen Sie dazu ```Facet -> Customized facets -> Facet by blank```.
|
||||||
|
|
||||||
|
Alternativ können Sie TSV-Dateien auch auf der Kommandozeile durchzählen. Folgendes Script zählt alle Werte in den Spalten einer TSV-Datei.
|
||||||
|
|
||||||
|
### Vorgehen
|
||||||
|
|
||||||
|
```
|
||||||
|
#!/bin/bash
|
||||||
|
# Script zur Zählung von Feldbelegungen in TSV-Dateien
|
||||||
|
# Stand: 20.11.2016
|
||||||
|
# Nutzung: ./count-tsv.sh file.tsv
|
||||||
|
|
||||||
|
# Abfrage der Dateinamen
|
||||||
|
if [ -z "$1" ]
|
||||||
|
then
|
||||||
|
echo "Bitte Dateinamen angeben!"
|
||||||
|
echo "Beispiel: ./count.sh file.tsv"
|
||||||
|
exit
|
||||||
|
else
|
||||||
|
echo "Folgende Dateien werden untersucht:"
|
||||||
|
files=($*)
|
||||||
|
echo ${files[@]}
|
||||||
|
echo ""
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Schleife für mehrere Dateien
|
||||||
|
for file in "${files[@]}"; do
|
||||||
|
|
||||||
|
# Spaltennamen erfassen
|
||||||
|
readarray columns < <(head -q -n1 haw_000001_450200_minimal.tsv | tr '\t' '\n' | cat)
|
||||||
|
|
||||||
|
# Belegte Zellen in Spalten zählen und ausgeben
|
||||||
|
number=1
|
||||||
|
for column in "${columns[@]}"; do
|
||||||
|
echo -e ${column} "\t\t" $(cut -d$'\t' -f ${number} ${file} | grep -v '^$' | wc -l)
|
||||||
|
number=$(($number+1))
|
||||||
|
done
|
||||||
|
done
|
||||||
|
```
|
||||||
|
|
||||||
|
Script als Datei: [count-tsv.sh](https://felixlohmeier.gitbooks.io/seminar-wir-bauen-uns-einen-bibliothekskatalog/content/scripte/count-tsv.sh)
|
||||||
|
|
||||||
|
**Ausführen:**
|
||||||
|
|
||||||
|
* Script mit ```curl``` auf den Server laden: ```curl -O https://felixlohmeier.gitbooks.io/seminar-wir-bauen-uns-einen-bibliothekskatalog/content/scripte/count-tsv.sh```
|
||||||
|
* Script ausführbar machen: ```chmod +x count-tsv.sh```
|
||||||
|
* Script starten mit ```./count-tsv.sh```
|
||||||
|
|
||||||
|
### Ergebnis
|
||||||
|
|
||||||
|
Folgende Spalten sind weniger als 10x belegt und könnten wohl gelöscht werden:
|
||||||
|
|
||||||
|
| Spalte | Anzahl belegter Felder |
|
||||||
|
|---|---|
|
||||||
|
| 082 : c | 2 |
|
||||||
|
| 100 : 6 | 2 |
|
||||||
|
| 100 : h | 2 |
|
||||||
|
| 535 : a | 2 |
|
||||||
|
| 551 : 5 | 2 |
|
||||||
|
| 583 : c | 2 |
|
||||||
|
| 600 : e | 2 |
|
||||||
|
| 600 : l | 2 |
|
||||||
|
| 600 : p | 2 |
|
||||||
|
| 610 : d | 2 |
|
||||||
|
| 610 : g | 2 |
|
||||||
|
| 610 : l | 2 |
|
||||||
|
| 630 : p | 2 |
|
||||||
|
| 650 : b | 2 |
|
||||||
|
| 650 : d | 2 |
|
||||||
|
| 651 : s | 2 |
|
||||||
|
| 653 : f | 2 |
|
||||||
|
| 653 : x | 2 |
|
||||||
|
| 700 : t | 2 |
|
||||||
|
| 700 : v | 2 |
|
||||||
|
| 700 : w | 2 |
|
||||||
|
| 751 : 9 | 2 |
|
||||||
|
| 502 : g | 3 |
|
||||||
|
| 511 : e | 3 |
|
||||||
|
| 611 : x | 3 |
|
||||||
|
| 630 : 2 | 3 |
|
||||||
|
| 630 : f | 3 |
|
||||||
|
| 630 : s | 3 |
|
||||||
|
| 100 : m | 4 |
|
||||||
|
| 100 : r | 4 |
|
||||||
|
| 550 : x | 4 |
|
||||||
|
| 630 : l | 4 |
|
||||||
|
| 653 : t | 4 |
|
||||||
|
| 700 : 5 | 4 |
|
||||||
|
| 776 : o | 4 |
|
||||||
|
| 611 : v | 5 |
|
||||||
|
| 653 : h | 5 |
|
||||||
|
| 710 : 9 | 5 |
|
||||||
|
| 711 : 0 | 5 |
|
||||||
|
| 711 : 2 | 5 |
|
||||||
|
| 100 : n | 6 |
|
||||||
|
| 510 : x | 7 |
|
||||||
|
| 600 : z | 7 |
|
||||||
|
| 100 : p | 8 |
|
||||||
|
| 551 : x | 8 |
|
||||||
|
| 653 : g | 8 |
|
||||||
|
| 655 : x | 8 |
|
||||||
|
| 700 : 6 | 8 |
|
||||||
|
| 610 : y | 9 |
|
||||||
|
|
||||||
|
### Transformation anwenden
|
||||||
|
|
||||||
|
Wenn Sie die geringfügig belegten Felder löschen wollen, dann wenden Sie die folgende Transformationsdatei an.
|
||||||
|
|
||||||
|
* Menü oben links "Undo / Redo" aufrufen und Button "Apply..." drücken.
|
||||||
|
* Den Inhalt aus der Datei [07_5-8_reduzieren.json](https://felixlohmeier.gitbooks.io/seminar-wir-bauen-uns-einen-bibliothekskatalog/content/openrefine/07_5-8_reduzieren.json) in die Zwischenablage kopieren und in das Textfeld von "Apply" einfügen und Button "Perform Operations" drücken.
|
|
@ -20,6 +20,8 @@ Hinweise:
|
||||||
|
|
||||||
* Wenn Sie nicht wissen, wo Sie beginnen sollen, dann versuchen Sie zunächst mit einem kleinen Satz von Feldern anzufangen. In Kapitel 4 haben Sie das Format Dublin Core als einen "kleinsten gemeinsamen Nenner" kennengelernt. Sie können damit beginnen diese Felder zu bilden. Die Library of Congress hat einen [Crosswalk von MARC21 zu Dublin Core](http://www.loc.gov/marc/marc2dc.html) bereitgestellt, den Sie zur Orientierung nutzen können.
|
* Wenn Sie nicht wissen, wo Sie beginnen sollen, dann versuchen Sie zunächst mit einem kleinen Satz von Feldern anzufangen. In Kapitel 4 haben Sie das Format Dublin Core als einen "kleinsten gemeinsamen Nenner" kennengelernt. Sie können damit beginnen diese Felder zu bilden. Die Library of Congress hat einen [Crosswalk von MARC21 zu Dublin Core](http://www.loc.gov/marc/marc2dc.html) bereitgestellt, den Sie zur Orientierung nutzen können.
|
||||||
|
|
||||||
|
<!---
|
||||||
|
|
||||||
## Lösung
|
## Lösung
|
||||||
|
|
||||||
Vorgehen für Felder, die im Crosswalk von MARC21 zu Dublin Core (unqualified) genannt sind:
|
Vorgehen für Felder, die im Crosswalk von MARC21 zu Dublin Core (unqualified) genannt sind:
|
||||||
|
@ -28,22 +30,26 @@ Vorgehen für Felder, die im Crosswalk von MARC21 zu Dublin Core (unqualified) g
|
||||||
|
|
||||||
**Als JSON-Datei: [07_6-2.json](https://felixlohmeier.gitbooks.io/seminar-wir-bauen-uns-einen-bibliothekskatalog/content/openrefine/07_6-2.json)**
|
**Als JSON-Datei: [07_6-2.json](https://felixlohmeier.gitbooks.io/seminar-wir-bauen-uns-einen-bibliothekskatalog/content/openrefine/07_6-2.json)**
|
||||||
|
|
||||||
## Aufgabe 3: Daten bereinigen
|
--->
|
||||||
|
|
||||||
??? Datumskonvertierung: value.toDate()
|
## Aufgabe 3: Daten bereinigen
|
||||||
??? Störende Zeichen
|
|
||||||
|
|
||||||
Hinweise:
|
Hinweise:
|
||||||
|
|
||||||
* Am schnellsten geht es über die Funktion zum Neusortieren der Spalten. Alternativ könnten Sie auch beim Export nur einzelne Spalten auswählen.
|
* Prüfen Sie, ob in den Feldern noch unerwünschte Zeichen vorkommen, die nicht im Suchindex landen sollen.
|
||||||
|
* Versuchen Sie außerdem Datumsangaben mit der Funktion ```toDate()``` in maschinenlesbare Datumsformate nach ISO-8601 zu wandeln.
|
||||||
* Der Suchindex erwartet eine eindeutige Identifikationsnummer in der ersten Spalte. Das Feld wird üblicherweise ```id``` benannt. Benennen Sie die Spalte mit dem MARC-Feld ```001``` in ```id``` um und verschieben Sie diese in die erste Spalte (falls Sie dort nicht ohnehin stehen sollte).
|
* Der Suchindex erwartet eine eindeutige Identifikationsnummer in der ersten Spalte. Das Feld wird üblicherweise ```id``` benannt. Benennen Sie die Spalte mit dem MARC-Feld ```001``` in ```id``` um und verschieben Sie diese in die erste Spalte (falls Sie dort nicht ohnehin stehen sollte).
|
||||||
|
|
||||||
|
<!---
|
||||||
|
|
||||||
## Lösung (für die Felder aus Lösung Aufgabe 2)
|
## Lösung (für die Felder aus Lösung Aufgabe 2)
|
||||||
|
|
||||||
...
|
...
|
||||||
|
|
||||||
** Als JSON-Datei (für die Felder aus Lösung Aufgabe 2): [07_6-3.json](https://felixlohmeier.gitbooks.io/seminar-wir-bauen-uns-einen-bibliothekskatalog/content/openrefine/07_6-3.json)****
|
** Als JSON-Datei (für die Felder aus Lösung Aufgabe 2): [07_6-3.json](https://felixlohmeier.gitbooks.io/seminar-wir-bauen-uns-einen-bibliothekskatalog/content/openrefine/07_6-3.json)****
|
||||||
|
|
||||||
|
--->
|
||||||
|
|
||||||
## Literatur
|
## Literatur
|
||||||
|
|
||||||
* Owen Stephens: [A worked example of fixing problem MARC data: Part 4 – OpenRefine](http://www.meanboyfriend.com/overdue_ideas/2015/07/worked-example-fixing-marc-data-4/)
|
* Owen Stephens: [A worked example of fixing problem MARC data: Part 4 – OpenRefine](http://www.meanboyfriend.com/overdue_ideas/2015/07/worked-example-fixing-marc-data-4/)
|
||||||
|
|
|
@ -0,0 +1,224 @@
|
||||||
|
[ { "op": "core/column-reorder", "description": "Reorder columns", "columnNames": [
|
||||||
|
"001",
|
||||||
|
"020 : a",
|
||||||
|
"022 : a",
|
||||||
|
"024 : a",
|
||||||
|
"041 : a",
|
||||||
|
"041 : b",
|
||||||
|
"041 : h",
|
||||||
|
"050 : a",
|
||||||
|
"060 : a",
|
||||||
|
"082 : a",
|
||||||
|
"100 : 0",
|
||||||
|
"100 : 4",
|
||||||
|
"100 : 9",
|
||||||
|
"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 : f",
|
||||||
|
"110 : g",
|
||||||
|
"110 : n",
|
||||||
|
"110 : p",
|
||||||
|
"110 : t",
|
||||||
|
"110 : x",
|
||||||
|
"111 : 9",
|
||||||
|
"111 : a",
|
||||||
|
"111 : c",
|
||||||
|
"111 : d",
|
||||||
|
"111 : e",
|
||||||
|
"111 : n",
|
||||||
|
"245 : 6",
|
||||||
|
"245 : a",
|
||||||
|
"245 : b",
|
||||||
|
"245 : c",
|
||||||
|
"245 : h",
|
||||||
|
"245 : n",
|
||||||
|
"245 : p",
|
||||||
|
"246 : a",
|
||||||
|
"246 : b",
|
||||||
|
"246 : g",
|
||||||
|
"246 : i",
|
||||||
|
"260 : a",
|
||||||
|
"260 : b",
|
||||||
|
"260 : c",
|
||||||
|
"500 : 0",
|
||||||
|
"500 : 9",
|
||||||
|
"500 : a",
|
||||||
|
"500 : b",
|
||||||
|
"500 : c",
|
||||||
|
"500 : e",
|
||||||
|
"500 : i",
|
||||||
|
"500 : w",
|
||||||
|
"500 : z",
|
||||||
|
"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 : n",
|
||||||
|
"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 : a",
|
||||||
|
"530 : f",
|
||||||
|
"530 : i",
|
||||||
|
"530 : p",
|
||||||
|
"530 : w",
|
||||||
|
"533 : 7",
|
||||||
|
"533 : a",
|
||||||
|
"533 : b",
|
||||||
|
"533 : c",
|
||||||
|
"533 : d",
|
||||||
|
"533 : e",
|
||||||
|
"533 : f",
|
||||||
|
"533 : n",
|
||||||
|
"534 : a",
|
||||||
|
"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 : 8",
|
||||||
|
"600 : a",
|
||||||
|
"600 : b",
|
||||||
|
"600 : c",
|
||||||
|
"600 : d",
|
||||||
|
"600 : q",
|
||||||
|
"600 : t",
|
||||||
|
"600 : v",
|
||||||
|
"600 : x",
|
||||||
|
"610 : 0",
|
||||||
|
"610 : 2",
|
||||||
|
"610 : 8",
|
||||||
|
"610 : 9",
|
||||||
|
"610 : a",
|
||||||
|
"610 : b",
|
||||||
|
"610 : t",
|
||||||
|
"610 : v",
|
||||||
|
"610 : x",
|
||||||
|
"610 : z",
|
||||||
|
"611 : 0",
|
||||||
|
"611 : 2",
|
||||||
|
"611 : a",
|
||||||
|
"611 : c",
|
||||||
|
"611 : d",
|
||||||
|
"611 : n",
|
||||||
|
"611 : x",
|
||||||
|
"630 : a",
|
||||||
|
"630 : d",
|
||||||
|
"630 : k",
|
||||||
|
"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",
|
||||||
|
"653 : S",
|
||||||
|
"655 : 0",
|
||||||
|
"655 : 2",
|
||||||
|
"655 : a",
|
||||||
|
"700 : 0",
|
||||||
|
"700 : 2",
|
||||||
|
"700 : 4",
|
||||||
|
"700 : 9",
|
||||||
|
"700 : a",
|
||||||
|
"700 : b",
|
||||||
|
"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"
|
||||||
|
] } ]
|
|
@ -0,0 +1,31 @@
|
||||||
|
#!/bin/bash
|
||||||
|
# Script zur Zählung von belegten Werten in TSV-Dateien
|
||||||
|
# Stand: 20.11.2016
|
||||||
|
# Nutzung: ./count.sh file.tsv
|
||||||
|
|
||||||
|
# Abfrage der Dateinamen
|
||||||
|
if [ -z "$1" ]
|
||||||
|
then
|
||||||
|
echo "Bitte Dateinamen angeben!"
|
||||||
|
echo "Beispiel: ./count.sh file.tsv"
|
||||||
|
exit
|
||||||
|
else
|
||||||
|
echo "Folgende Dateien werden untersucht:"
|
||||||
|
files=($*)
|
||||||
|
echo ${files[@]}
|
||||||
|
echo ""
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Schleife für mehrere Dateien
|
||||||
|
for file in "${files[@]}"; do
|
||||||
|
|
||||||
|
# Spaltennamen erfassen
|
||||||
|
readarray columns < <(head -q -n1 haw_000001_450200_minimal.tsv | tr '\t' '\n' | cat)
|
||||||
|
|
||||||
|
# Belegte Zellen in Spalten zählen und ausgeben
|
||||||
|
number=1
|
||||||
|
for column in "${columns[@]}"; do
|
||||||
|
echo -e ${column} "\t\t" $(cut -d$'\t' -f ${number} ${file} | grep -v '^$' | wc -l)
|
||||||
|
number=$(($number+1))
|
||||||
|
done
|
||||||
|
done
|
Loading…
Reference in New Issue