/pruefstelle

Prototyp zum Qualitätsmanagement automatischer Erschließung (Textmining) im Archiv

Primary LanguagePythonGNU General Public License v3.0GPL-3.0

Tool (Prototyp) zum Qualitätsmanagement automatischer Erschließung (Textmining) im Archiv, das auf Basis menschlicher Bewertungen unter Verwendung eines festzulegenden Fallprofils einen Prozentwert ("Recherchegüte") berechnet.

Achtung: Prüfstelle ist eine Alpha-Version.

Screenshots

Fallansicht Fall ansehen Falloptionen Recherchegüte wird abhängig vom Fallprofil berechnet Visualisierung Visualisierung der Verteilung aller Bewertungen über einen Fall
Hilfstexte Es wird möglichst wenig vorausgesetzt. Wo etwas vielleicht mal nicht klar ist, gibt's Hilfstexte. API Durchgängig modellierte/spezifizierte API (OpenAPI 3) Eingabemaske Neuen Fall anlegen

Installation

Vorab: Repo klonen oder herunterladen

Docker

  1. cd /pruefstelle/docker/
  2. docker-compose build
  3. docker-compose up

Die genutzte Konfiguration kann über environment im docker-compose.yml angepasst werden. Allerdings gilt das nur für das Backend, da die envvars während der Buildzeit des Frontends vorhanden sein müssen. Daher ist die .env-Datei aus examples/ in frontend/ erforderlich -- Anpassungen sind dort möglich.

Entwicklung

Frontend

  1. cd ins Repo
  2. cd pruefstelle/frontend/
  3. Dort .env-Datei nach dem Beispiel in pruefstelle/examples anlegen
  4. npm i
  5. npm run dev

Prüfstelle ist zwar unter http://localhost:3000/ erreichbar, wird aber einen Fehler anzeigen. Schließlich läuft das Backend noch nicht.

Backend

  1. cd ins Repo
  2. cd pruefstelle/backend/settings
  3. Dort .secrets.toml nach dem Beispiel in examples/example.secrets.toml anlegen (mindestens die im Beispiel mit "???" markierten Werte müssen angepasst werden)
  4. cd pruefstelle/backend
  5. python3 -m venv .venv
  6. source .venv/bin/activate
  7. pip install .
  8. pruefstelle run (vgl. pruefstelle --help für Konfigurationsmöglichkeiten)

Die API ist unter http://localhost:8000 (Swagger UI unter: http://localhost:8000/docs) erreichbar.

Und prüfstelle wartet nun ohne Fehler unter http://localhost:3000.

Produktion

Frontend

Statt npm run dev (Schritt 6) npm run build ausführen. In pruefstelle/frontend/build finden sich nun Javascript-Dateien, die so von beliebigen Webservern statisch ausgeliefert werden können. Mehr Informationen dazu finden sich hier.

Mit npm run preview lässt sich die Produktivbuild ausprobieren.

Backend

Statt pruefstelle (Schritt 8) ENV_FOR_PRUEFSTELLE=production pruefstelle run ausführen und die mit ??? markierten Werte ersetzen.

Je nach Verwendungszweck empfiehlt sich in .secrets.toml unter [production.db] eine andere Datenbank als SQLite (z. B. PostgreSQL) einzusetzen sowie uvicorn in Verbindung mit z. B. guvicorn zu nutzen; Informationen zu Letzterem finden sich hier.

Orientierung Verzeichnisstruktur & wichtige Dateien

Zu der Konfigurationsdatei vgl. examples/example.secrets.toml und den Abschnitt zur Installation oben.

Frontend

  • /pruefstelle/frontend/src/routes: Routing mit Pfaden, wie sie im Browser verwendet werden.
  • /pruefstelle/frontend/src/api: Der generierte und angepasste (zu Anpassungen vergleich in den Kommentaren im Kopf der Dateien) API-Client
  • /pruefstelle/frontend/src/components: Svelte-Bausteine; je in Unterordner organisiert, wenn Komponenten enger zusammenhängen
  • /pruefstelle/frontend/src/scripts: Skripte; wenn sie zu einer Komponente gehören, haben die Skripte die gleichen Namen wie die Bausteine in components/

Mehr Informationen

SvelteKit-Dokumentation

Backend

  • pruefstelle/backend/pruefstelle/database: Alles was mit der Datenbank zu tun hat; in pruefstelle/backend/pruefstelle/database/tables.py werden die Tabellen deklariert; in crud/ finden sich die Datenbankoperationen
  • pruefstelle/backend/pruefstelle/external: API-Clients für externes Services, die zur Interaktion mit diesen von base_api.py:Api erben
  • pruefstelle/backend/pruefstelle/routes: Endpunkte Prüfstellen-API; in restrictions/ finden sich ggf. vorhandene Bedingungen, die für die Durchführung einer Endpunkt-Aktion erfüllt sein müssen; vgl. dazu auch routes/__init__.py
  • pruefstelle/backend/pruefstelle/schemas: Serialisierungsschemata bzw. Modelle der Endpunkte
  • pruefstelle/backend/pruefstelle/security: JWT-Authentifzierung
  • pruefstelle/backend/pruefstelle/tasks: Alle sonstigen Operationen, die nicht CRUD-Operationen sind (z. B. report/ zur Generierung des Punktwerts auf Basis des Fallprofils)

Dabei gilt, dass z. B. routes/case.py sich auf z.B. die Schemata in schemas/case.py bezieht.

Mehr Informationen

Nutzung

Die Links in diesem Abschnitt verweisen direkt auf die API und sind nur zugänglich, wenn diese auf localhost:8000 läuft.

Rollen

  • User:in: Kann auf alle Endpunkte außer die unter admin/ zugreifen
  • Superuser:in: Kann zusätzlich auf die Endpunkte unter admin/ zugreifen

Nutzer:innen-Verwaltung

Superuser:in anlegen

Das ist nur über die Kommandozeile möglich (vgl. pruefstelle create-user --help).

Nutzer:innen anlegen/ändern

Nutzer:innenaccounts lassen sich über die admin/user-Endpunkte anlegen/ändern.

Kategorien

Standardkategorien anlegen lassen

Mit pruefstelle populate können die erforderlichen und Standard-Kategorien angelegt werden.

Kategorien ändern/anlegen

Kategorien lassen sich über die admin/category-Endpunkte anlegen/ändern

Was ist unter welcher URL?

Wurde nichts geändert, ist prüfstelle nun unter http://localhost:3000 zu erreichen, die API unter http://localhost:8000 (API-Dokumentation unter: http://localhost:8000/docs).

API-Client für Frontend automatisch generieren

Werden Anpassungen am Backend vorgenommen, muss ggf. der Frontend-Client aktualisiert werden. Es ist sinnvoll, die für das Frontend irrelevanten Adminrouten vorab auszukommentieren (unter backend/pruefstelle/routes/__init__.py).

Dazu ist unter http://localhost:8000/openapi.json die automatisch erzeugte API-Spezifikation verfügbar. Mit dieser kann per npx swagger-typescript-api -p openapi.json -o ./src --unwrap-response-data --single-http-client --modular ein Client erzeugt werden.

Nun bitte die in den Dateien in frontend/lib/api dokumentierten Änderungen vornehmen und die dort vorhandenen Dateien durch die generierten ersetzen.

Einschränkungen

prüfstelle hat einen begrenzten Einsatzzweck. Ziel ist nicht die Bewertung von Verfahren zur automatischen Klassifizierung ("Künstliche Intelligenz") an sich.

Vielmehr kann mit prüfstelle aus der Perspektive ausgewählter Beispielfälle exploriert werden, unter welchen Weiterverarbeitungsbedingungen was wie gut funktioniert. Der Blick geht dabei vom Besonderen auf das Allgemeine, was eine Verallgemeinerung nur unter bestimmten Bedingungen erlaubt. Statt also zu fragen "was kann die Maschine?" ist die Frageperspektive hier: "Wie gut funktioniert das für mein Archivgut?".

Viele Hilfstexte helfen dabei, sich automatischen Klassifizieren auch ohne Vorwissen zu nähern und so mithilfe von prüfstelle Einsatzzwecke in einer kontrollierten Umgebung zu erproben.

Weitere Einschränkungen

  • Im jetzigen Zustand ist Prüfstelle nur nutzbar, wenn Zugriff auf interne Services besteht; Hinweise auf zu ersetzende Elemente bei Einsatz mit anderen Services geben die Dateien in backend/settings/
  • Die vorhandene Authentifizierung ist dazu gedacht, mehrere Bewertungen durch verschiedene Personen zu ermöglichen und dabei möglichst komfortabel zu sein. Sie ist nicht auf Sicherheit ausgelegt. Es ist keine gute Idee, Prüfstelle ohne weitere Maßnahmen außerhalb eines gesicherten, internen Netzes zu betreiben.
  • Die Datenbankabfragen sind nicht optimiert.