Kapitel 7.5 und 7.6 überarbeitet und neues Script count-tsv.sh ergänzt

This commit is contained in:
Felix Lohmeier 2016-11-21 00:27:04 +01:00
parent 1817e196a8
commit 2a57f2b82e
4 changed files with 379 additions and 6 deletions

View File

@ -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.

View File

@ -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/)

View File

@ -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"
] } ]

31
scripte/count-tsv.sh Executable file
View File

@ -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