| Commit message (Collapse) | Author | Age | Files | Lines |
| |
|
|
|
|
|
|
|
|
|
|
|
|
| |
Gliederungs-Überschriften insertion/replacement
Fourth enablement wave: Anhänge/Anlagen resolve as ordinary norm targets with
nested Nummer/Buchstabe block resolution, InhaltsuebersichtAnwender applies
Angabe commands automatically, GliederungsUeberschriften handles inserting and
replacing structural headings, the law's own heading can be recast, and
FontgroessenFilter now determines body text per page instead of document-wide.
Sample data (UWG/AGG/ProdHaftG) now applies with 0 manual cases.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Change-Id: I1a76750afbecfa1aae734bcdabc91470a28420ca
|
| |
|
|
|
|
|
|
|
|
|
|
| |
blocks
Adds bisStelle to StrukturErsetzung for coordinated target ranges, recognizes
deletion/renumbering of whole structural units (paragraphs and Gliederung
entries), and handles insertion/replacement of multi-paragraph blocks split on
§-headings. Updates FASSUNGEN.txt accordingly.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Change-Id: I637cc5effbe32c094e62c070b63c470149a77c85
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
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
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Add the full vertical slice from input files to a two-column HTML
synopsis:
* gesetz, gesetz.gii: immutable law model (Gesetz/Norm/Absatz) and an
offline loader for the gii-norm XML format of gesetze-im-internet.de,
flattening DL enumerations, tables, and pre blocks.
* aenderung: amendment command model as a sealed interface with records
(Ersetzung, Neufassung, Einfuegung, Anfuegung, Aufhebung, Streichung,
Umnummerierung), including UnbekannterBefehl as the mandatory
fallback -- unrecognized commands are reported, never dropped.
* aenderung.parse: text extraction (PDFBox in content-stream order for
two-column BGBl PDFs, plain text as escape hatch), BGBl header and
hyphenation cleanup, quote extraction with placeholder substitution
(quoted blocks cannot confuse the command regexes; unbalanced quotes
-- which occur in real BGBl documents -- become warnings), outline
scanning with successor-validated markers (1., a), aa), aa1)), and
the command recognizer with context-frame stacking.
* anwendung: sequential command application with a per-command protocol
(ANGEWANDT / MANUELL_PRUEFEN plus reason), scope resolution down to
sentence/enumeration ranges via a German sentence splitter.
* synopse: norm pairing, word-level diff via java-diff-utils, and a
self-contained HTML renderer with a Manuell-pruefen section.
The CLI gains -o/--output, --vollstaendig, --artikel, --extract-only,
and hidden debug flags (--dump-gesetz, --dump-befehle).
On the IfSG sample (Drittes Bevoelkerungsschutzgesetz, BGBl. I 2020
S. 2397), 63 of 75 commands in Artikel 1 and 2 parse into typed
commands; the remainder are ranges and compound commands that are
deliberately out of scope for v1.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Change-Id: I93ef8ba300f1cac70916722f23c0cefc5f62da2b
|
| |
|
|
|
|
|
|
|
| |
With the new configuration, Tika can now extract text from PDFs and
XML documents.
Also configures logging for the application.
Change-Id: I7a89c2b232ed4e220665dd335a5f5a0cc3ef2994
|
| |
|
|
| |
Change-Id: I9736779cf57050a1dfd43d18625eb464a7179a9f
|
| |
|
|
| |
Change-Id: I704d78b7553f057f73e1387078623d8fe5d0b154
|
| |
|
|
| |
Change-Id: I37d6cbb000df63013277fe4628cdb6570d68101a
|
|
|
Change-Id: I5609adfca13ffad643a3db93e848fc01636b066a
|