Files
docu_build/doc/lib_skripte.md
T
Michael StanglandClaude Opus 4.8 e7aa3b4e4b feat: Fortna-Extraktion nach chapters/ + Sphinx-PDF-Build
Skripte zum Befuellen der Kapitelstruktur aus dem Fortna-Rohmaterial und
Aufbau eines vollstaendigen Sphinx/LaTeX-Builds (nur Code/Config/Doku,
generierte RST/Bilder/PDFs und Rohmaterial via .gitignore ausgeschlossen).

- lib/fortna_inventory.py: Rohmaterial scannen, Sprache+Zielkapitel+Aktion
  zuordnen, results/fortna_inventory.json schreiben
- lib/fortna_convert_chapters.py: 5 Hauptanleitungen volltextig (Text+Bilder)
  konvertieren, Verzeichnislisten (index.de.rst) fuer uebrige Kapitel
- lib/fortna_init_project.py: projekte/fortna/ (anlage.json, overrides, images)
- lib/build_index.py: index.rst mit toctrees aus chapters/**/*.de.rst generieren
- lib/extract_products.py: Symbolfont-Zeichen (PUA) auf Unicode mappen (clean_pua)
- conf.py: Sphinx-Build (lualatex, babel statt polyglossia, iconpackage=none)
- bin/: .bat/.sh-Wrapper fuer alle Skripte + build_pdf
- doc/: Konzept-Plan (plan_fortna_extraktion.md) und lib-Skript-Uebersicht
- requirements.txt: Sphinx + myst-parser ergaenzt

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-09-23 13:23:32 +02:00

4.0 KiB
Raw Blame History

Skripte in lib/

Übersicht über die Python-Hilfsskripte zur Datenaufbereitung (Excel/PDF/Word -> JSON/CSV/RST). Alle Skripte werden über bin/*.bat bzw. bin/*.sh aufgerufen und nutzen die Umgebungsvariablen aus bin/setenv.* (PROJECT, PV_EXAMPLES, PV_DATA, ...).

jsonFromXlsx.py

Baut aus der Positionsspalte einer Excel-Stückliste (Stk.-Liste SOLL / Stk.-Liste IST) eine hierarchische JSON-Baumstruktur. Positionspfade wie 10/5/1 bestimmen die Schachtelung, als Schlüssel dient die Teilenummer (bei Duplikaten ergänzt um Bezeichnung). Sonderfälle:

  • Längenabhängige Teile (LAENGENABHAENGIG-Liste, z. B. Kettenprofile): Menge wird als laenge aufsummiert statt gezählt.
  • 9-stellige Sivas-Nummern: doppelte Vorkommen werden zu {"anzahl": n, "beschreibung": ...} aggregiert.
python jsonFromXlsx.py --filename Fortna --tab soll
python jsonFromXlsx.py --all

Eingabe: examples/*.xlsx · Ausgabe: results/<name>_<tab>.json

extract_ids.py

Liest die von jsonFromXlsx.py erzeugten JSON-Bäume und sammelt 9-stellige Sivas-Nummern, die genau eine Ebene über den Blättern liegen (d. h. Baugruppen, deren Kinder alle Blätter sind). Kann Ergebnisse mehrerer Projekte zu einer Summary zusammenfassen.

python extract_ids.py --filename KA135776
python extract_ids.py --all --sum2json
python extract_ids.py --all --sum2txt

Eingabe: results/*_<tab>.json · Ausgabe: results/<name>_ids_<tab>.txt bzw. results/summary_ids_<tab>.{json,txt}

project_from_xlsx.py

Durchsucht rekursiv Unterordner in PV_EXAMPLES, liest je Ordner die erste .xlsx aus dem Reiter Stk.-Liste IST (Position/Teilenummer/Bezeichnung/Menge) und filtert auf Positionspfade mit 3 oder 4 Hierarchieebenen. Optional werden pro Ordner JSON/CSV/XLSX-Ergebnisdateien erzeugt; die XLSX-Variante aggregiert Mengen je Teilenummer und markiert bekannte Produktnummern aus cfg/product_numbers.cfg.

python project_from_xlsx.py --example-dir KA135776 --2csv
python project_from_xlsx.py --2json --2xlsx

extract_products.py

Extrahiert Bilder und Fließtext aus Produktprogramm-PDFs (data/Produktprogramm/*.pdf) mittels PyMuPDF. Bilder werden nach Zielordner (Omniflo/ILS/CPC/Gerüst/Trolley, siehe PDF_TARGETS) sortiert und per MD5 dedupliziert. Text wird anhand von Schriftgröße, Positions- und Nummerierungsheuristiken (inkl. TOC-Abgleich) in .de.rst-Dateien mit Überschriftenhierarchie umgewandelt.

python extract_products.py --data-dir data

Ausgabe: data/Produktprogramm/images/<ziel>/ und data/Produktprogramm/<pdf-name>.de.rst

collect_partnumbers.py

Sammelt 9-stellige Teilenummern aus den von extract_products.py erzeugten RST-Dateien, inklusive Bereichsnotation (834372007-011) und OCR-bedingt verklebter Zahlen. Gleicht die Nummern gegen eine Excel-Stückliste (data/KA*.xlsx, Reiter Stk.-Liste SOLL) ab und schreibt eine CSV mit Fundstelle, Kapitel und Bezeichnung.

python collect_partnumbers.py --data-dir data

Ausgabe: data/Produktprogramm/teilenummern.csv

convert_to_rst.py

Konvertiert Word-Dokumente (.docx, via mammoth) und Word-erstellte PDFs (via pdfminer, erkannt über PDF-Metadaten Creator/Producer) nach .rst. Ordnet Quelldateien anhand des Dateinamens automatisch einem Zielkapitel unter chapters/ zu (CHAPTER_MAPPING), erkennt benutzerdefinierte Word-Formatvorlagen (Ü1-Ü4 etc.) als Überschriftenebenen und speichert eingebettete Bilder neben der Ziel-RST.

python convert_to_rst.py <input_dir> chapters --dry-run
python convert_to_rst.py <input_dir> chapters --lang de

Typischer Ablauf

  1. jsonFromXlsx.py --all – Stücklisten als JSON-Bäume aufbereiten
  2. extract_ids.py --all --sum2json – Sivas-Nummern projektübergreifend sammeln
  3. extract_products.py – Produktprogramm-PDFs in Bilder + RST zerlegen
  4. collect_partnumbers.py – Teilenummern aus den RSTs mit der Stückliste abgleichen
  5. convert_to_rst.py – vorhandene Word/PDF-Dokumentation in die Kapitelstruktur überführen