Autor: Torsten Roeder
Lizenz: Creative Commons Attribution 4.0 International (CC BY 4.0)
FH Potsdam, 29.06.2021
Alle von uns müssen regelmäßig mit Text arbeiten: Texte schreiben natürlich, aber oft auch Texte überarbeiten oder durchsuchen. Die Grundmechanismen von »Suchen und Ersetzen« reichen dabei oft nicht aus: Vielleicht suchen wir Abkürzungen in Texten, um diese zu vereinheitlichen, oder wir möchten unsere Datumsangaben auf ein bestimmtes Format umstellen. Oder wir möchten Adressangaben aus einem Text extrahieren. Das alles kann mühselige Handarbeit bedeuten. Aber es gibt auch andere Wege. Wir erlernen hier eine Technik, die in alltäglichen, konkreten Anwendungsfällen hilfreich ist.
Ein Beispiel: Wir möchten nach Kontaktdaten in einem Text suchen. Wir wissen, dass Kontaktinformationen nach bestimmten Mustern aufgebaut sind. Wenn wir dieses Muster beschreiben können, dann können wir auch danach suchen.
Aufgabe: Formal (frei, selbst gewählte Syntax) beschreiben, wie man
erkennt. Dabei zwischen Zeichenarten unterscheiden, wie z.B Ziffern, Großbuchstaben, Kleinbuchstaben, Leerzeichen, bestimmte Satzzeichen.
Was braucht man für die Beschreibung des Suchmusters? Die »Trefferquote« muss nicht 100% akkurat sein, aber die meisten erwartbaren Fälle abdecken. Wie verhält es sich mit false positives/negatives (also: welche Fälle werden ggf. nicht erkannt, und welche werden fälschlich erkannt)?
Eine große Hilfe stellen die sogenannten »regulären Ausdrücke« dar, oder englisch: »regular expressions«. Es handelt sich um eine Syntax für Suchbegriffe, die den Einsatz von Jokerzeichen erlaubt. Die Joker können nach bestimmten Regeln angepasst werden. Reguläre Ausdrücke sind allgemein formale Beschreibungen von Textmustern.
Reguläre Ausdrücke haben außerdem den großen Vorteil, dass sie in sehr vielen Umgebungen unterstützt werden. Beispielsweise LibreOffice, Oxygen Editor, Notepad++ und viele andere Programme bieten die Suche mit regulären Ausdrücken an (nur nicht Microsoft Word). Die meisten Programmiersprachen unterstützen ebenfalls reguläre Ausdrücke. Es handelt sich um eine relativ breit unterstützte Textverarbeitungsmethode, die allerdings mehr im programmiernahen Bereich beheimatet ist.
Fiddle: https://regexr.com/ (alternativ: https://regex101.com/)
RegEx-Referenz: https://www.regular-expressions.info
Beispieltext: http://www.zeno.org/nid/20004412516
Kaiser
durch Köhler
.
fungiert als Jokerzeichen:
sch.n
findet schön
, schon
und (Men)schen
Kaiser.
findet Kaisers
, Kaiser,
, Kaiser
und (theoretisch) Kaiserö
\
als »escape«:
Kleider\.
findet genau Kleider.
[a-z]
, [0-9]
[^aeiou]
\
escapen\s
(Spaces), \w
(Wortzeichen), \d
(Ziffern)\w
(und [a-z]
) enthalten keine Umlaute![0-9][0-9][0-9]
\d\d\d
\[\d\d\d\]
+
: 1 oder mehr*
: 0 oder mehr?
: 0 oder 1 = »optional«K[a-zäöüß]+
findet alle Wörter mit K
.*
findet den gesamten Text+?
und *?
»(.*)«
vs. »(.*?)«
{n,m}
findet zwischen n und m Zeichen
K[a-zäöüß]{6}
K[a-zäöüß]{4,5}r
\
()
umschließen eine Gruppe|
abgrenzen
Beamt(en|e)
findet Beamte
und Beamten
(Priorität von links nach rechts)Beamte(n|)
(Be)?[aA]mt(en|e|)
findet auch Amt
und Amte
\
escapen$1
adressiert werden
\[(\d\d\d)\]
durch [Seite $1]
Quelle: (.*?), (.*?):
durch Quelle: $2 $1:
\r
: carriage return (Mac vor OS X)\n
: new line (Unix, Mac ab OS X)\r\n
: carriage return, new line (Windows)[\r\n]+
(\r|\n|\r\n)
oder auch (\r\n?|\n)
Beispieltext (PDF):
https://meinclio.clio-online.de/open/pdf/conferencereport/fdkn-123139/
Ziel:
ein gut lesbares Textdokument
Was könnte man tun?