From 182bb27c536edaedc990b38931508efeeed8039b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Dieter=20Schl=C3=BCter?= Date: Fri, 2 Oct 2026 22:42:37 +0200 Subject: [PATCH] =?UTF-8?q?Doku:=20Testdauer,=20erprobte=20Gedichtb=C3=A4n?= =?UTF-8?q?de,=20CLAUDE.md=20(OCR-Weg,=20pymupdf4llm=201.28,=20Output/)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: Claude Opus 5.5 --- CLAUDE.md | 16 ++++++++++++---- README.md | 7 ++++--- 2 files changed, 16 insertions(+), 7 deletions(-) diff --git a/CLAUDE.md b/CLAUDE.md index c968e60..8e3646c 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -5,25 +5,33 @@ Aktuelles Programm: `pdf2md.py` (Einzeldatei; Name bleibt fest, keine Versionsnu ## Befehle -- Tests: `python3 -m pytest` (Fixtures werden synthetisch erzeugt; OCR braucht `tesseract-ocr-deu`) +- Tests: `python3 -m pytest` (ca. 80 s; Fixtures werden synthetisch erzeugt; OCR braucht `tesseract-ocr-deu`) - Lint: `python3 -m ruff check pdf2md.py tests/` - Echttest: `python3 pdf2md.py --epub Operation_Ljutsch_Band_1_-_Reinhard_Otto_Kranz.pdf /band1.md` ## Konventionen - Hilfetexte, Meldungen, Kommentare und Docstrings auf Deutsch (wie v4); Bezeichner Englisch. -- Echttests nie nach `Fertig/` schreiben (dort liegen die Ergebnisse des Nutzers). +- Echttests ins Scratchpad schreiben, nicht nach `Output/` oder `Fertig/` (dort liegen die + Ergebnisse des Nutzers); Probeergebnisse zum Ansehen nur auf Wunsch nach `Output/Probe/`. - PDFs/EPUBs/Bilder sind per `.gitignore` ausgeschlossen – keine Binärdateien committen. - `pdf2md.py` patcht drei Funktionen in `pymupdf4llm.helpers.document_layout` (`get_styled_text`, `text_to_md`, `create_list_item_levels` – letztere nur, um pro Seite die Zeilengeometrie zu merken). Nach einem pymupdf4llm-Update prüfen, ob `tests/test_normalize.py::test_pymupdf4llm_patch_keeps_compound_hyphen` und `tests/test_verbatim.py` noch grün sind. +- Mit pymupdf4llm 1.28.2 getestet (Bildtext-Format ``, OCR-Text + wird über unsichtbaren Text erkannt, nicht über `full_ocred`). +- OCR (`convert_pages`, Lauf `RUN_OCR`): vorhandene unsichtbare Textebenen werden vorher in einer + Kopie entfernt (`drop_invisible_text`), sonst behält pymupdf4llm fremde OCR-Ebenen. + Mit `--keep-lines` werden Scanseiten an pymupdf4llm vorbei direkt aus Tesseract gelesen + (`ocr_lines_md`); Gedichttitel kommen dort aus der PDF-Gliederung. - Zwischen dem Patch (`lines_to_md`) und `normalize_markdown` laufen interne Markierungen aus dem Private-Use-Bereich (`HARD_BREAK`, `BLOCK_END`, `PARAGRAPH_END`, `STANZA_BREAK`, U+E002–U+E005); sie dürfen nie in der Ausgabe landen. - Ausgabe-Markdown beginnt mit einem YAML-Kopf, den `make_frontmatter`/`split_frontmatter` selbst schreiben und lesen; pandoc bekommt nur den Text (`markdown-yaml_metadata_block`), weil `---`-Zeilen im Buchtext sonst als YAML gelesen würden. -- Regressionsprüfung bei Änderungen am Umbruch: Band 1/2 vorher/nachher diffen; Fließtext - darf sich nur an echten Absatz- oder Zeilenwechseln der PDF ändern. +- Regressionsprüfung bei Änderungen am Umbruch: Probekorpus (Band 1/2, Zensur-Report, Markdown + Guide, Register, Rust-Kochbuch, Kempis-Scan) gegen den letzten Commit diffen; Fließtext darf + sich nur an echten Absatz- oder Zeilenwechseln der PDF ändern. diff --git a/README.md b/README.md index 1605393..b43c926 100644 --- a/README.md +++ b/README.md @@ -6,8 +6,9 @@ für **digitale** PDFs (Textebene vorhanden) ebenso wie für **gescannte** PDFs per OCR) und für Scans, die bereits eine OCR-Ebene haben (z. B. von `ocrmypdf`). Entwickelt an *Operation Ljutsch* (Band 1 und 2), außerdem erprobt an einem deutschen -Sachbuch, einem englischen Handbuch, einem Mathematikbuch, einem Bericht mit Fußnoten und -einem englischen Scan von 1893 (Ergebnisse siehe [Grenzen](#grenzen)). +Sachbuch, einem englischen Handbuch, einem Mathematikbuch, einem Bericht mit Fußnoten, einem +englischen Scan von 1893 und zwei gescannten Gedichtbänden (Rilke in Antiqua, Löwenberg 1895 +in Fraktur; Ergebnisse siehe [Grenzen](#grenzen)). ## Installation (Ubuntu 24.04) @@ -115,7 +116,7 @@ python3 pdf2md.py --epub --ocr-language eng --ocr always scan.pdf scan.md # EP ## Tests ```bash -python3 -m pytest # ca. 45 s; OCR-/EPUB-Tests werden ohne Tesseract/pandoc übersprungen +python3 -m pytest # ca. 80 s; OCR-/EPUB-Tests werden ohne Tesseract/pandoc übersprungen ``` Die Test-PDFs (digital, gescannt, mit OCR-Ebene, gemischt, Fotoseite) werden zur Laufzeit