--- tags: Library carpentry --- # Library Carpentry, VDB LV Hessen 13. und 14. September 2021 Veranstaltungsseite: https://vdbcarpentry.github.io/2021-09-13-LCVDBHessen-online/ [toc] ## Organisatorisches Tag 1 - [x] Vorstellung der Instruktor*innen und Helfer - [x] Anrede - [x] Was sind "The Carpentries" - [x] Motivation für die Carpentry workshops - Automatisierung - Reproduzierbarkeit / Transparenz - größere Handlungsfähigkeit - [x] Lebenslanges Lernen - [x] Bitte bei Unklarheiten sofort fragen; Es gibt keine doofen Fragen. - [x] Verhaltenskodex https://docs.carpentries.org/topic_folders/policies/code-of-conduct.html => Seid nett zu einander (Be excellent to each other!) - [x] Fotos / Twitter? - [x] Pausen - [x] Pad erklären - [x] Übung - eigenen Namen zur Teilnehmerliste und [Lieblings-Emoji](https://github.com/ikatyang/emoji-cheat-sheet) hinzufügen - [x] Kursmaterialien - [x] Übersicht ## Zoom Infos - Alt + Tab Fenster wechseln - Linke Maustaste Doppelklick Vollbildmodus verlassen/betreten - Alt+A Mikrofon an- und ausschalten - Melden bei Problemen (Emoji Leiste Zoom) ### Teilnehmende - Constance Dittrich :writing_hand: - Agnes Brauer :upside_down_face: - Gerrit Heim :sweat_smile: - Sonja Schillings :grinning: - Andreas Geißner :thumbsup: - Sabrina Bayer :smile: - Helena Meyer :smile: - Helene Schlicht :shrug: - Christoph Marutschke :yum: - Eva Bunge :shrug: - Ursula Helmkamp :zany_face: - Katinka Tauber :innocent: - Roland Wagner: :pig_nose: - Anna Palme :smirk: - Helga Wick : :smile: - Andreas Kempf ::slightly_smiling_face: - Bastian Weber :joy: - Evamaria Krause :joy: - Michelle Kamolz :smile: - Martina Lehnert :desert_island: :shark: - Jakob Jung :open_mouth: - Sophie Müller :slightly_smiling_face: - Hans Bauer :cat: - Barbara Waszynski :dog2: - Tobias Pohlmann :thinking_face: - Thomas Nachreiner :upside_down_face: - Christine Gläser :books: ## Offizielle Library Carpentry-Lektionen - [Jargon Busting](https://librarycarpentry.org/lc-overview/03-jargon-busting/index.html) - [Regular Expressions](https://librarycarpentry.org/lc-data-intro/) - [Shell](https://librarycarpentry.org/lc-shell/) - [Python](https://librarycarpentry.org/lc-python-intro/) - [OpenRefine](https://librarycarpentry.org/lc-open-refine/) ### Jargon Busting Welche Begriffe, Phrasen oder Ideen rund um Programmieren, Code oder Software-Entwicklung sind euch schon begegnet? Bei welchen habt ihr das Gefühl, dass ihr mehr darüber wissen solltet? #### Jargon Busting 1. Gruppe 1 **geklärt** * Begriff 1 **offen** * Kommandozeile * **Shell * **Bash * API * Schnittstelle * GIT * Sind dies alles Eigennamen oder Oberbegriffe? 2. Gruppe 2 **offen** **geklärt** * Daten * Maschinelearning * AI * Regex * Python * Anaconda * Jupyter Notebooks * Programmiersprachen * Big Data * Linked Open Data * Shell [KI-Kurs](https://www.elementsofai.com/) 3. Gruppe * Entwickler (Was macht der/die eigentlich?) * Low Code **geklärt** * Skript **offen** * Entwickler (in der Bibliothek: Wo fängt es an? Muss es ein Produkt geben? Muss man programmieren oder "reicht auch zusammenklicken"? Skripte anpassen / weiterentwickeln?) * Schnittstelle, z.B. SWORD (Wie unterscheidet diese sich von anderen Schnittstellen?) * Automatisierung * Machine Learning 4. Gruppe 4 **geklärt / offen** * WinIBW-Skripting * WYSIWYG * Hypercare * Metadaten f. SWORD Schnittstelle * (Professionelles) Deployment * Debugging * Bug fixing * Compiler * Compiler Error vs. Bug #### Ansatzpunkte [TechTerms](**) ... ### Regular Expressions Startpunkt: [Online-Regex-Debugger](https://regex101.com/) #### Einführung Mit Hilfe von eckigen Klammern kann eine Liste oder ein Bereich von zu suchenden Zeichen definiert werden. | Regex | Erklärung | | -------- | --------- | | [ABC] | findet A oder B oder C | | [A-Z] | findet Großbuchstaben | | [A-Za-z] | findet Groß- oder Kleinbuchstaben | | [A-Za-z0-9] | beliebige Groß- oder Kleinbuchstaben oder beliebige Ziffern | Dann gibt es noch: | Regex | Erklärung | | -------- | --------- | | . | findet jedes Zeichen | | \d | findet eine Zahl | | \w | beliebige Groß- oder Kleinbuchstaben oder beliebige Ziffern | | \s | Leerzeichen, Tabulator oder Zeilenumbruch | \ | wird verwendet, um das folgende Zeichen zu "escapen", wenn dieses Zeichen ein Sonderzeichen ist. | | ^ | ist ein "Anker", der die Position am Anfang der Zeile festlegt. | \$ | ist ein "Anker", der die Position am Ende der Zeile festlegt. | | \b | besagt, dass das Muster an einer Wortgrenze übereinstimmen muss. | Auch nützlich sind: | Regex | Erklärung | | -------- | --------- | | * | entspricht dem vorhergehenden Element null oder mehr Mal | | + | passt ein oder mehrere Male auf das vorangehende Element | | ? | trifft zu, wenn das vorangehende Zeichen null oder einmal vorkommt| | {X, Y} | passt auf den vorangestellten Regex X bis Y mal | | \| | steht für ODER | | /i | macht einen Ausdruck unabhängig von der Groß-/Kleinschreibung | [Google Suche Regex-Übersichten](https://www.google.com/search?q=regex+cheat+sheet) #### Demonstrationen Erinnerung: [Buchstabiertafel](https://www.din.de/resource/blob/802280/c21eabd817f915f5d342b0ebc440fe1c/buchstabiertafel-staedtenamen-data.jpg) ##### Reguläre Ausdrücke übersetzen Startpunkt: [Online-Regex-Debugger](https://regex101.com/) **Exkurs: lazy vs. greedy** *Text:* A "witch" and her "broom" is one. *Regulärer Ausdruck:* (".+") ##### Arbeiten mit Text ###### Nr. 1 - im Plenum Aufgabe: Worauf passen die folgenden reguläre Ausdrücke? Beispiele: * \^[Oo]rgani.e\b * * Organise * * organise * * Organize * * organize,... * * organive * * organiXe * * organiße * * Organi2e * * Organi e * * organi+e * \^[Oo]rgani.e\w* * * Organise2 * * Organi e * * Organized * * Organizer * * Organizers * * Organi3e * * organizez * * organiseWhatever * * organisekffrufjgltikrjstheajdlgöghö * \^[Oo]rgani.e\w?$ * * organi2e * * Organi2ee * * organized * * organidea * * organiser * * organizee * * Organi.e3 * * Organitee * [Oo]rgani.e\w{2}\b * * lalala organi2e22 * * jgllgorganitede * * blubbborganizeds * * An OrganiZeer is here * * organiceee * \b[Oo]rgani.e\b|\b[Oo]rgani.e\w{1}\b * * organize organizee organizeorganizeee * * Organife organifer * * ein Organiter * * B organizer b organize * * B organize b organizer * * lalal organi2e 2 haha * * jgllg organitee jgllg * * An organiser should organise something [Tool-Tipp](https://regexper.com/) ###### Nr. 2 - in den Gruppen Startpunkte: Verschiedene Online-Regex-Debugger * [regex101](https://regex101.com/) * [myregexp](http://myregexp.com/) * [regexpal](https://www.regexpal.com/) Aufgabe: Worauf passen die folgenden reguläre Ausdrücke? Beispiele: * Fr[ea]nc[eh] * Fr[ea]nc[eh]\$ Aufgabe: Welche Regex würden zu folgenden Zeichenfolgen passen? * French and France (am Zeilenanfang) * colour and color (Groß- und Kleinschreibung unberücksichtigt) * Vier Zahlen hintereinander? * Ein Datum (im Format dd-MM-yyyy) * Publikationshinweise (im Format "British Library : London, 2015") [Lösungen:](https://librarycarpentry.org/lc-data-intro/04-exercises/index.html) Startpunkt: [Online-Regex-Debugger](https://regex101.com/) ###### Nr. 1 - im Plenum Aufgabe: Extrahieren von Mailadressen und Telefonnummer aus einem Dokument. Übungstext: [Carpentries Code of Conduct](https://github.com/LibraryCarpentry/lc-data-intro/tree/gh-pages/data/swcCoC.md) Regex-Beispiel: \b[\w.-]+@\w+\.\w+ Beispiele | Frage ###### Nr. 2 - in den Gruppen Aufgabe: Extrahieren aller DOIs aus einem Literaturverzeichnis. Übungstext: [Dissertation von Yaobin Liu](https://nbn-resolving.org/urn/resolver.pl?urn:nbn:de:hebis:30:3-577168) ###### Nr. 3 - in den Gruppen Aufgabe: Extrahieren von Telefonnummern von einer Webseite. Übungstext: [Telefonverzeichnis der Goethe Universität](https://qis.server.uni-frankfurt.de/qisserver/rds?state=wtree&search=2&trex=step&root220212=1%7C10000%7C10100&P.vx=lang) #### Übungen *Pausenfüller:* [Multiple Choice Quiz](https://librarycarpentry.org/lc-data-intro/03-quiz/index.html) ### OpenRefine Daten: [doaj-article-sample.csv](https://github.com/LibraryCarpentry/lc-open-refine/raw/gh-pages/data/doaj-article-sample.csv) Wofür eignet sich OpenRefine? [Beispiele](https://librarycarpentry.org/lc-open-refine/01-introduction/index.html) Wiederholung Regex mit Textfacette: Mayer und Meyer finden **Übung 1 zu OpenRefine** *1. Zellen splitten und zusammenführen* * Welches Trennzeichen wird in der "Subjects"-Spalte verwendet? * Bitte einzelne Werte der Subjects Spalte trennen * Danach die Einzelwerte wieder zusammenführen *2. Textfacetten* Bitte eine Textfacette für die "License"-Spalte erstellen, um folgende Fragen zu beantworten: * Welches ist die häufigste Lizenz? * Wie viele Artikel haben keine Lizenz? *3. Einträge in Facetten bearbeiten* * Bitte eine Textfacette auf der "language"-Spalte bilden und die Variationen von "EN" und "English" korrigieren. Übung 1 erledigt? - [x] Gruppe 1 - [x] Gruppe 2 - [x] Gruppe 3 - [x] Gruppe 4 - [x] Gruppe 5 **Übungen zu Transformationen und Reconciliation** - Syntax für die Crossref-Abfrage: "https://api.crossref.org/journals/"+value - VIAF-Reconciliation-Service: http://refine.codefork.com/reconcile/viaf **OpenRefine FAQs** * Wie kann man OpenRefine im Browser aufrufen, falls es sich nicht automatisch öffnet oder aus Versehen geschlossen wurde? http://127.0.0.1:3333/ ins Browserfenster eingeben * Wie fügt man das Pipe-Symbol (senkrechter Strich, | ) ein? * [alt gr] + [<>] (Windows) * [alt] + [7] (MacOS) * Wo werden die OpenRefine-Projekte gespeichert? https://docs.openrefine.org/manual/installing#set-where-data-is-stored * Welche weiteren Möglichkeiten gibt es in der Sprache GREL? * https://docs.openrefine.org/manual/grel * https://docs.openrefine.org/manual/grelfunctions * Deduplizieren mit OpenRefine https://histhub.ch/deduplizieren/ Michaela Voigt, Sebastian Dittmann, "Zweitveröffentlichungsservice der TU Berlin – Automatisierungsmöglichkeiten für den Workflow". LIBREAS. Library Ideas, 35 (2019). https://libreas.eu/ausgabe35/voigt/ https://github.com/tuub/oagreenservice ### The Unix Shell Übungsdateien: https://librarycarpentry.org/lc-shell/data/shell-lesson.zip #### Übung zu ls-Kommandos: - Findet heraus, wie die Dateien eines Ordners nach ihrer Größe sortiert angezeigt werden können. Kombiniert dies mit dem -l-Argument Antworten: - ls -Slh - ls -lhS - Findet ebenfalls heraus, wie Dateien nach ihrem letzten Modifikationsdatum angezeigt werden können Antworten: - ls -lht - ls -tlh - ls -lS --time=ctime (geht auch ohne S) Tipps: Hilfe aufrufen: man ls (Linux/Mac), ls --help (Windows) Online, z.B.: https://www.tutorialspoint.com/unix_commands/ls.htm #### Loops generelle Form für Schleifen: ```bash= for thing in list_of_things do operation_using $thing # Indentation within the loop is not required, but aids legibility done ``` ##### Übungen zu Loops - Lückentext: Füllt die Leerstellen, um den Namen, die erste Zeile und die letzte Zeile eines jeden Texts im aktuellen Ordner auszugeben. ```bash= ___ file in *.txt __ echo "_file" head -n 1 _______ ____ __ _ _______ ____ ``` ```bash= $ for file in *.txt > do > echo "$file" > head -n 1 "$file" > tail -n 1 "$file" > done ``` Erstes Shell-Skript: https://raw.githubusercontent.com/LibraryCarpentry/lc-shell/gh-pages/files/my_first_bash_script.sh - Lückentext: Füllt die Leerstellen, um eine Pipe zu erhalten, die die 10 Dateien mit den meisten Wörtern ausgibt (Hinweis: Das Sort-Kommando sortiert in aufsteigender Reihenfolge) ```bash= __ -w *.tsv | sort __ | ____ ``` Übungen zum Counting und Mining - Wörter zählen: Schaut in der Hilfe (man wc or wc --help) nach, welcher Parameter nötig ist, um die Anzahl der Wörter zu ermitteln. Probiert es mit den .tsv-Files aus und sortiert die Ausgabe. - Sucht nach allen Vorkommen (case sensitive) eines Wortes eurer Wahl in den vier .tsv-Files. Ausgabe in die Shell. - Sucht nach allen Vorkommen (case sensitive) eines Wortes eurer Wahl in den 'America' und 'Africa'-.tsv-Files. Ausgabe in die Shell. - Zählt alle Vorkommen (case sensitive) eines Wortes eurer Wahl in den 'America' und 'Africa'-.tsv-Files. Ausgabe in die Shell. - Zählt alle Vorkommen (case insensitive) eines Wortes eurer Wahl in den 'America' und 'Africa'-.tsv-Files. Ausgabe in die Shell. - Sucht nach allen Vorkommen (case insensitive) dieses Wortes in den 'America' und 'Africa'-.tsv-Files. Ausgabe in die Datei results/hero.tsv. - Sucht nach allen Vorkommen (case insensitive) des ganzen Wortes in den 'America' und 'Africa'-.tsv-Files. Ausgabe in die Datei results/hero-i.tsv. - Nutzt Reguläre Ausdrücke um alle ISSNs in 2014-01_JA.tsv zu finden und gebt diese in results/issns.tsv aus. (Nutzt den -E bzw. -P-Parameter). ### Python Exercises #### Exercise 1 What do the last three lines of this program do? x = 1.0 y = 3.0 swap = x x = y y = swap #### Excercise 2 What is the final value of position in the program below? (Try to predict the value without running the program, then check your prediction.) initial = "left" position = initial initial = "right" #### Excercise 3 If you assign a = 123, what happens if you try to get the second digit of a? #### Excercise 4 What type of value is 3.25 + 4? #### Excercise 5 What type of value (integer, floating point number, or character string) would you use to represent each of the following? Number of days since the start of the year. Call number of a book. Standard book loan period. Number of reference queries in a year. Average library classes taught per semester. #### Excercise 6 Which of the following will print 2.0? Note: there may be more than one right answer. first = 1.0 second = "1" third = "1.1“ first + float(second) float(second) + float(third) first + int(third) first + int(float(third)) int(first) + int(float(third)) 2.0 * second #### Excercise 7 Predict what each of the print statements in the program below will print. rich = "gold" poor = "tin" print(max(rich, poor)) print(max(len(rich), len(poor))) Does max(len(rich), poor) run or produce an error message? If it runs, does its result make any sense? #### Excercise 8 Explain in simple terms the order of operations in the following program: when does the addition happen, when does the subtraction happen, when is each function called, etc. word = 'blah ' word = max(min(word * 2 + 'blur ', 'aaah '), 'ping') print(word) What is the final value of word? #### Excercise 9 If Python starts counting from zero, and len returns the number of characters in a string, what index expression will get the last character in the string name? #### Excercise 10 The os library provides a way of accessing operating system functionality. What function from the os library can you use to determine the current working directory? #### Excercise 11 1. Fill in the blanks so that the program below prints 0123456789. 2. Rewrite the program so that it uses import without as. 3. Which form do you find easier to read? import string as s numbers = ____ .digits print(____) #### Excercise 12 1. Fill in the blanks so that the program below prints 90.0. 2. Do you find this version easier to read than preceding ones? 3. Why wouldn’t programmers always use this form of import? ____ math import ____, ____ angle = degrees(pi / 2) print(angle) #### Excercise 13 Fill in the blanks so that the program below produces the output shown. values =____ values.____ (1) values.____ (3) values.____ (5) print('first time:', values) values = values[____] print('second time:', values) Output: first time: [1, 3, 5] second time: [3, 5] #### Excercise 14 Given this: print('string to list:', list('tin')) print('list to string:', ''.join(['g', 'o', 'l', 'd'])) 1. Explain in simple terms what list('some string') does. 2. What does '-'.join(['x', 'y']) generate? #### Excercise 15 What does the following program print? element = 'fluorine' print(element[::2]) print(element[::-1]) ### Feedback Tragt bitte euer Feedback in das Padlet ein: https://padlet.com/braueragnes/jkp4qqjv7rd7ekls. Danke!