aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/eu
Commit message (Collapse)AuthorAgeFilesLines
* Support the digital BGBl format and bill drafts as inputs.Matthias Andreas Benkard2026-07-139-70/+481
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | 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
* Implement the synopsis pipeline for amendment acts.Matthias Andreas Benkard2026-07-1324-35/+3187
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | 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
* Configure Tika correctly.Matthias Andreas Benkard2020-12-061-6/+47
| | | | | | | | | With the new configuration, Tika can now extract text from PDFs and XML documents. Also configures logging for the application. Change-Id: I7a89c2b232ed4e220665dd335a5f5a0cc3ef2994
* Add Apache Tika, remove iText7.Matthias Andreas Benkard2020-11-231-6/+23
| | | | Change-Id: I9736779cf57050a1dfd43d18625eb464a7179a9f
* Define CLI arguments.Matthias Andreas Benkard2020-11-221-1/+13
| | | | Change-Id: I37d6cbb000df63013277fe4628cdb6570d68101a
* Project skeletonMatthias Andreas Benkard2020-11-221-0/+20
Change-Id: I5609adfca13ffad643a3db93e848fc01636b066a