Wie extrahiere ich Informationen aus meinem Dokument mit REGEX?
Praxisbeispiele
Im aktuellen Artikel demonstrieren wir Ihnen, wie Sie dank mehrelementigen regulären Ausdrücken in PaperOffice jegliche Daten aus dem Dokument extrahieren und als Verschlagwortung zum Dokument automatisch hinterlegen können.
Nachfolgend haben wir ein Musterdokument erstellt, welches über ein spezifisches Datum verfügt. In diesem Dokument handelt es sich um eine Rechnung. Das Datumsmuster auf unserem Dokument ist wird wie folgt formatiert:
Informationen automatisiert aus Rechnungen extrahieren
Monat, bestehend aus Buchstaben, jedoch wird der erste Buchstabe ist immer großgeschrieben, daraufhin folgt ein Leerzeichen, danach der Tag gefolgt von einem Komma, ein weiteres Leerzeichen und dann das Jahr.
Beispielsweise: Sep 20, 2019 oder Mär 05, 2022
Um dieses Datum zu extrahieren, können wir den folgenden regulären Ausdruck (REGEX) verwenden:
([A-Z][a-zä]{2})\s(0[1-9]|[12][0-9]|3[01]),\s(20\d{2})
Lassen Sie uns den Ausdruck in einzelne Gruppen aufschlüsseln. Diese Gruppen werden durch einfache Klammern () getrennt.
In der ersten Gruppe suchen wir nach den 3-Monatsbuchstaben: ([A-Z][a-zä]{2})
([A-Z][a-zä]{2})\s(0[1-9]|[12][0-9]|3[01]),\s(20\d{2})
Monatsangabe extrahieren
- [A-Z] Diese Zeichenkette bedeutet, dass wir nach einem Großbuchstaben von A-Z suchen. Zum Beispiel der Buchstabe „S“ von Sept. Zu beachten ist, dass Groß- und Kleinschreibung getrennt behandelt wird.
- [a-zä]{2} Diese Zeichenkette bedeutet, dass wir nach zwei Kleinbuchstaben von a-z und auch das ä (für den Monatsnamen in der deutschen Sprache „März“) suchen. Das wäre das ep von „Sep“ oder är vom deutschen „Mär“.
Dann suchen wir nach einem Leerzeichen mit folgender Zeichenkette: \s
([A-Z][a-zä]{2})\s(0[1-9]|[12][0-9]|3[01]),\s(20\d{2})
Tagesangabe extrahieren
In der zweiten Gruppe suchen nach der Bezeichnung des Tages in Zahlen: (0[1-9]|[12][0-9]|3[01])
([A-Z][a-zä]{2})\s(0[1-9]|[12][0-9]|3[01]),\s(20\d{2})
Die Tagesangabe muss durch drei verschiedene Anweisungen getrennt werden.
Da wird nicht wissen, welche Datumsangabe in dem Dokument vorkommen kann, es kann der erste Tag (01) oder auch der letzte Tag (31) des Monats vorkommen, so müssen dementsprechend verschiedene Optionen benannt werden.
Diese werden mit dem Zeichen „|“ getrennt.
Beispiel: (1|2|3) = 1 oder 2 oder 3.
In eckigen Klammern folgt eine Auflistung von Zeichen, die erlaubt sind. Mehrere rechteckige Klammern entsprechen mehreren Zeichen.
Soll ein Ausdruck mehrere Zeichen beschreiben, werden diese einfach hintereinander gehangen. Dann wird die Eingabe von links nach rechts mit deinem Ausdruck verglichen.
Selbstverständlich müssen auch nicht immer alle Zahlen aufgeführt werden. Insgesamt steht der gesamte geklammerte Ausdruck aber nur für ein Zeichen.
-
0[1-9] Diese Zeichenkette bedeutet, dass die Zahl mit einer „0“ beginnen kann, gefolgt von einer Zahl von 1 bis 9. Wir erhalten also eine beliebige Zahl von 01 – 09.
Die Zeichenkette sucht nach einem Zahlenmuster, welches mit einer Null anfängt. Falls Ihr Dokument normalerweise eine Datumsangabe „5. März 2022“ beinhaltet, also ohne, dass die Zahl „0“ vor der der Zahl „5“ steht, so wird die „0“ in der Zeichenkette weggelassen.
-
[12][0-9] Diese Zeichenkette bedeutet, dass die Zahl mit einer „1“ oder auch einer „2“ beginnen kann, gefolgt von einer beliebigen Zahl von 0 bis 9. Als Ergebnis kann eine beliebige Zahl von 10 - 29 rauskommen.
-
3[01] Diese Zeichenkette bedeutet, dass eine Zahl mit einer „3“ beginnen könnte, gefolgt von einer „0“ oder einer „1“. Als Ergebnis könnte die 30 oder 31 sein.
Nachdem die Optionen für den Tag definiert wurden, sollte der Ausdruck für das Jahr bestimmt werden.
Jetzt suchen wir nach dem Komma und dem Leerzeichen: ,\s
([A-Z][a-zä]{2})\s(0[1-9]|[12][0-9]|3[01]),\s(20\d{2})
Jahresangabe extrahieren
In der letzten Gruppe suchen wir nach dem Jahr: (20\d{2})
([A-Z][a-zä]{2})\s(0[1-9]|[12][0-9]|3[01]),\s(20\d{2})
Wir beginnen mit der Suche nach einem beliebigen Jahr, wissen jedoch, dass es ≥ 2000 sein wird.
- 20 Diese Zeichenkette bedeutet, dass wir nach einem beliebigen Jahr suchen, beginnend mit genau 20.
- \d{2} Diese Zeichenkette bedeutet, dass wir nach einer möglichen zweistelligen Zahl suchen, also von „00“ bis „99“.
Das Zeichen \d steht beispielsweise für eine Ziffer zwischen 0 und 9, wiederum das Zeichen \d{2} sucht nach einer zweistelligen Zahl.
Variablen werden aus dem Dokument ausgelesen und bereitgestellt
Wenn nun der reguläre Ausdruck in PaperOffice angewendet wird, so kommt als Endergebnis das Datum „Sep 20, 2019“ raus.
So kann jedes beliebige Datum aus einem Dokument ausgelesen werden, ohne dass wir den Ursprungswert gewusst haben. Diese Gruppen können ebenfalls überall anders eingesetzt und frei verschoben werden, um andere Datumsformate auszulesen.
Hierzu ein weiteres Beispiel:
Rechnungen mit verschiedenen Formaten können leicht ausgelesen werden
Das Datum fängt mit dem Tag an, danach folgt der Monat, bestehend aus Buchstaben, jedoch wird der erste Buchstabe ist immer großgeschrieben, daraufhin folgt ein Punkt, ein weiteres Leerzeichen und dann das Jahr.
Um dieses Datum zu extrahieren, kann der soeben beschriebene reguläre Ausdruck (REGEX) verwendet werden, mit einer zusätzlichen Vervollständigung, denn in dem zweiten Beispiel wird nach dem Monat der „Punkt“ angegeben.
Dieser kann mit folgender Zeichenkette angegeben werden: \.
Somit sieht der vollständige Ausdruck folgendermassen aus:
(0[1-9]|[12][0-9]|3[01])\s([A-Z][a-zä]{2})\.\s(20\d{2})
Sie können jederzeit Ihren erstellten Regex validieren, indem Sie auf der Seite https://regex101.com diesen zusammen mit Ihrem Text einfügen. Regex101 wird nicht nur prüfen, ob Ihr Regex stimmt, sondern Ihnen den regulären Ausdruck weitgehend erklären.
Und so können Sie die verschiedenen Zeichengruppen für alles verwenden.