| Commit message (Collapse) | Author | Age | Files | Lines |
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Introduce the Gliederungsbaum into the model and support the structural
command families that were the bulk of the remaining unknowns:
- Gliederung gains a kennzahl; Gesetz carries the ordered list of
Gliederungseinheiten, which the loader now collects.
- New Stelle components Gliederungseinheit (Teil/Abschnitt/Unterabschnitt/
Anlage/…) and Absatzbezeichnung; StellenParser parses these plus
"Überschrift von <Gliederung>" and drops "Satzteil/Angabe vor Nummer N"
chapeau qualifiers.
- Gliederungs-Überschrift Neufassung/Streichung apply to the tree and
render as a "Geänderte Gliederungs-Überschriften" diff section;
Absatzbezeichnung-Streichung removes an Absatz number; Inhaltsübersicht
"Angabe(n) zu …" commands are recognized (applied via the existing TOC
path).
Reuses Neufassung/Aufhebung with structural Stellen rather than adding new
command types. Final UnbekannterBefehl counts: GEG 50->5, IfSG 11->3,
AGG 2->0 (§ 1 Alters->Lebensalters now applies), UWG 2->0.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Change-Id: I0cc91bfe65798140dd982b19f1884dfe60be87c4
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Extend the parser and applier for several command families that were
falling back to UnbekannterBefehl:
- Range/coordinated Aufhebung ("Die Nummern 1 bis 3 werden aufgehoben.",
"Die Absätze 4 und 5 werden aufgehoben.") via bis-range expansion in
StellenParser.parseMehrfach and ausStellen.
- Range renumbering without "zu den" and for Nummern/Buchstaben ("Die
bisherigen Nummern 4 bis 6 werden die Nummern 8 bis 10."); single
renumbering now also covers Nummer/Buchstabe and "Die bisherige".
- §-range Neufassung ("Die §§ 52 bis 56 werden wie folgt gefasst: …"),
splitting the quoted block at "§ N" boundaries.
- "Der Wortlaut wird Absatz N." — a new WortlautZuAbsatz command that
numbers the previously unnumbered body.
- Word-to-punctuation replacement ("… das Wort „oder" am Ende durch ein
Komma ersetzt") and comma+words insert/replace variants.
StellenParser gains plural component words (Absätze/Sätze/Nummern/
Buchstaben) and bis-range expansion. Cuts UnbekannterBefehl further:
GEG 36->21, IfSG 7->3.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Change-Id: I4972d4eb1d6062521a55710c1f23822e8e22b0c4
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Split BefehlErkenner into a single-command pass and a fallback that
composes Sammelbefehle from commands chained with "und"/", wird":
- Multi-pair replacement ("… A durch B und C durch D ersetzt") emits one
Ersetzung per pair, crossed with the (possibly coordinated) Stelle.
- Verbund splitter probes each "und"/", wird" boundary; when both halves
parse — trying the right clause as-is, capitalized, or with the left
clause's locative prefix — it folds them into one Sammelbefehl.
The single pass no longer short-circuits when a pattern matches but its
Stelle is unparseable, so the fallback still gets a chance. Add
"ein Komma eingefügt" and anchor-first insertion patterns the splitter
needs, and let StellenParser.parseMehrfach inherit the component type for
bare-number continuations ("Absatz 1 und 5").
Cuts UnbekannterBefehl counts: GEG 50->36, IfSG 11->7, AGG/UWG 2->1.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Change-Id: I8f76edd0c9ed6cf68c10c50f535a8182e13e378e
|
| |
|
|
|
|
|
|
|
|
|
|
| |
Add a Sammelbefehl command that applies one operation to several
"und"/"sowie"/comma-coordinated Stellen sharing a common prefix, and
resolve "Die bisherigen Absätze X bis Y werden zu den Absätzen X' bis Y'"
into descending single renumberings. Parsing gains
StellenParser.parseMehrfach; the applier folds sub-commands into one log
entry.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Change-Id: Iaa2c7161066d40d0605c00d3b6ca9a08696070e7
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
The Bundesgesetzblatt has been published digitally via recht.bund.de
since 2023 in a new single-column layout, and pending amendment acts
are only available as Referenten-/Regierungsentwuerfe or Bundestag
printed papers. Both now work as patch inputs:
* PDF extraction filters out small print by font size (two-pass
PDFTextStripper): in the new BGBl format, footnote blocks and
superscript footnote markers would otherwise land in the middle of
the statutory text, even inside quoted passages.
* TextBereiniger recognizes the new page headers (BGBl "Seite N von
M", draft page markers " - N - ", Bundestag printed-paper headers)
and joins markerless end-of-line hyphenation (BT-Drs PDFs break
words without a hyphen character; regular wraps carry a trailing
space, so its absence is the signal -- gated on the source using
the trailing-space convention at all, protecting hand-written
plain-text inputs). BMJV draft templates draw the hanging opening
quote after the paragraph marker ("(1) „" / "§ 19„"); this
inversion is repaired.
* Drafts embed the statutory text between a cover sheet and a
Begruendung section; article scanning now stops at the Begruendung
heading. Articles without numbered items (single-command articles
like ProdHaftG-RegE Artikel 2) are parsed from the preamble rest.
* Target-law matching is declension-tolerant ("Das Allgemeine
Gleichbehandlungsgesetz" matches "Allgemeines
Gleichbehandlungsgesetz") via rough word-stem comparison.
* New command form StrukturErsetzung ("§ 2 Absatz 2 wird durch die
folgenden Absätze 2 und 3 ersetzt"); "durch die folgende
Überschrift/den folgenden § N ersetzt" map to Neufassung; plural
insertions ("die folgenden Absätze 6 und 7"), triple-letter outline
markers (aaa), the compound punctuation replacement ("durch ein
Komma und die Wörter ... ersetzt"), and Inhaltsuebersicht-Angaben
inside a context frame are recognized.
End-to-end smoke tests cover the four new datasets: UWG (new BGBl
format, footnote-filter assertion), GEG 2023 ("Heizungsgesetz",
121 commands), AGG (BT-Drs draft against an unconsolidated base --
the first dataset with real diffs, spot-checked against the official
BMJV synopsis), and ProdHaftG (draft whose Artikel 1 is a replacement
law and only Artikel 2 amends the base).
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Change-Id: Id1b12bc0bee4178bd1a5c55b3a83f6e13944af69
|
|
|
Unit tests for the gii-norm loader, text cleanup, quote extraction,
command recognition (literal sentences from the sample amendment act),
sentence splitting, and command application on a synthetic mini law;
an HTML renderer test including escaping; and an end-to-end smoke test
on the IfSG sample data that skips itself when the (untracked) sample
files are absent. The README gains a German usage section.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Change-Id: I7f02ff349f9c3bd34fa90a2a84678b9e6fad697d
|