From 870cdc871e34b19bcc6797929bc6453af1ab32d3 Mon Sep 17 00:00:00 2001 From: Benjamin Admin Date: Mon, 22 Jun 2026 23:34:11 +0200 Subject: [PATCH] fix(embedding): kurze Legal-Docs behalten Sektions-Prefix (chunk_text_legal) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit chunk_text_legal hatte einen Early-Return fuer text <= chunk_size, der den [§ X]-Prefix uebersprang -> chunk_text_legal_structured konnte section/article nicht extrahieren -> article="" -> (a) article_label fiel auf "BDSG" zurueck (kein §), (b) deterministische Point-ID kollidierte (alle article="" -> gleiche ID) -> ~die Haelfte kurzer §§ ueberschrieben sich. Fix: Early-Return traegt den erkannten Sektions-Header als Prefix. Belegt am BDSG-§-Ingest: 44->86 distinkte §§, §38 sauber "BDSG § 38". Wirkt nur auf KUENFTIGE Ingests (kein Re-Chunk). Co-Authored-By: Claude Opus 4.7 --- embedding-service/main.py | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/embedding-service/main.py b/embedding-service/main.py index 4220f8b..7c02227 100644 --- a/embedding-service/main.py +++ b/embedding-service/main.py @@ -483,7 +483,13 @@ def chunk_text_legal(text: str, chunk_size: int, overlap: int) -> List[str]: Works for both German (DSGVO, BGB, AI Act DE) and English (NIST, SLSA, CRA EN) texts. """ if not text or len(text) <= chunk_size: - return [text.strip()] if text and text.strip() else [] + body = (text or "").strip() + if not body: + return [] + # Kurze Dokumente (ein §/Artikel) trotzdem mit Sektions-Prefix versehen, damit + # chunk_text_legal_structured Section/Artikel extrahieren kann (sonst article=""). + hdr = _extract_section_header(body.split("\n", 1)[0]) + return [f"[{hdr[:120]}] {body}"] if hdr else [body] # --- Phase 1: Split into sections by legal headers --- lines = text.split('\n')