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>
This commit is contained in:
co-authored by
Claude Opus 4.8
parent
eb9237217e
commit
e7aa3b4e4b
@@ -0,0 +1,99 @@
|
||||
# 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
|
||||
Reference in New Issue
Block a user