19. MÄRZ 2022 / CODE
In der juristischen Arbeit verwenden wir gleichbleibende Zitierweisen von Bundesgerichtsentscheiden, sonstigen Entscheiden und Rechtsnormen. Was für Jurist:innen problemlos und schnell erkennbar ist, ist für Maschinen aber schwieriger abzuleiten. Eine Möglichkeit, wie Maschinen auch an diese Information kommen sei hier vorgestellt: Sogenannte Reguläre Ausdrücke (Regular Espressions, oder kurz: Regex).
Ein regulärer Ausdruck (kurz Regex oder auch RegExp für Regular Expressions) ist eine Zeichenfolge aus regulären Werten, die als Muster dient, um bestimmte Zeichenfolgen zu erkennen. Sie können in verschiedensten Programmiersprachen verwendet werden und dienen oft der Suche, oder auch der Ersetzung von Zeichenfolgen. Regex ist keine neue Technologie und findet in unterschiedlichsten Situationen Anwendung. Gewisse Suchmaschinen unterstützen Regex sogar bei der Durchsuche des Webs. Doch warum sind Regex auch für die juristisch-technologische Arbeit interessant? Eine für Jurist:innen schnell erkennbare Zeichenfolge ist bspw. die Angabe einer Gesetzesnorm: Art. 13 Abs. 1 BV. Der Aufbau ist immer gleich, so bleiben die "Bausteine" Art. und Abs. bspw. immer gleich und nur die Zahlen verändertn sich. Im Bundesrecht beginnen Gesetzesartikel also jeweils mit einem Art., gefolgt von einer Zahl (und evtl. einem oder mehreren Buchstaben: Bspw. a oder auch bis). Es lässt sich relativ schnell zusammenfassen, wie auf eine Rechtsnorm verwiesen wird. Auch das kantonale Recht folgt einer bestimmten, beinahe identischen Form. Einer Maschine könnte man dieses System somit "beibringen": Wenn ein Art. von einer Nummer gefolgt wird und mit einer Gesetzesabkürzung endet, handelt es sich um den Verweis auf eine Rechtsnorm. Und genau dafür können Regex verwendet werden, sodass auch eine Maschine aus einem Fliesstext ableiten kann, auf welche Normen oder Entscheide verwiesen wird.
Wie oben bereits ausgeführt können Regex in verschiedenen Programmiersprachen verwendet werden, man spricht von verschiedenen Flavors. Als ursprünglicher Webentwickler verwende ich den ECMAScript (JavaScript) Flavor.
Ich möchte an dieser Stelle nicht auf sämtliche Möglichkeiten von Regex hinweisen, sondern an einem simplen Beispiel arbeiten. Für eine ausführliche Dokumentation aller Möglichkeiten mit Regex wird weiter unten auf die MDN-Docs verlinkt.
Ein vielleicht noch enger umgrenzteres Beispiel als die oben vorgestellte Artikel-Erkennung sind Bundesgerichtsentscheide, denn bei Gesetzesnormen sind auch Variationen wie Ziffern, Buchstaben usw. zu beachten.
Nachfolgend soll der Einfachheit halber somit die kürzeste Regex als Beispiel genommen werden, nämlich nicht publizierte Bundesgerichtsentscheide (Geschäftsnummer).
An dieser stelle verweise ich gerne auf meine open-source Scripts auf GitHub hin, die Regex für Normen und Bundesgerichtsentscheide ind DE, FR und IT enthalten: iusable_Regex auf GitHub.
Die Geschäftsnummer eines Bundesgerichtsentscheides baut sich ganz einfach auf: 5A_1000/2020
Beispiel | Zu erkennendes Merkmal |
---|---|
5 | Nummer des Departements |
A | Buchstabe für die Verfahren |
1000/2020 | Fortlaufende Nummerierung |
Die hierfür verwendete Regex möchte ich an dieser Stelle etwas genauer untersuchen. Die finale Regex ist im folgenden Fenster dargestellt. Auf die einzelnen Bauteile kann geklickt werden, um eine kurze Erklärung anzuzeigen.
/(\d+)([A-Z])_(\d+\/\d+)/g
Die Klammern sind sogenannte Gruppen und werden dann benötigt, wenn aus dem gefundenen Element Teilinformationen genommen werden wollen. Im vorliegenden Fall gäbe die Regex ohne Gruppen als Resultat einfach die Zeichenfolge 5A_1000/2020 wieder. Mit den Gruppen hingegen kann jedes der oben in der Tabelle genannten Merkmale identifiziert werden. Die Schrägstriche zu Beginn und Ende der Regex markieren den Start und das Ende. Das "g" nach dem Schluss-Schrägstrich bedeutet, dass es sich um eine globale Suche handeln soll (die Suche nach einem Treffer also fortgesetzt wird). Für eine genaue Beschreibung aller möglichen Zeichenklassen empfehle ich die mdn web docs über RegExp von Mozilla.
Für den Menschen ist eine Aufzählung leicht zu erkennen. Dass Art. 1 und 2 StGB eben genau Art. 1 und Art. 2 desselben Gesetzes meint, ist für eine Maschine allerdings nicht mit einem Regex zu erkennen. Stattdessen müsste die Aufzählung auch in die Regex genommen werden. Eine Aufzählung kann aber belliebig lange sein und unter Umständen auch verschiedene Bindewörter, Absätze, Ziffern usw. verwenden. Hierfür eine Regex zu formulieren wäre äusserst zeitintensiv und ob wirklich sämtliche Möglichkeiten abgedeckt werden könnten wage ich zu bezweifeln.
Ein denkbarer Ansatz wäre der Einsatz einer Künstlichen Intelligenz, um genau zu sein eines sogenannten NER (Named-Entity Recognition) Models.
Mit diesen Modellen können bspw. in Fliesstexten Personen, Firmennamen oder auch andere Informationen wie Ortschaften erkannt werden.
Diesem Ansatz werde ich in Zukunft nachgehen und erhoffe mir damit u.U. noch bessere Resultate erreichen zu können.
Selbstverständlich gäbe es dazu einen Follow-Up Blogpost 😉
NER für Rechtsdokumente wurde in Deutschland übrigens auch bereits umgesetzt von E. Leitner, G. Rehm und J. Moreno-Schneider in ihrem Paper "Fine-Grained Named Entity Recognition in Legal Documents": DOI https://doi.org/10.1007/978-3-030-33220-4_20