fix(impressum): Pflichtangaben-Beleg = exakter Treffer statt Textpassage
_match_value gibt genau den gematchten Bereich zurück (nur die E-Mail unter Email, nur die USt-IdNr, nur die Telefonnummer) — nicht mehr ein Fenster/den umgebenden Satz. Behebt die Wiederholung desselben Anfangssatzes bei Texten ohne Zeilenumbrüche (BMW = ein Block). Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
@@ -78,20 +78,12 @@ def _build_measure(label: str, norm: str) -> str:
|
||||
return msg
|
||||
|
||||
|
||||
def _line_of(text: str, start_pos: int, end_pos: int) -> str:
|
||||
"""Ein enger Ausschnitt um einen Regex-Treffer — der 'gefundene Wert' für die
|
||||
Pflichtangaben-Tabelle. Bevorzugt die Zeile; bei Texten ohne (genug)
|
||||
Zeilenumbrüche (z.B. BMW-Impressum als ein Block) ein Fenster um den Treffer,
|
||||
damit jede MC IHREN Beleg zeigt statt immer denselben Anfangssatz."""
|
||||
start = text.rfind("\n", 0, start_pos) + 1
|
||||
end = text.find("\n", end_pos)
|
||||
if end == -1:
|
||||
end = len(text)
|
||||
# Zeile zu lang (kein/seltener Umbruch) → enges Fenster zentriert am Treffer.
|
||||
if end - start > 160:
|
||||
start = max(start, start_pos - 70)
|
||||
end = min(end, end_pos + 70)
|
||||
return " ".join(text[start:end].split())[:160]
|
||||
def _match_value(text: str, start_pos: int, end_pos: int) -> str:
|
||||
"""Der reine Treffer-Wert (E-Mail, USt-IdNr, Telefonnummer …) — exakt der
|
||||
gematchte Bereich, NICHT die umgebende Textpassage. Whitespace normalisiert
|
||||
+ gekappt, damit die Pflichtangaben-Tabelle genau das zeigt, was erwartet
|
||||
wird (nur die Mail unter Email, nur die Anschrift unter Anschrift)."""
|
||||
return " ".join(text[start_pos:end_pos].split())[:120]
|
||||
|
||||
|
||||
def _coverage(mc, status: str, reason: str, found: str = "") -> McCoverage:
|
||||
@@ -163,7 +155,7 @@ class ImpressumAgent(BaseSpecialistAgent):
|
||||
if matched is not None:
|
||||
coverage.append(_coverage(
|
||||
mc, "ok", "Pattern-Treffer",
|
||||
found=_line_of(text, matched.start(), matched.end()),
|
||||
found=_match_value(text, matched.start(), matched.end()),
|
||||
))
|
||||
continue
|
||||
if mc.optional:
|
||||
|
||||
Reference in New Issue
Block a user