Ein Downloader for Forschungsliteratur-Korpora
Bachelorarbeit, betreut von Lutz Prechelt
Hintergrund
Die
Software Engineering Research Quality Coalition
(SERQco)
will künftig eine Reihe von Studien zur Forschungsqualität durchführen,
die jeweils auf der manuellen Analyse einer größeren Menge publizierter
Forschungsarbeiten basieren.
Ausgangspunkt dafür sind jeweils komplette Jahrgänge ("volumes") von Artikeln gewisser
Erscheinungsorte ("venues").
Ziel
In dieser Arbeit wird ein Downloader-Kommandozeilenskript entwickelt,
das jeweils einen solchen Jahrgang von PDFs herunterlädt, in einer standardisierten
Art und Weise ablegt und eine dazugehörige BibTeX-Datei mit Metadaten
sowie nötigenfalls andere Hilfsdateien schreibt.
Funktionale Anforderungen
- Der Aufruf sieht z.B. wie folgt aus:
retrievelit TSE-2021 ICSE-2021 TSE-2021
Dabei ist das erste Argument die Bezeichnung dessen, was heruntergeladen werden soll, alle weiteren bezeichnen Teile der entstehenden Datensammlung (Gesamtkorpus), die bereits zuvor heruntergeladen wurden.
- Dabei stehen
TSE
und ICSE
für Erscheinungsorte wie folgt:
- EMSE: Empirical Software Engineering (von Springer)
- ICSE: International Conference on Software Engineering, Technical Research track (von ACM und IEEE CS)
- IST: Information and Software Technology (von Elsevier)
- TOSEM: ACM Transactions on Software Engineering and Methodology (von ACM)
- TSE: IEEE Transactions on Software Engineering (von der IEEE Computer Society)
- Die Zahl
2021
etc. bezeichnet den gewünschten Jahrgang. Alle Beiträge (Artikel) dieses Jahrgangs sollen heruntergeladen werden.
- Achtung: Bei ICSE ist damit nur der Technical Research track gemeint.
Für alle anderen Tracks, z.B.
- NIER: New Ideas and Emerging Results
- SEET: Software Engineering Education and Training
- SEIP: Software Engineering in Practice
- SEIS: Software Engineering in Society werden ggf. später separate Abrufkürzel eingeführt (und diese Abrufe sollen dann einfach zu implementieren sein).
- Die heruntergeladenen Artikel werden in einem neu angelegten Verzeichnis mit dem Namen des Abrufs abgelegt; im obigen Beispiel also in
./TSE-2021/
- Die einzelnen Artikel werden darin als PDF-Datei mit folgendem Namensschema abgelegt: Für den Artikel
Jeffrey Ao, Karoline de Burgh, Lisa van Clåsen, Manfred Dommermuth-Eigendörfer: On the Difficulty of Describing Defects Detected in Reviews, TSE 2021
lautet der Dateiname AoBurClå21-difficulty.pdf
. Also:
- Je bis zu drei Buchstaben der ersten drei Nachnamen, Prefixe weglassen (bei nur 1 Autor: kompletten ersten Nachnamen)
- gefolgt von Jahreszahl 2-stellig
- gefolgt vom ersten "richtigen" Wort des Titels in Kleinschreibung ("unrichtige" Wörter sind alle Partikel, also: Artikel, Konjunktionen und Präpositionen; die bilden eine Stoppwortliste)
- Sollte es dabei zu einer Namenskollision kommen, so wird an die Jahreszahl ein Kleinbuchstabe b oder c oder d etc. angehängt, bis ein freier Name gefunden wird.
Hätten also z.B. obige Autoren im gleichen Jahr auch noch einen Artikel "A Difficulty for Secondary Reviewers" veröffentlicht, so führt dessen Auftreten zum Dateinamen AoBurClå21b-difficulty.pdf
Eine solche Namenskollision wird nicht nur im aktuellen Zielverzeichnis der neu herunterzuladenden PDFs entdeckt, sondern auch in den Verzeichnissen, die in den weiteren Kommandozeilenargumenten genannt sind, so dass diese alle gemeinsam einen einzigen Namensraum für PDF-Dateinamen bilden.
- Ferner wird in dem Verzeichnis eine BibTeX -Datei mit den Metadaten der Artikel abgelegt, namens (im Beispiel):
TSE-2021-dblp.bib
.
Dabei ist dblp
der Name der benutzen Metadaten-Quelle. Davon soll es idealerweise folgende geben:
- acmguide: ACM Guide to the Computing Literature (u.U. funktioniert der technisch gesehen indiskutabel schlecht)
- crossref: Crossref
- dimensions: dimensions.ai (falls das dazu taugt)
- dblp: dblp.org (Default)
- scopus: Scopus (das ist kommerziell, da müssten wir einen Zugang erstmal einfädeln)
- wos: Web of Science (kommerziell, die FU hat eine Campuslizenz) Die gewünschte Metadatenquelle kann mit der Option
--metadata
ausgewählt werden, z.B. so
retrievelit --metadata crossref TSE-2021 ICSE-2021 TSE-2021
- Wird als Metadatenquelle nicht der Default benutzt, so wird der Metadatenquellenname an den Verzeichnisnamen wie folgt angehängt
TSE-2021-crossref
.
- In der BibTeX-Datei werden als Zitierschlüssel die PDF-Dateinamen (ohne den Suffix
.pdf
) benutzt.
- Außerdem erzeugt der Downloader eine Datei
TSE-2021-dblp.list
o.ä., die nur die PDF-Dateinamen mit dem lokalen Pfad enthält; 1 Eintrag pro Zeile.
Beispiel: =TSE-2021/AoBurClå21b-difficulty.pdf
Nichtfunktionale Anforderungen, Randbedingungen etc.
- Der Downloader wird in Python implementiert.
- Der Entwurfs- und Kodierstil zielt auf eine knappe und leicht verständliche Lösung, mit einem sinnvollen Minimum an Kommentaren und mit Typdeklarationen in den Methoden- und Funktionsköpfen (aber i.d.R. nicht für Variablen).
- Der Downloader wird unter MIT-Lizenz im GitHub-Repository
https://github.com/serqco/retrievelit
freigegeben.
- Die `README.md`-Datei liefert eine knappe, praxisorientierte Anleitung welche mindestens folgendes abdeckt:
- Zweck
- Aufrufe und ihre Wirkungen
- Wie man ein venue ergänzen kann.
- Es gibt eine automatisierte Testsuite, die insbesondere folgendes prüft:
- Dass ein Gesamtablauf korrekt funktionert. Dieser Test sollte
vcrpy
benutzen, um schnell genug ablaufen zu können.
- Dass jede Metadatenquelle noch in der erwarteten Weise funktioniert
- Dass die Dateinamenbildung auch mit schwierigen Fällen umgehen kann und das unabhängig davon, wie die jeweilige Metadatenquelle die Autorenliste formatiert und kodiert.
- Dass das Wiederaufsetzen nach Abstürzen korrekt funktioniert.
- Für die wichtigsten erwartbaren Fehlersituationen erzeugt der Downloader klare Fehlermeldungen mit Problem, vermutlicher Ursache und vermutlichem Behebungsweg (wo möglich).
- Während des Arbeitens erzeugt der Downloader sinnvolle knappe Fortschrittsausgaben und schreibt eine (etwas detailliertere, insbes. mit Zeitstempeln) Protokolldatei im Zielverzeichnis.
- Die Metadatenquellen und die Art und Weise des Zugriffs auf jede davon dürfen hartkodiert sein, aber die einzelnen Erscheinungsorte sollen jeweils nur durch einen Block von Parametern beschrieben sein, so dass man leicht weitere Erscheinungsorte ergänzen kann.
Ein Modul venues.py
fasst diese Parameterblöcke zusammen. Dort einen Block zuzufügen soll ausreichen, um einen Erscheinungsort zuzufügen.
- Zwischen je zwei Zugriffen auf die selbe Datenquelle (ob für Metadaten oder für PDFs) muss jeweils 1 Sekunde Pause bleiben, um die Server zu schonen bzw. nicht an Ratenlimits zu stoßen.
- In diesem Sinne soll der Downloader unnötige wiederholte Zugriffe auf Netzressourcen vermeiden. Besondere Maßnahmen für hohe Effizienz sind ansonsten nicht nötig.
- Der Downloader soll in kurzen Abständen seinen Zustand so persistieren, dass er nach einem eventuellen Absturz an der selben Stelle wieder aufsetzen kann, statt von vorn beginnen zu müssen.
Es ist akzeptabel, falls das zu doppelten Einträgen in der BibTeX-Datei führen kann.
Das Persistieren soll mit einem transparenten und leichtgewichtigen Mechanismus passieren, vermutlich einer JSON-Datei, die am Ende wieder gelöscht wird. Eventuell reicht sogar während der PDF-Downloads die *.list
Datei und während die Erstellung der BibTeX-Datei eine ähnliche mit dem Namen *.biblist
.
- Alle erzeugten Textdateien benutzen UTF-8-Kodierung.
Zu verwendende Bibliotheken
Python hat ein reiches Universum guter Bibliotheken, von denen angemessen Gebrauch gemacht
werden soll.
Insbesondere ist
vermutlich die Verwendung der folgenden anzuraten:
Standardbibliothek:
- argparse
- json (evtl. pickle)
- mock
Sonstige (von
PyPI):
- beautifulsoup4 (evtl. Scrapy o.ä.)
- pytest
- requests
- vcrpy
Prioritäten
Die SERQco möchte möglichst bald mit der ersten Studie beginnen, deshalb soll eine grundlegende
solide funktionierende Downloadfunktion als erstes gebaut und freigegeben werden.
Die Metadatenquelle hierfür soll dblp sein.
Als nächste Priorität folgen sodann
README.md
, die Testsuite, sowie
--metadata crossref
.
Sollte nach der Umsetzung aller hier beschriebener Anforderungen noch
Zeit sein, kann die Arbeit in Absprache mit dem Betreuer
um einen Metadatenqualitätsvergleich erweitert werden.
Taktische Hinweise
- Die abzurufenden PDFs befinden sich überwiegend hinter Bezahlschranken. Der Zugriff gelingt nur, wenn und insoweit die FU eine Campuslizenz für dieses Material hat und man mit einer FU-IP-Adresse zugreift. Man muss deshalb in der FU sein oder eine VPN-Verbindung benutzen.
- Für die Erscheinungsorte (Elsevier), wo die FU keine Lizenz hat, besteht eine Lizenz oft für alte Jahrgänge (z.B. 2010), was zum Testen ausreicht, oder wir beschaffen einen Zugang über ein anderes SERQco-Mitglied.
- Wenn ein DOI für Material der IEEE zu ieeexplore führt, hat die FU keinen Zugriff. Der DOI lässt sich aber sehr leicht so umschreiben, dass er statt dessen zu computer.org führt und dort hat die FU dann Zugriff auf genau den selben Artikel.
Das Umschreiben sieht so aus: aus https://doi.org/10.1109/xyz
(für beliebige Werte von xyz
) mache https://doi.ieeecomputersociety.org/10.1109/xyz
.
Siehe die DOI-Syntax.
Dieses Umschreiben soll mit der Option --ieeecs
einschaltbar sein.
Schriftliche Ausarbeitung
Die Bachelorarbeit ordnet die Arbeit in den Zusammenhang von SERQco ein.
Sie dokumentiert besondere Ereignisse im Entstehungsprozess,
insbesondere bei der Erkundung der Metadatenquellen.
Sie beschreibt die Erwägungen bei den wichtigen Entwurfsentscheidungen
zum Downloader und der Testsuite.