# 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/_.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/*_.json` · Ausgabe: `results/_ids_.txt` bzw. `results/summary_ids_.{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//` und `data/Produktprogramm/.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 chapters --dry-run python convert_to_rst.py 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