Session achieved: structural metadata end-to-end (D2-D4), overlap bug fix, HTML stripping with charset detection, 430/436 docs re-ingested. Remaining: ~40 EU Official Journal PDFs need HTML from EUR-Lex (broken multi-column PDF extraction), 3 missing EDPB PDFs, 1 corrupt PDF. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
5.1 KiB
Session-Uebergabe: Strukturelles Chunking + Re-Ingestion
Datum: 2026-05-02 Uebergeben von: Pipeline-Session (01.05 - 02.05.2026)
Was wurde erledigt
| Block | Was | Status |
|---|---|---|
| D2 | RAG-Service speichert section/section_title/paragraph/paragraph_num/page in Qdrant | ✅ |
| D3 | Control Generator liest strukturelle Metadaten, page in source_citation | ✅ |
| D4 | BGB § 312k Validierung — Overlap-Bug gefunden + gefixt | ✅ |
| D5 | 430/436 Dokumente re-ingestiert mit neuem Chunking | ✅ |
| HTML-Fix | HTML-Stripping + Charset-Erkennung (ISO-8859-1) | ✅ |
| pdfplumber | Als PDF-Backend hinzugefuegt, PDF_EXTRACTION_BACKEND=auto | ✅ |
Ergebnisse der Re-Ingestion
| Dokumenttyp | Section-Rate | Anmerkung |
|---|---|---|
| DE Gesetze (TXT) | 95-100% | Exzellent |
| HTML (gesetze-im-internet.de) | 97.6% | War 0%, nach Fix perfekt |
| EDPB/DSK Leitlinien (PDF) | 80-98% | Gut |
| EU-Amtsblatt-PDFs (AI Act, CRA, NIS2, DSGVO) | 13-35% | OFFEN — siehe unten |
| Tech-Specs (JSON, MD) | 0% | Erwartet, keine §/Artikel |
Gesamt: 69.888 Chunks in 6 Collections, 430 von 436 Dokumenten.
Offene Probleme
1. EU-Amtsblatt-PDFs (~40 Dokumente, 13-35% Section-Rate)
Ursache: EU Official Journal PDFs verwenden mehrspaltige Layouts. Sowohl pypdf als auch pdfplumber extrahieren gebrochene Woerter ("Ar tik el" statt "Artikel"). Kein PDF-Extractor loest das zuverlaessig.
Empfohlene Loesung: EU-Verordnungen als HTML von EUR-Lex herunterladen statt PDF. EUR-Lex bietet alle Verordnungen als sauberes HTML. Unser HTML-Stripping + Legal Chunker funktioniert perfekt dafuer.
Betroffene Dokumente (Beispiele):
- ai_act_2024_1689.pdf (33%) → HTML von EUR-Lex
- cra_2024_2847.pdf (34%) → HTML von EUR-Lex
- nis2_2022_2555.pdf (13%) → HTML von EUR-Lex
- dsgvo_2016_679.pdf (0%) → HTML von EUR-Lex
- amlr_2024_1624.pdf (12%) → HTML von EUR-Lex
- Alle Dateien mit
_20XX_XXXX.pdfPattern im bp_compliance_ce Collection
2. 3 komplett fehlende PDFs
Diese wurden NIE erfolgreich in Qdrant gespeichert:
edpb_controller_processor_07_2020.pdf— KEINE CHUNKSedpb_gl_7_2020.pdf— KEINE CHUNKSedpb_rtbf_05_2019.pdf— KEINE CHUNKS
Ursache: Timeout bei Upload (selbst mit 3600s). Die PDFs sind gross und die Embedding-Generierung dauert zu lange.
Loesung: Manuell aufteilen (Split in Abschnitte) oder als kleinere Teile hochladen.
3. 1 korrupte PDF
dsk_kpnr_3.pdf— 500 Internal Server Error bei Extraktion
Commits dieser Session
93099b2 feat(pipeline): structural metadata end-to-end (Blocks D2-D4)
ddad58f fix(rag): strip HTML tags before chunking + D5 re-ingestion scripts
a459636 fix(rag): HTML charset detection + opening block tag newlines
75dda9a feat(embedding): add pdfplumber backend for multi-column PDF extraction
41183ff fix(docker): set PDF_EXTRACTION_BACKEND to auto (was pymupdf)
Kritische Dateien
| Datei | Aenderung |
|---|---|
embedding-service/main.py |
Overlap-Bug-Fix, pdfplumber-Backend |
rag-service/api/documents.py |
D2 Payload-Felder + HTML-Erkennung |
rag-service/html_utils.py |
HTML-Stripping + Charset-Erkennung (NEU) |
rag-service/embedding_client.py |
ChunkResult Dataclass (D2) |
control-pipeline/services/rag_client.py |
page-Feld in RAGSearchResult (D3) |
control-pipeline/services/control_generator.py |
section-Prioritaet + page (D3) |
control-pipeline/scripts/reingest_d5.py |
Re-Ingestion Script (NEU) |
control-pipeline/scripts/reingest_d5_config.py |
Config + Helpers (NEU) |
docker-compose.yml |
PDF_EXTRACTION_BACKEND=auto |
Naechste Schritte (Block E)
E1: EU-Verordnungen als HTML von EUR-Lex ersetzen
- Liste aller EU-Amtsblatt-PDFs mit <50% Section-Rate erstellen
- EUR-Lex HTML-Versionen herunterladen (CELEX-Nummern sind in den Qdrant-Payloads)
- Alte PDF-Chunks loeschen, HTML-Versionen hochladen
- Qualitaetspruefung → erwartete Section-Rate >90%
E2: 3 fehlende EDPB-PDFs aufteilen + hochladen
E3: Fehlende Gesetze ingestieren (BGB aktuell, ArbZG, MuSchG, etc.)
Siehe Masterplan Block E in jazzy-snacking-creek.md
DB-Stand
| Collection | Chunks | Dokumente |
|---|---|---|
| bp_compliance_ce | ~18.000 | ~60 |
| bp_compliance_gesetze | ~31.500 | ~98 |
| bp_compliance_datenschutz | ~15.000 | ~107 |
| bp_dsfa_corpus | ~3.500 | ~30 |
| bp_legal_templates | ~2.000 | ~100 |
| Gesamt | ~70.000 | ~430 |
Tests
# Embedding-Service (58 Tests)
cd embedding-service && python3 -m pytest test_chunking.py test_d4_bgb.py -v
# RAG-Service (32 Tests)
cd rag-service && PYTHONPATH=. python3 -m pytest tests/ -v
# Control-Pipeline (387 Tests)
PYTHONPATH=control-pipeline python3 -m pytest control-pipeline/tests/ -v
Memory-Dateien (lesen!)
Alle unter /Users/benjaminadmin/.claude/projects/-Users-benjaminadmin-Projekte-breakpilot-core/memory/:
MEMORY.md— Indexproject_structural_chunking.md— Architektur-Entscheidungfeedback_legal_source_licensing.md— Rule 1/2/3project_control_pipeline_masterplan.md— Gesamtplan A-G