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:


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



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

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

organise ODER organiser ODER organized



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?


Dsselbe mit der Einschänkung, dass es am Ende stehen muss 

Welche regulären Ausdrücke passen auf diese Zeichenketten?

^French|^France
^(French|France)

\b[Cc]olou?r\b|\bCOLOU?R\b
\b[Cc][Oo][Ll][Oo][Uu]?[Rr]\b


head\s?rest +1+1
head ?rest

0+[A-Za-z]{4}\b +1
[0-9]{4}
\d{4}

[0-3][0-9]-[0-1][0-9]-[0-9]{4}

\d{2}-\d{2}-\d{4}

\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]
.* ?: .*, \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




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
__
____

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



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


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


Modul 3 - Layout von OpenRefine



Modul 4 - Facettieren und Filtern




Modul 5 - Clustering



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