fix: Abbildungs-Gegenprobe ohne kopierbares Beispiel, Kennungen vereinheitlicht

- Prompt-Beispiel '1 → 2: 3' durch Schema 'A → B: Wert' ersetzt: eine Lesung hatte
  nur die Beispielzeile übernommen statt aller fünf Pfeile; alle Datenpunkte verlangt
- canonical_figure_id: '1' und 'Abbildung 1' gelten als dieselbe Abbildung – beim
  Vergleich, in der Pipeline und im Report (Formfehler im zweiten Testlauf)

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
Dieter Schlüter 2026-09-17 18:09:52 +02:00
commit 89b61d8c62
3 changed files with 35 additions and 9 deletions

View file

@ -5,7 +5,7 @@ Deine Übertragung wird ohne LLM mit einer zweiten, unabhängigen Übertragung d
Für jede Abbildung, in der Reihenfolge ihrer Kennung („Abbildung 1“, „Abbildung 2“, …), ein Eintrag in figures:
- id: die Kennung genau wie angegeben.
- shows: was die Abbildung zeigt, in einem Satz (z. B. „gerichteter Graph mit 4 Knoten und 5 bewerteten Pfeilen“); hier ist Platz für Lage und Aufbau.
- transcription: NUR die Daten, eine Zeile je Datenpunkt, jede Zahl genau einmal – bei Graphen je Pfeil „Start → Ziel: Bewertung“ (z. B. „1 → 2: 3“), bei Tabellen je Zelle „Zeile / Spalte: Wert“, bei Diagrammen je Punkt „x: y“. Keine Aufzählung von Knoten, keine Lagebeschreibung, keine Wiederholung – das gehört nach shows. Achte bei Pfeilen genau auf die Richtung (wo sitzt die Spitze?).
- transcription: NUR die Daten, eine Zeile je Datenpunkt, jede Zahl genau einmal, ALLE Datenpunkte (ein Graph mit fünf Pfeilen ergibt fünf Zeilen) – bei Graphen je Pfeil „Start → Ziel: Bewertung“ (Schema „A → B: Wert“ mit den Knotennamen und Bewertungen aus dem Bild), bei Tabellen je Zelle „Zeile / Spalte: Wert“, bei Diagrammen je Punkt „x: y“. Keine Aufzählung von Knoten, keine Lagebeschreibung, keine Wiederholung – das gehört nach shows. Achte bei Pfeilen genau auf die Richtung (wo sitzt die Spitze?).
- uncertain: jede Stelle, die du nicht sicher lesen kannst (verdeckt, unscharf, mehrdeutige Richtung oder Zuordnung einer Zahl zu einem Pfeil). Leer nur, wenn alles eindeutig ist.
Ergänze nichts, was nicht zu sehen ist, und rechne nichts aus.

View file

@ -24,6 +24,6 @@ GEMEINSAMER RAHMEN (gilt für alle vier Stufen dieser Pipeline: Verstehen, Model
- ignored_numbers ist für Aufgabennummern („3.8“), Zahlen in Einheiten („in 1000 Stunden“), Jahreszahlen, Seitenzahlen, Nummern von Sätzen. Immer mit Grund.
Eine Zahl, die weder im einen noch im anderen steht, gilt als übersehen. [→ UNCAPTURED_NUMBERS]
4. ABBILDUNGEN: Liegen der Aufgabe Abbildungen bei (im Text als „[Abbildung N]“, die Bilder folgen der Nachricht), trage je Abbildung einen Eintrag in figures ein: id genau wie im Text, shows in einem Satz, transcription mit ALLEN Daten, NUR die Daten, eine Zeile je Datenpunkt, jede Zahl genau einmal – bei Graphen je Pfeil „Start → Ziel: Bewertung“ (z. B. „1 → 2: 3“), bei Tabellen je Zelle „Zeile / Spalte: Wert“, bei Diagrammen je Punkt „x: y“. Keine Aufzählung von Knoten, keine Lagebeschreibung, keine Wiederholung – das gehört nach shows. Achte auf die Richtung der Pfeilspitze., uncertain für alles, was nicht sicher lesbar ist. Die Zahlen der Abbildung gehören außerdem in facts, mit quote „Abbildung N: …“. Eine zweite, unabhängige Übertragung wird Zahl für Zahl mit deiner verglichen. [→ check_figure_readings]
4. ABBILDUNGEN: Liegen der Aufgabe Abbildungen bei (im Text als „[Abbildung N]“, die Bilder folgen der Nachricht), trage je Abbildung einen Eintrag in figures ein: id genau wie im Text, shows in einem Satz, transcription mit ALLEN Daten, NUR die Daten, eine Zeile je Datenpunkt, jede Zahl genau einmal, ALLE Datenpunkte (ein Graph mit fünf Pfeilen ergibt fünf Zeilen) – bei Graphen je Pfeil „Start → Ziel: Bewertung“ (Schema „A → B: Wert“ mit den Knotennamen und Bewertungen aus dem Bild), bei Tabellen je Zelle „Zeile / Spalte: Wert“, bei Diagrammen je Punkt „x: y“. Keine Aufzählung von Knoten, keine Lagebeschreibung, keine Wiederholung – das gehört nach shows. Achte auf die Richtung der Pfeilspitze., uncertain für alles, was nicht sicher lesbar ist. Die Zahlen der Abbildung gehören außerdem in facts, mit quote „Abbildung N: …“. Eine zweite, unabhängige Übertragung wird Zahl für Zahl mit deiner verglichen. [→ check_figure_readings]
5. Erfinde nichts. Was der Text nicht sagt, gehört nicht in facts – fehlende Angaben werden später als Annahme ausgewiesen, nicht hier geraten.

View file

@ -64,6 +64,16 @@ def split_figures(task: str, basis_dir: Path | str | None = None) -> Tuple[str,
return text, figures
def canonical_figure_id(kennung: str) -> str:
"""„1“, „Abb. 1“, „Abbildung 1“ → „Abbildung 1“ – beobachtet: eine Lesung schrieb nur „1“."""
nummer = re.search(r"\d+", kennung or "")
return f"Abbildung {nummer.group(0)}" if nummer else (kennung or "").strip()
def normalize_figure_ids(transcriptions: List[FigureTranscription]) -> List[FigureTranscription]:
return [t.model_copy(update={"id": canonical_figure_id(t.id)}) for t in transcriptions]
def image_parts(figures: List[FigureInput]) -> list:
"""Nachrichtenteile im OpenAI-Format: je Abbildung ihre Kennung als Text, dann das Bild als Data-URI."""
teile = []