Skip to content

Commit

Permalink
minor changes, c-Parameter
Browse files Browse the repository at this point in the history
  • Loading branch information
martindroege committed Apr 20, 2024
1 parent a1c6916 commit 2a2cb38
Show file tree
Hide file tree
Showing 68 changed files with 620 additions and 1,691 deletions.
4 changes: 2 additions & 2 deletions ch-appendix/01-glossar.md
Original file line number Diff line number Diff line change
Expand Up @@ -92,8 +92,8 @@ Tags
Terminal
Ein Terminal ist eine textbasierte Benutzerschnittstelle, die es ermöglicht, Befehle direkt an das Betriebssystem zu senden und Ergebnisse anzuzeigen.

Third-Party-Paket
Third-party-Pakete sind Softwarepakete oder Bibliotheken, die von externen Entwicklern erstellt und nicht Teil der Standardbibliothek der verwendeten Programmiersprache sind.
Third-Party-Packages
Third-Party-Packages sind Softwarepakete oder Bibliotheken, die von externen Entwicklern erstellt und nicht Teil der Standardbibliothek der verwendeten Programmiersprache sind.

Token
In Natural Language Processing (NLP) ist ein Token eine atomare Einheit, die während der Textverarbeitung gebildet wird und einem Wort, einer Zahl, einem Satzzeichen oder einer anderen Bedeutungseinheit entspricht, um den Text in kleinere Teile zu zerlegen und weiter zu analysieren.
Expand Down
36 changes: 12 additions & 24 deletions ch-daten/01-python-intermediate-daten.ipynb
Original file line number Diff line number Diff line change
Expand Up @@ -11,41 +11,29 @@
"Bundestagswahlen: \\\n",
"https://www.bundeswahlleiterin.de/bundestagswahlen/1949.html\n",
"\n",
"---\n",
"\n",
"correspSearch: \\\n",
"Stefan Dumont, Sascha Grabsch, Jonas Müller-Laackman, Ruth Sander und Steven Sobkowski (Hg.): correspSearch – Briefeditionen vernetzen (2.3.0) [Webservice]. Berlin-Brandenburgische Akademie der Wissenschaften 2023. https://correspSearch.net\n",
"\n",
"---\n",
"\n",
"edition humboldt digital: \\\n",
"edition humboldt digital, hg. v. Ottmar Ette. Berlin-Brandenburgische Akademie der Wissenschaften, Berlin. Version 9 vom 04.07.2023. URL: https://edition-humboldt.de/\n",
"\n",
"---\n",
"\n",
"German Political Speeches Corpus: \\ \n",
"Adrien Barbaresi. (2019). German Political Speeches Corpus (Version v4.2019) [Data set]. Zenodo. https://doi.org/10.5281/zenodo.3611246\n",
"\n",
"Barbaresi, Adrien (2018). \"A corpus of German political speeches from the 21st century\", Proceedings of the Eleventh International Conference on Language Resources and Evaluation (LREC 2018), European Language Resources Association (ELRA), pp. 792–797. http://purl.org/corpus/german-speeches \n",
"\n",
"\n",
"The Proceedings of the Old Bailey: \\\n",
"Tim Hitchcock, Robert Shoemaker, Clive Emsley, Sharon Howard and Jamie McLaughlin, et al., The Old Bailey Proceedings Online, 1674-1913, version 9.0, Autumn 2023, [www.oldbaileyonline.org](https://www.oldbaileyonline.org/)\n",
"\n",
"\n",
"\n",
"<!-- \n",
"TODO\n",
"Infos zu den Daten erfassen und einfügen, Datei und Titel umbenennen\n",
"\n",
"Die Dateien `books.csv` und `library.json` sind selbst erstellt.\n",
"\n",
"Die Datei `adliger_vergleich.txt` ist eine eigene Transkription, entnommen aus: *Nachlassenschaft des Grafen Ferdinand von Plettenbergs, welche zu Wien obsigniret worden und welche Franz Joseph als Erbe fordert, LWL-Archivamt für Westfalen Nor.K 13 Nr. 21, 1737.*\n",
"\n",
"Die iiif-Manifeste sind aus den Beständen der [Französischen Nationalbibliothek](https://www.bnf.fr) entnommen:\n",
"* [BnF. Departement des Manuscrits. Francais 1950](https://gallica.bnf.fr/iiif/ark:/12148/btv1b8447758z/manifest.json)\n",
"* [BnF. Departement des Manuscrits. Francais 2170](https://gallica.bnf.fr/iiif/ark:/12148/btv1b9059916f/manifest.json)\n",
"* [BnF. Departement des Manuscrits. Francais 2187](https://gallica.bnf.fr/iiif/ark:/12148/btv1b9060645m/manifest.json)\n",
"* [BnF. Departement des Manuscrits. Francais 2196](https://gallica.bnf.fr/iiif/ark:/12148/btv1b6000339k/manifest.json)\n",
"* [BnF. Departement des Manuscrits. Francais 2228](https://gallica.bnf.fr/iiif/ark:/12148/btv1b8426259s/manifest.json)\n",
"* [BnF. Departement des Manuscrits. Francais 2608](https://gallica.bnf.fr/iiif/ark:/12148/btv1b8451604g/manifest.json)\n",
"\n",
"Alle Beispieldaten finden Sie auch [hier](https://github.com/Digital-History-Berlin/Python-fuer-Historiker-innen/tree/main/ch04-dateien-verarbeiten/example_data) in unserem GitHub-Repository. -->"
"\n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": []
}
],
"metadata": {
Expand Down
2 changes: 1 addition & 1 deletion ch-loesungen/01-python-intermediate-loesungen.ipynb
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
"cell_type": "markdown",
"metadata": {},
"source": [
"# Lösungen zu den Aufgaben aus Python Intermediat\n",
"# Lösungen zu den Aufgaben aus Python Intermediate\n",
"\n",
":::{note}\n",
"Bei den Lösungen handelt es sich um Vorschläge. \n",
Expand Down
21 changes: 21 additions & 0 deletions ch-loesungen/ch01-api-loesung.ipynb
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,13 @@
"## Import"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
},
{
"cell_type": "code",
"execution_count": null,
Expand All @@ -51,6 +58,13 @@
"## Helferfunktionen"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
},
{
"cell_type": "code",
"execution_count": null,
Expand Down Expand Up @@ -190,6 +204,13 @@
"## Anfrage durchführen"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
},
{
"cell_type": "code",
"execution_count": null,
Expand Down
14 changes: 5 additions & 9 deletions ch-loesungen/ch03-plotten-loesung.ipynb
Original file line number Diff line number Diff line change
Expand Up @@ -268,7 +268,7 @@
"---\n",
"\n",
"Für die folgenden Aufgaben nutzen wir einen neuen Datensatz. Es handelt sich hier um Reden der Bundesregierung.\n",
"Die Textdaten f sind dem Projekt German Political Speeches Corpus entnommen. Adrien Barbaresi. (2019). German Political Speeches Corpus (Version v4.2019) [Data set]. Zenodo. https://doi.org/10.5281/zenodo.3611246. \n",
"Die Textdaten sind dem Projekt German Political Speeches Corpus entnommen. Adrien Barbaresi. (2019). German Political Speeches Corpus (Version v4.2019) [Data set]. Zenodo. https://doi.org/10.5281/zenodo.3611246. \n",
"\n",
"Barbaresi, Adrien (2018). \"A corpus of German political speeches from the 21st century\", Proceedings of the Eleventh International Conference on Language Resources and Evaluation (LREC 2018), European Language Resources Association (ELRA), pp. 792–797. http://purl.org/corpus/german-speeches (BibTeX entry)\n"
]
Expand Down Expand Up @@ -512,11 +512,9 @@
"source": [
"## Aufgabe: Ergebnis von Datenabfragen visualisieren\n",
"\n",
"Visualisieren Sie die *absoluten* und *relativen* Häufigkeiten des Ergebnisses der im Notebook `LC5_pandas-basics.ipynb` gestellten Aufgabe 3.4:\n",
"Visualisieren Sie die *absoluten* und *relativen* Häufigkeiten Suchen Sie nach Reden, die sich auf Umweltthemen beziehen. In Frage kommen hierfür Begriffe wie \"Umwelt\", \"Klima\", \"Nachhaltigkeit\" oder ähnliches. Formulieren Sie eine Abfrage, die mehrere dieser Begriffe berücksichtigt. Achten Sie ggf. darauf, wie die Bedingungen mit runden Klammern gruppiert werden müssen.\n",
"\n",
"*Suchen Sie nach Reden, ~~die zwischen 2000 und 2010 gehalten wurden,~~ die sich auf Umweltthemen beziehen. In Frage kommen hierfür Begriffe wie \"Umwelt\", \"Klima\", \"Nachhaltigkeit\" oder ähnliches. Formulieren Sie eine Abfrage, die mehrere dieser Begriffe berücksichtigt. Achten Sie ggf. darauf, wie die Bedingungen mit runden Klammern gruppiert werden müssen.*\n",
"\n",
"Die Einschränkung auf den Zeitraum 2000-2010 fällt für diese Aufgabenstellung weg. Was fällt Ihnen bei der Visualisierung der relativen Häufigkeiten auf?\n"
"Was fällt Ihnen bei der Visualisierung der relativen Häufigkeiten auf?\n"
]
},
{
Expand Down Expand Up @@ -1035,13 +1033,11 @@
"cell_type": "markdown",
"metadata": {},
"source": [
"## **Optionale Zusatzaufgabe:** Aufgabe 4 - Funktion für Visualisierung erstellen\n",
"## **Optionale Zusatzaufgabe:** Funktion für Visualisierung erstellen\n",
"\n",
"Wie Sie sicherlich festgestellt haben, konnte der Code zur Visualisierung der Auswertungen im zweiten Teil dieses Notebook mit kleineren Anpassungen immer wieder verwendet werden, da die Art der zu visualisierenden Daten sich sehr ähneln. Das heißt, statt immer wieder den Code zu kopieren, könnte eigentlich, wie wir es gelernt haben, eine Funktion erstellt werden, die mit verschiedenen Parametern dann in unterschiedlichen Kontexten aufgerufen werden kann. \n",
"\n",
"Probieren Sie gerne einmal aus, wie der Code zur Visualisierung verallgemeinert werden müsste, damit er für die verschiedenen Aufgaben in diesem Notebook verwendet werden kann.\n",
"\n",
"⏳ 20 Minuten"
"Probieren Sie gerne einmal aus, wie der Code zur Visualisierung verallgemeinert werden müsste, damit er für die verschiedenen Aufgaben in diesem Notebook verwendet werden kann.\n"
]
},
{
Expand Down
4 changes: 2 additions & 2 deletions ch01-api/02-exkurs-third-party-packages.ipynb
Original file line number Diff line number Diff line change
Expand Up @@ -5,8 +5,8 @@
"metadata": {},
"source": [
"(third-party-packages)=\n",
"# Exkurs: Installation von Third-Party-Paketen\n",
"Für die Installation von {term}`Third-Party-Paketen` gibt es unterschiedliche Wege. Letztlich besteht jedes Paket einfach nur aus einer kleineren oder größeren Anzahl von Python-Modulen (= einzelnen .py-Dateien), die bestimmte Funktionen bereitstellen. Theoretisch könnten Sie also auch jedes Paket von Hand installieren. Einfacher und gebräuchlicher ist die Nutzung eines Paketverwaltungsprogramms. Dieses hat Zugriff auf das zentrale Repositorium [Python Package Index (PyPI)](https://pypi.org/). Sie können sich das wie einen AppStore für Third-Party-Pakete für Python vorstellen.\n",
"# Exkurs: Installation von Third-Party-Packages\n",
"Für die Installation von {term}`Third-Party-Packages` gibt es unterschiedliche Wege. Letztlich besteht jedes Paket einfach nur aus einer kleineren oder größeren Anzahl von Python-Modulen (= einzelnen .py-Dateien), die bestimmte Funktionen bereitstellen. Theoretisch könnten Sie also auch jedes Paket von Hand installieren. Einfacher und gebräuchlicher ist die Nutzung eines Paketverwaltungsprogramms. Dieses hat Zugriff auf das zentrale Repositorium [Python Package Index (PyPI)](https://pypi.org/). Sie können sich das wie einen AppStore für Third-Party-Packages für Python vorstellen.\n",
"\n",
"Üblicherweise steuern Sie Paketverwaltungsprogramme über die {term}`Kommandozeile` -- meist mit dem Paketverwaltungsprogramm [PIP (**P**ip **I**nstalls **P**ackages)](https://pip.pypa.io/en/stable/) oder, wenn Sie die {term}`Anaconda`-Distribution nutzen, dem [Conda-Paketverwaltungsprogramm](https://docs.conda.io/en/latest/).\n",
"\n",
Expand Down
2 changes: 1 addition & 1 deletion ch01-api/03-intro-api.ipynb
Original file line number Diff line number Diff line change
Expand Up @@ -43,7 +43,7 @@
"source": [
"### API Key von Europeana \n",
"\n",
"**TEXT für Anfrage von API Key**"
"Einen API Key von Europeana erhalten Sie, wenn Sie die Angaben in dem Formular ausfüllen, das Sie über diesen [Link](https://pro.europeana.eu/pages/get-api) erreichen. Nachdem Sie den *terms of use* zugestimmt haben, erhalten den API Key in einer Email und können diesen bei Anfragen an die Europeana-APIs nutzen. Es entstehen keine Kosten für Sie und der Vorgang nimmt maximal nur 1 Minute in Anspruch."
]
},
{
Expand Down
24 changes: 12 additions & 12 deletions ch02-pandas/03-api-correspsearch.ipynb
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@
"source": [
"## Install und Import\n",
"\n",
"Für das hier gewählte Vorgehen können wir ein kleines Python-Paket sehr gut nutzen, dass uns bei der Arbeit mit {term}`JSON`-Objekten hilft. Zunächst installieren wir das Paket [`flatten-json`](https://pypi.org/project/flatten-json/) mit Hilfe von {term}`PIP`. Um den Befehl in einer Zelle des Jupyter Notebooks auszuführen, muss dem Befehl pip einfach ein '!' vorangestellt werden. Danach können wir dieses Paket mit den anderen erforderlichen Paketen importieren.\n",
"Für das hier gewählte Vorgehen können wir ein kleines Python-Paket sehr gut nutzen, dass uns bei der Arbeit mit {term}`JSON`-Objekten hilft. Zunächst installieren wir das Paket [`flatten-json`](https://pypi.org/project/flatten-json/) mit Hilfe von {term}`PIP`. Um den Befehl in einer Zelle des Jupyter Notebooks auszuführen, muss dem Befehl pip einfach ein '!' vorangestellt werden. Danach können wir dieses Paket mit den anderen erforderlichen Paketen importieren. Siehe dazu auch den [Exkurs zur Installation von Third-Party-Packages](third-party-packages)\n",
"\n",
"Wer nochmal einen Refresher zu JSON benötigt, erfährt dazu alles grundlegende im Jupyter Book 'Python Basics' im Kapitel [Dateien verarbeiten](https://digital-history-berlin.github.io/Python-fuer-Historiker-innen/ch04-dateien-verarbeiten/03-json.html).\n",
"\n",
Expand Down Expand Up @@ -191,9 +191,9 @@
"\n",
"* Dann nutzen wir für die Variable `person` die GND-ID für Alexander von Humboldt.\n",
"\n",
"* Da wir direkt bei der Anfrage einen ersten Filter einsetzen möchten, mit dem wir nur die Briefe aus der [edition humboldt digital](https://edition-humboldt.de/) zurückerhalten, wählen wir für den Parameter `e=` die ID für diese Edition aus und weisen diese der Variable `edition` zu.\n",
"* Da wir direkt bei der Anfrage einen ersten Filter einsetzen möchten, mit dem wir nur die Briefe aus der [edition humboldt digital](https://edition-humboldt.de/) zurückerhalten, wählen wir für den Parameter `c=` die entsprechende Info aus der CMIF-Datei für diese Edition aus und weisen diese der Variable `edition` zu.\n",
"\n",
"Wo finden wir aber die ID, die für die Edition bzw. den Publikationsort der Briefe, die uns interessieren, steht? Bei einer allgemeine API-Anfrage nach Briefen von Alexander von Humboldt müssen wir uns die JSON-Datei genauer anschauen. Hier finden wir bei den entsprechenden Briefen und `sourceDesc` die Informationen zu dem entsprechenden Datengeber. Unter `sourceDesc`, `bibl` und dann `xml:id` finden wir einen langen String, der die ID für die entsprechende Edition darstellt. Diesen String können wir bei einer neuen Anfrage an die API nutzen, um nach Treffern, die nur von dieser Edition stammen, zu filtern."
"CMIF steht für Correspondence Metadata Interchange-Format. Nähere Infos hierzu finden sich in der [Dokumentation von CorrespSearch](https://correspsearch.net/de/dokumentation.html). Auch die [edition humboldt digital](https://edition-humboldt.de/) nutzt dieses Format und stellt die entsprechende Informationen der correspSearch-API zur Verfügung. Den richtigen Wert für den Parameter, um die Ergebnisse von nur dieser Edition zu filtern, können wir über die erweiterte [Suche bei correspSearch](https://correspsearch.net/de/suche.html) herausfinden. Wenn wir die erweiterte Suche aufrufen, gibt es dort das Feld `CMIF-Datei`. Hier können wir den String 'edition humboldt digital' eingeben und die Suche starten. Im URL-Feld des Browser können wir nun den Wert für den Parameter `c` sehen und für unsere API-Query herauskopieren. Dieser lautet: `https://edition-humboldt.de/api/v1.2/cmif.xql`"
]
},
{
Expand All @@ -208,8 +208,8 @@
"# GND-ID für Alexander von Humboldt\n",
"person = 'http://d-nb.info/gnd/118554700'\n",
"\n",
"# Parameter für Edition / Publikation\n",
"edition = 'd238c5bd-a978-475e-8784-58ce7ec82010'"
"# Parameter für Edition \n",
"edition = 'https://edition-humboldt.de/api/v1.2/cmif.xql'"
]
},
{
Expand All @@ -225,7 +225,7 @@
"metadata": {},
"outputs": [],
"source": [
"api_query = f'{api_base_url}s={person}&e={edition}'\n",
"api_query = f'{api_base_url}s={person}&c={edition}'\n",
"print(api_query)"
]
},
Expand Down Expand Up @@ -281,7 +281,7 @@
"cell_type": "markdown",
"metadata": {},
"source": [
"Mit der nächsten Code-Zelle legen wir einen `data`-Ordner an, um dort die JSON-Dateien zu speichern."
"Mit der nächsten Code-Zelle legen wir einen Ordner im `data`-Ordner an, um dort die JSON-Dateien zu speichern."
]
},
{
Expand All @@ -290,7 +290,7 @@
"metadata": {},
"outputs": [],
"source": [
"path = 'data'\n",
"path = 'data/correspSearch-api-tei-json'\n",
"\n",
"try:\n",
" os.mkdir(path)\n",
Expand Down Expand Up @@ -319,7 +319,7 @@
"\n",
" print(response.json()['teiHeader']['fileDesc']['notesStmt']['note'])\n",
"\n",
" with open(f'data/{str(page_nr).zfill(4)}_AvH_edi_hum_dig.json', 'w', encoding='utf-8') as f:\n",
" with open(f'{path}/{str(page_nr).zfill(4)}_AvH_edi_hum_dig.json', 'w', encoding='utf-8') as f:\n",
" json.dump(response.json(), f, ensure_ascii=False, indent=4)\n",
"\n",
" time.sleep(5)"
Expand All @@ -329,7 +329,7 @@
"cell_type": "markdown",
"metadata": {},
"source": [
"Schauen wir uns den Inhalt des `data`-Ordners kurz an, ob alles passt."
"Schauen wir uns den Inhalt des `data\\correspSearch-api-tei-json`-Ordners kurz an, ob alles passt."
]
},
{
Expand All @@ -338,7 +338,7 @@
"metadata": {},
"outputs": [],
"source": [
"files = os.listdir('data')\n",
"files = os.listdir(path)\n",
"print(len(files))\n",
"print(sorted(files))"
]
Expand All @@ -364,7 +364,7 @@
"\n",
" if file.endswith('.json'):\n",
"\n",
" with open(f'data/{file}', 'r', encoding='utf8') as f:\n",
" with open(f'{path}/{file}', 'r', encoding='utf8') as f:\n",
"\n",
" json_obj = json.load(f)\n",
"\n",
Expand Down
Loading

0 comments on commit 2a2cb38

Please sign in to comment.