Welcome to The Carpentries Etherpad!
This pad is synchronized as you type, so that everyone viewing this page sees the same text. This allows you to collaborate seamlessly on documents.
Use of this service is restricted to members of The Carpentries community; this is not for general purpose use (for that, try https://etherpad.wikimedia.org).
Users are expected to follow our code of conduct: https://docs.carpentries.org/topic_folders/policies/code-of-conduct.html
All content is publicly available under the Creative Commons Attribution License: https://creativecommons.org/licenses/by/4.0/
Workshop Library Carpentry - Tag 1
Teilnehmende:
- Florian Wörister (Universität Wien) 💻
- Doron Goldfarb (TU Wien Bibliothek) 😍
- Sabine (UB Graz) 🍕
- Bernhard Schubert (Universitätsbibliothek Wien) 👀
- Tom (UB TU Graz)🎶
- Tanja (TU Wien Bibliothek) ╰(*°▽°*)╯ ᓚᘏᗢ😆
- Michaela (TU Wien Bibliothek)☕
- Alicia (TU Wien Bibliothek) 🌞
- Isabella Seidl (TU Wien Bibliothek) 🐧
- Dani (TU Wien Bibliothek) 😱
- Saskia 🌻
- Julia (WU Wien) 🐶
- Jonas (FH St.Pölten)🐱🐉
Regular Expressions
Ausführliche Referenz
Schnellüberblick: https://www.regular-expressions.info/refquick.html
Ausführlich: https://www.regular-expressions.info/refflavors.html
Notes für LC Github: Manche Metazeichen zb /S tauchen in Bsp auf ohne erklärt worden zu sein, zuätzliche MZ wie gruppieren "( )" und ausschluss "[^]" wären auch hilfreich
Allgemeine Metazeichen für reguläre Ausdrücke
- "[ ]" Eckige Klammern definieren eine Liste bzw. Bereich von zu findenden Zeichen
- "[ABC]" findet A, B oder C
- "[A-Z]" findet jeden Großbuchstaben (Exkl. lokale Zeichen)
- "[A-Za-z]" findet jeden Groß- und Kleinbuchstaben (Exkl. lokale Zeichen)
- "[A-Za-z0-9]" findet jede Ziffer, Groß- und Kleinbuchstaben (Exkl. lokale Zeichen)
"." Findet jedes Zeichen
"\d" Findet jede Ziffer
"\w" Findet jedes Zeichen, das Teil eines Wortes sein kann (Inkl. lokale Zeichen)
"\s" Findet jedes Leer-, Tabulator- oder Zeilensprungzeichen
"\" Wird allgemein als "escape" Symbol genutzt, um Zeichen mit Metazeichen-Funktionalität
- als ganz normale Zeichen zu finden.
- Zum Beispiel der Punkt "\." : Der reguläre Ausdruck "\.com" findet .com aber nicht Icom, während der Ausdruck ".com" beides findet.
- "^" Metazeichen, das den Beginn einer Zeile repräsentiert
- Der reguläre Ausdruck "^Haus" findet die Zeichenkette Haus nur dann, wenn sie am Zeilenbeginn steht
- "$" Metazeichen, das das Ende einer Zeile repräsentiert
- Der reguläre Ausdruck "Haus$" findet die Zeichenkette Haus nur dann, wenn sie am Zeilenende steht
- "\b" Metazeichen, das eine Wortgrenze repräsentiert
- Beispiel: "mark" findet nicht nur mark, sondern auch marked, market, remark, unremarkable, etc.
- Regex "\bmark" findet mark und market aber weder remark noch unremarkable
- Regex "mark\b" findet mark und remark aber weder marked, market noch unremarkable
- Regex "\bmark\b" findet nur mark als frei stehendes Wort und keine andere Variante
Demonstration: Welche Zeichenketten werden durch den regulären Ausdruck "^[Oo]rgani.e\b" gefunden?
Online Umgebung für Experimente mit regulären Ausdrücken: https://regex101.com/
Weitere wichtige Metazeichen
- "*" das vorhergehende Zeichen kommt entweder gar nicht oder beliebig oft vor.
- Beispiel: "ab*c" findet ac, abc, abbbc ...
- "+" das vorhergehende Zeichen kommt mindestens einmal vor.
- Beispiel: "ab+c" findet abc und abbbc aber nicht ac
- "?" das vorhergehende Zeichen kommt entweder gar nicht oder einmal vor
- Beispiel: "ab?c" findet ac und abc aber nicht abbbc
- "{}" Innerhalb von geschwungenen Klammern nach einem Zeichen kann direkt angegeben werden, wie oft dieses Zeichen vorkommen kann. Bereiche werden durch zwei durch ein Komma getrennte Zahlen angegeben.
- Beispiel: "ab{3}c" findet abbbc aber nicht ac oder abc
- Beispiel: "ab{2,4}c" findet abbc, abbbc und abbbbc aber nicht ac, abc oder abbbbbc
- "|" Das "Pipe" Zeichen steht zwischen zwei Alternativen
- Beispiel: "ab|cd" findet ab oder cd aber nicht ad
- "( )" Runde Klammern für Gruppierung, zB Festlegung, welcher Teil einer Regex aus Alternativen besteht.
- Beispiel: "[0-9]+ Stück (Birnen|Äpfel)" -> Mit Klammern wird hier alternativ "[0-9]+ Stück Birnen" oder "[0-9]+ Stück Äpfel" gefunden. Ohne die Klammern wäre alles, was links des "|" Symboles steht eine, alles was rechts davon steht die andere Alternative
Aufgabe 1 - Gemeinsam
Auf welche Zeichenketten passen diese regulären Ausdrücke?
jeweils am zeilenbeginn
Organize
organize
Organise
organise
organi!e
organite
Trifft wirklich nur die britische und amerikanische Schreibweise:
[Oo]rgani[sz]e
Organize!!!!! - nur der fett formatierte Teil wird erkannt
organiser
organised
Organizer1
reorganizer - nur der fett formatierte Teil wird erkannt
reorganised
"Organised " - Leerzeichen ist _nicht_ Teil der Zeichenkette, sondern die Voraussetzung für das Matching
organized. - Punkt erfüllt die Bedingung \b
Organise - als gesamte Zeile
Organise! - wird nicht getroffen
Organised
organised
organi2e
"organizers"
.organisers. - Punkte werden nicht gematcht
- \b[Oo]rgani.e\b|\b[Oo]rgani.e\w{1}\b
organise ODER organiser ODER organized
- \b[Oo]rgani.e\b|\b[Oo]rgani.e\w{1}\b|\bOrganisiere\b
apfel|birne|mango
apfel, birne, banane, mango
Ich esse gerne (apfel|birne|mango)
ich esse gerne apfel ODER ich esse gerne birne
Aufgabe 2 - In Gruppen zu 2-3 Personen
Auf welche Zeichenketten passen diese regulären Ausdrücke?
- Fr[ea]nc[eh]
- French
- France
- Franch
- Frence
Dsselbe mit der Einschänkung, dass es am Ende stehen muss
Welche regulären Ausdrücke passen auf diese Zeichenketten?
- French oder France am Zeilenbeginn
^French|^France
^(French|France)
- +colour oder color als ganze Worte beliebig in Groß- und Kleinschreibung
\b[Cc]olou?r\b|\bCOLOU?R\b
\b[Cc][Oo][Ll][Oo][Uu]?[Rr]\b
- headrest oder head rest (mit einem Leerzeichen zwischen den Worten) aber nicht head rest (mit zwei Leerzeichen zwischen den Worten)
head\s?rest +1+1
head ?rest
- Eine Zeichenkette, die mit vier Buchstaben endet, denen mindestens einmal die Ziffer 0 unmittelbar vorangestellt ist.
0+[A-Za-z]{4}\b +1
- Vier unmittelbar aufeinander folgende Ziffern
[0-9]{4}
\d{4}
- Ein Datum im Format dd-MM-yyyy?
[0-3][0-9]-[0-1][0-9]-[0-9]{4}
\d{2}-\d{2}-\d{4}
- Entweder ein Datum im Format dd-MM-yyyy oder dd-MM-yy, jeweils am Zeilenende
\b\d{2}-\d{2}-\d{2,4}$
\b\d{2}-\d{2}-(\d{2}|\d{4})$
\d{2}-\d{2}-(\d{2}|\d{4})$
\W\d{2}-\d{2}-(\d{2}|\d{4})$ -- \W alles ausser [A-Za-z0-9]
- Publikationsangaben der Form "<Verlag> : <Ort>, YYYY", zB British Library : London, 2015
.* ?: .*, \d{4}
[a-zA-Z]+ ?: ?[a-zA-Z]+\d{4}
Finden und Extrahieren von Zeichenketten
Online Umgebung für Experimente mit regulären Ausdrücken: https://regex101.com/
Arbeitstext: Carpentries Code of Conduct
Beispiel 1 - Gemeinsam
- Ausdruck "community" - als Test
- Ausdruck "community " - Warum nur drei Treffer?
- Finden der Zeichenkette "community-led" - Wie sollte der Ausdruck "community" erweitert werden?
- Ausdruck "communi" - 15 Treffer in verschiedenen Worten, warum?
- Ausdruck "[Cc]ommuni" - 16 Treffer, warum?
- Ausdruck "^[Cc]ommuni" - Kein Treffer, warum?
- Finden aller Worte, die mit Comm oder comm beginnen und im plural sind (English!)
Beispiel 2 - In Gruppen
Extrahieren von Email-Adressen und Telefonnummern aus dem Arbeitstext Carpentries Code of Conduct
Step-by-Step Guide mit Musterlösungen: https://librarycarpentry.org/lc-data-intro/02-match-extract-strings/index.html
Beispiel 3 - In Gruppen
Finden aller DOI-Angaben in einem Textdokument
Übungstext: https://www.doi.org/demos.html (Copy-Paste aus dem Browser ab "DOI® System Examples" bis vor "Updated January 29, 2018"
\d+\.\d+\/.+\b 14 matches oder \d+\.\w+\/.+\b 14 matches oder \d+\..+\/.+\b 14 matches
10\.\d{4,5}\/.+\b 14
10\.\d+\/.+\b (14)
doi:10.\d{4}.+ (13)
10.\d{4,5}\/ 14 matches
\d{2}\.\d{4,5}\/ 15
\d{2}\.\d{4,5}\/ --> 14 matches
doi Spezifikation: https://www.doi.org/doi_handbook
doi: ?10\.\w+(.[\w]+)*\/\S+ - Achtung zB bei Klammern um den DOI, würden hier auch als Teil des DOI interpretiert werden
Exkurs: "Greedy" vs. "Lazy"
Diese Unterscheidung bezieht sich auf das Verhalten von Quantifikatoren, insbesondere * und +. Diese sind normaler Weise "greedy", in dem Sinne, dass sie die größtmögliche Zeichenkette "matchen". Ein Beispiel:
Beispieltext: 'Beispiele für Regular Expressions sind "[a-z]+" und "\d*".'
Der reguläre Ausdruck ".*" (Die doppelten Anführungszeichen sind hier Teil des Musters!) würde greedy den Textteil "[a-z]+" und "\d*" finden, während die lazy Variante ".*?" je den Textteil "[a-z]+" und "\d*" findet
Unix Shell
Links
Cheat Sheet: https://librarycarpentry.org/lc-shell/reference.html
Shell-Script: https://raw.githubusercontent.com/LibraryCarpentry/lc-shell/gh-pages/files/my_first_bash_script.sh
Hilfeseiten: http://man.he.net
Modul 02 - Navigation im Dateisystem
Aufgabe 1
Versuchen Sie sich selbst mit den kennengelernten Befehlen (cd, pwd, ls) durch Ihr Dateisystem zu bewegen. Sie können von der Shell aus auch einen grafischen File-Browser öffnen. Die entsprechenden Befehle lauten:
Windows:
explorer .
MacOS:
open .
Exkurs: Mit "alias" können Standard-Befehle um bestimmte Optionen erweitert werden, zB kann "ls" so modifiziert werden, dass bei Aufruf von "ls" im Hintegrund immer "ls -l" aufgerufen wird. Ein Aufruf von alias listet alle aktiven Erweiterungen.
Aufgabe 2
Versuchen Sie herauszufinden, wie Sie mit dem ls Befehl die aufgelisteten Dateien und Ordner nach Dateigröße sortieren.
Hinweis: Der 'man' Befehl (zB man ls) öffnet die Dokumentationsseite zum entsprechenden Befehl. Diese Seiten sind aber nur unter Linux und MacOS Systemen verfügbar. Windows Benutzer können diese Dokumentationsseiten unter http://man.he.net abrufen.
Modul 03 - Arbeiten mit Dateien
Frage: Für die Bearbeitung welcher Dateiinhalte eignen sich Shell Werkzeuge besonders?
Die Shell Werkzeuge eignen sich insbesondere für textbasierte Formate, das sind Formate, in denen der Inhalt so codiert ist, dass er unmittelbar für Menschen lesbar ist. Darunter fallen
Tabellenformate wie csv, tsv, etc,
Textformate wie txt, eingeschränkt rtf,
Markup-Formate wie HTML oder XML
Daten-Formate wie JSON
Frage: Kann man eine Kopie auch gleich in einem anderen Verzeichnis anlegen?
Ja, in dem man als Ziel des cp Befehles einen Pfad+Dateiname angibt, zB
cp gulliver.txt firstdir/gulliver_backup.txt
Aufgabe 3
Anstatt Dateien zu Verschieben, kann man diese auch kopieren. Der entsprechende Befehl heißt cp. Versuchen Sie eine Kopie der Datei "gulliver.txt" zu machen, die den Namen "gulliver-backup.txt" trägt.
Aufgabe 4
Das Umbenennen von Ordnern funktioniert ähnlich wie das Umbenennen von Dateien. Versuchen Sie den Ordner "firstdir" in "backup" mit dem mv Befehl umzubenennen.
Aufgabe 5
Ist das letzte Argument eines mv Befehls ein Ordner, wird die entsprechende Datei in den angegebenen Ordner mit gleichbleibendem Dateinamen verschoben. Versuchen Sie die Datei "gulliver-backup.txt" in den Ordner "backup" zu verschieben.
Aufgabe 6
Das Wildcard Symbol ? entspricht einem beliebigen Symbol und das Wildcard Symbol * entspricht einer beliebigen Anzahl an beliebigen Symbolen. Können Sie sich noch erinnern, wie man diese Wildcard Symbole als regulären Ausdruck definieren kann?
*.txt wäre in regular Expressions übersetzt .*\.txt
Aufgabe 7
In der Shell Umgebung gibt es auch einen Befehl, mit dem man Text am Bildschirm ausgeben kann. Es handelt sich um den echo Befehl, welcher als Argument den auszugebenden Text erwartet.
echo "Herzlich Willkommen zum Library Carpentry Workshop!"
Ein der Unix Shell kann man auch Variablen definieren. Variablen sind Platzhalter, die über einen eindeutigen Namen angesprochen werden. Eine Variable kann im laufe der Zeit unterschiedlichste Werte annehmen (zB kann der Variable NAME zuerst die Zeichenkette "Florian" und anschließend die Zeichenkette "Doron" zugewiesen werden. Um einer Variable einen Wert zuzuweisen, ist folgender Befehl notwendig:
NAME = "Florian"
JAHR = 2022
Um den entsprechenden Wert einer Variable abzurufen, muss dem Variablennamen ein $-Zeichen vorangestellt werden. Im folgenden Beispiel wird die Variable Name verwendet:
echo "Hallo mein Name ist $NAME"
Man kann auch mit dem $( ... ) Operator das Ergebnis eines Befehls in eine Variable speichern.
DATUM_HEUTE = $(date)
Diskutieren Sie, warum der echo Befehl in Shell Umgebungen so wichtig ist?
Frage: Kann man beliebig viele Variablen definieren?
Antwort: Ja, man kann zB Variablennamen mit fortlaufender Nummer versehen
Frage: Kann man Variablennamen mit "Tab" expandieren
Antwort: In der Standard Shell können nur Dateinamen mit "Tab" expandiert werden
Modul 04 - Schleifen
Aufgabe 8
Ziel dieser Aufgabe ist es, eine Schleife zu implementieren, welche die erste und letzte Zeile jeder txt-Datei im aktuellen Verzeichnis am Bildschirm ausgibt. Vervollständigen Sie folgenden Code Ausschnitt
___ file in *.txt
__
- echo "_file"
- head -n 1 _____
- ___ __ _ _____
____
Modul 05 - Counting und Mining
Issues für LC Github:
sort -n auch wenn -n flag nicht unmittelbar notwendig
tsv ist ein Dateiformat, das tabellarische Daten abbildet, ähnlich der Struktur einer Excel Datei aber für Menschen lesbar. Daten sind in Zeilen organisiert, jede Zeile entspricht einem Datensatz. Die einzelnen Elemente des Datensatzes, i.e. die einzelnen Spalten der Tabelle, sind durch <tab> Steuerzeichen getrennt, sodass diese einzelnen Spalten für die Maschine identifizierbar sind.
Beispiel:
Autor<tab>Titel<tab>Jahr
Max Mustermann<tab>Shell Handbuch<tab>2020
...
Frage: Kann ein laufendes Kommando, zB cat, unterbrochen werden?
Antwort: Ja, durch die Tastenkombination "strg-c" oder "ctrl-c" kann dem laufenden Befehl das Signal gesendet werden, abzubrechen.
Aufgabe 9
Was passiert, wenn man folgenden Befehl in einen cat Befehl piped?
wc -l *.tsv | sort -n | head -n 1
Aufgabe 10
Ermitteln Sie die Datei, welche die meisten Wörter enthält. Verwenden Sie dabei das Pipe-Konzept.
Wir müssen den sort Befehl modifizieren, so dass er absteigend sortiert
man sort liefert die option -r
Zumindest in Git bash kann man Befehlen wie head auch negative Zeilennummern übergeben, head -n -1 bedeutet hier zB "alle Zeilen bis auf die letzte Zeile" ausgeben
wc -w *.tsv | head -n -1 | sort -rn | head -n 1
-> Note - In LC lesson korrigieren
Aufgabe 11
Ermitteln Sie die Anzahl an Dateien und Verzeichnise im aktuellen Arbeitsverzeichnis. Verwenden Sie dabei die Befehle ls und wc.
Aufgabe 12
Schreiben Sie das momentane Datum in die Datei "logfile.txt". (Hinweis: Verwenden Sie dabei den > Operator) Vergewissern Sie sich, dass der Befehl auch funktioniert hat, indem Sie den Inhalt der Datei am Bildschirm ausgeben.
Wenn Sie anstelle des > den >> Operator verwenden, wird die Ausgabe des Befehls an die Datei angehängt. Versuchen Sie, das aktuelle Datum an die Datei "logfile.txt" anzuhängen. Vergewissern Sie sich, dass der Befehl funktioniert hat, indem Sie den Inhalt der Datei am Bildschirm ausgeben.
Frage: Warum stehen beim grep Befehl die regulären Ausdrücke in einfachen oder doppelten Anführungszeichen?
Antwort: Manche Regexp Zeichen und auch Leerzeichen würden in der Shell sonst anders bzw. falsch bzw. in einem anderen Kontext interpretiert werden
Aufgabe 13
Suchen Sie nach einem beliebigen Begriff (casesensitive) in allen .tsv Dateien im "shell-lesson" Verzeichnis.
Aufgabe 14
Suchen Sie nach einem beliebigen Begriff (casesensitive) in den "Africa" und "America" .tsv Dateien.
Aufgabe 15
Zählen Sie die Anzahl an Vorkommnissen eines beliebigen Begriffes in den "Africa" und "America" .tsv Dateien. (Hinweis: sehen Sie sich dazu den Schalter -c näher an)
Aufgabe 16
Zählen Sie alle Vorkommnisse eines beliebigen Begriffs in den "Africa" und "America" .tsv Dateien. Im unterschied zur vorigen Aufgabe soll nun die Groß- und Kleinschreibung nicht berücksichtigt werden. (Hinweis: Sehen Sie sich dazu den -i Schalter näher an)
Aufgabe 17
Führen Sie die gleiche Abfrage wie in Aufgabe 16 durch. Leiten Sie das Ergebnis in die Datei "results/hero-i.tsv" um.
Aufgabe 18
Suchen Sie alle ISSN Nummern (zwei vierstellige Zahlen, die mit einem - verbunden sind) in der Datei "2014-01_JA.tsv" und speichern Sie das Ergebnis in die Datei "results/issns.tsv".
Hinweis: um komplexere reguläre Ausdrücke mit grep verwenden zu können, benötigen Sie den Schalter -P (Windows) oder -E (MacOS, Linux)
Hinweis: sehen Sie sich für diese Aufgabe den Schalter -o etwas näher an.
git bash: grep -Po '\d{4}-\d{4}' 2014-01_JA.tsv | sort | uniq -c | sort -n
mac: grep -Eo '\d{4}-\d{4}' 2014-01_JA.tsv | sort | uniq -c | sort -n
Aufgabe 19
Der Befehl "uniq" filtert Zeilenduplikate, wenn sich diese direkt hintereinander befinden. Verwenden Sie den Pipe-Mechanismus um die Anzahl aller ISSN-Nummern (ohne duplikate) der Datei "2014-01_JA.tsv" am Bildschirm auszugeben.
Aufgabe 20
Betrachten Sie folgendes Beispiel:
$ for name in "Jo" "Meg" "Beth" "Amy"
> do
> echo "$name"
> grep -wo "$name" littlewomen.txt | wc -l
> done
a) Warum benötigen wir die Anführungszeichen beim Befehl echo "$name"?
b) Was würde passieren, wenn wir in Zeile 1 den Namen "Louisa May Alcott" hinzufügen und auf die Anführungszeichen beim echo und grep Befehl verzichten?
Aufgabe 21
Verwenden Sie den cut Befehl um die Spalten "Issue", "Volume", "Language" und "Publisher" aus der Datei "2014-01_JA_ivlp.tsv zu filtern. Speichern Sie das Resultat in eine neue Datei.
Feedback - Tag 1
- Nützlich für das Administrieren von Servern
- Konzepte auch einsetzbar für andere Sprachumgebungen, zB R
- Regular Epressions äußerst nützlich bei Eigentwicklungen von Tools / Scripts in z.B. Python
Fragen zu Tag 1
Q: Wie kann man den letzten Befehl wiederholen?
A: Entweder mit der Pfeil-nach-oben-Taste auswählen oder durch das Kommando "!!"
Q: uniq -c Befehl genauer erklären
A: uniq ist ein Befehl, der Duplikate entfernt (Wenn eine sortierte Liste eingegeben wird). uniq -c zählt für jeden deduplizierten Wert aus der Liste die Anzahl seiner jeweiligen Vorkommnisse und schreibt sie neben den Wert in die Ausgabe.
Workshop Library Carpentry - Tag 2
Unix Shell
Modul 04 - Schleifen
Note für LC Github: File permissions für scripts erklären
Q: Kann man die Liste der Werte für eine for Schleife auch explizit angeben?
A: Ja, in der Form
- for XYZ in "a.txt" "b.txt" "c.txt" "d.txt"
Q: Kann man sich vorstellen, dass der Input für die Schleife - die Information, "worüber" iteriert wird - immer eine Liste ist?
A: Ja, in welcher Form auch immer erzeugt, handelt es sich immer um eine Liste
Q: Gibt es weitergehende Möglichkeiten, die Liste der zu iterierenden Werte zu definieren
A: Ja, viele, zB über Kommando-Substitution:
- for FILE in $(ls -S | head -n5)
- > do
- > echo $FILE
- > done
- Dieses Beispiel gibt iterativ die Dateinamen der fünf größten Dateien im Verzeichnis aus
Exkurs: Probleme mit Leerzeichen in Dateinamen:
zB das Kopieren von Dateien, deren Namen Leerzeichen enthalten, kann zu Problemen führen:
Für das Beispiel cp $FILE b_$FILE :
Dateiname "my file.txt" würde bewirken, dass der cp Befehl dann so aussieht: cp my file.txt b_my file.txt
Q: Welcher Bereich wird von der Raute # als Kommentar vorgesehen
A: Ab der Raute bis zum Zeilenende gilt jeglicher Text als Kommentar
Exkurs: Für Script-Dateien müssen normaler Weise die Dateiberechtigungen geändert werden, damit man sie ausführen kann. Dies geschieht mit dem Befehl chmod (Change mode), zB chmod +x my_first_script.sh
Exkurs: Scripte dienen insbesondere auch der Automation, in dem sie zB zu regelmäßigen Zeitpunkten automatisch vom System ausgeführt werden. (Was braucht es dafür?)
Eine Möglichkeit, in Unix -artigen Betriebssystemen wiederkehrende Aufgaben zu definieren, ist ein Cron-Job https://wiki.ubuntuusers.de/Cron/
Q: Verändert der Befehl sed die bearbeitete Datei?
A: Grundsätzlich nicht, die transformierte Information wird über die Konsole ausgegeben und kann dann via Pipe ( | ) weiterverarbeitet oder via Redirect ( > ) in einer Datei gespeichert werden.
sed kann aber mit einem Flag aufgerufen werden, sed -i <BEFEHL> <Dateiname> würde die Datei direkt verändern, dies ist nicht reversibel.
Modul 06 - Working with free text
issues für LC Github Repo
\r \n Nutzung unklar und inkonsistent ohne Erklärung - check
File Indirection evtl gegen cat <File> | usw austauschen
Open Refine
Modul 1 - Einführung
OpenRefine Wiki https://github.com/OpenRefine/OpenRefine/wiki
Modul 2 - Importieren von daten in OpenRefine
- Importieren der Datei doaj-article-sample.csv
- Q: Spielt das Format fürs Importieren eine Rolle?
- A: Im Grunde nicht, es kann in OpenRefine das entsprechende Format konfiguriert werden
Modul 3 - Layout von OpenRefine
- Aufgabe 1 - Die Werte der "Subjects" Spalte in separate Zellen spalten
- Welcher Separator wird in den Subject Zellen verwendet?
- Wie spaltet ihr die Werte aus der Spalte in individuelle Zellen?
- Aufgabe 2 - Die geteilten Subject Zellen wieder zusammenfügen
Modul 4 - Facettieren und Filtern
- Aufgabe 1 - Welche Lizenzen wurden für die Artikel aus der Übungsdatei vergeben? CC BY, CC BY-NC, CC BY-NC-ND
- Welches ist die meistgenutzte Lizenz in der Datei? cc by 954
- Wie viele Artikel in der Datei haben keine Lizenzangabe? 6
- Aufgabe 2 - Finde alle Publikationen ohne DOI
- Verwende die "Facet by blank" Funktion um alle Publikationen ohne DOI zu finden
- Aufgabe 3 - Korrigiere die Sprachangaben über eine Facette
- Erstelle eine Text Facette für die language Spalte und korrigiere die Variationen der EN und English Werte
Modul 5 - Clustering
- Aufgabe 1 - Nutze Clustering um die Autoren-Informationen zu bereinigen
- 1. Teile die Autoren Felder in individuelle Zellen mit Hilfe der Funktion "Edit cells -> Split multi-valued cells" bei Verwendung des pipe ( | ) Zeichens als Separator
- 2. Wähle in der Autoren Spalte "Edit cells -> Cluster and edit"
- 3. Nutze die "key collision" Methode mit der fingerprint Keying Function, gehe durch die identifizierten Cluster von Werten und füge sie, wo angebracht, in einzelne Werte zusammen
- 4. Experimentiere mit verschiedenen Clustering Methoden - Welche funktionieren gut?
Hinweis: Bei Unklarheiten kann man sich einen Cluster näher ansehen, indem man auf den Link "Browse this cluster" klickt. In dieser Ansicht sieht man auch die Mitautoren zu den jeweiligen Publikationen. Das hilft dabei abzuschätzen, ob die Autoren wirklich zu dem jeweiligen Cluster gehören.
Modul 6 - Arbeiten mit Spalten und Sortieren
Eine verschachtelte Sortierung erzeugt man, indem nacheinander Sortierungen auf den entsprechenden Spalten definiert. Die Sortierungen erscheinen dann im "sort"-Menü
Die Sortierung verändert die tatsächliche Sortierung der Daten erst, wenn man im "sort"-Menü den Eintrag "Reorder Rows permanently" auswählt.
Der Arbeitsfortschritt wird laufend automatisch zwischengespeichert.
Modul 7 - Einführung in Transformationen
https://docs.openrefine.org/manual/grelfunctions#basic-string-modification
Modul 8 - Schreiben von Transformationen
Modul 9 - Transformationen - Undo und Redo
Modul 10 - Transformation von Strings, Nummern, Daten und Booleans
https://docs.openrefine.org/manual/grelfunctions#date-functions
Modul 11 - Umgang mit Arrays
value.split(",").reverse().join(" ").trim()
Modul 12 - Look-Up von externen Daten
Verwenden von OpenRefine für das Erstellen von Wikidata Einträgen
Open Refine und Wikidata - Youtube Video : https://www.youtube.com/watch?v=wfS1qTKFQoI&feature=youtu.be
Durch öffnen einer API-URL, zB https://api.crossref.org/journals/1099-4300, in einem Browser wird, je nach Ausstattung des Browsers, eine komfortable Sicht auf die zurückgegebene Datenstruktur ermöglicht.
Allgemeine Fragen:
Q: Kann man Felder, die falsch befüllt wurden von einer Spalte in eine andere überführen?
A: Es besteht die Möglichkeit, Spalten zusammenzuführen. Angenommen mat hat einen Datensatz in dem zwei verschiedene Spalten für die gleiche Information genutzt werden, ein Teil der Zeilen diese Information in der einen, der andere Teil der Zeilen sie in der anderen Spalte hat. Unter der Annahme, dass die in den Zeilen jeweils ungenutzte Spalte dann immer leer ist, kann man die beiden Spalten zusammenfügen. Das geht über "Edit columns -> Join columns ..."
Mehr Informationen dazu : https://guides.library.illinois.edu/openrefine/combining
Q: Kann man OpenRefine als Server betreiben (also nicht lokal)?
A: Ja, es gibt zum Beispiel Docker Images von OpenRefine, die dazu verwendet werden können, um OpenRefine auf einem Server zu betreiben
Feedback - Tag 2
- Themenvorschlag für zukünftige Workshops --> MarcEdit