Reguläre Ausdrücke (RegEx)

Was sind reguläre Ausdrücke?

Reguläre Ausdrücke, auch bekannt als „regex“ oder „regexp“, sind eine Folge von Zeichen, die ein Suchmuster definieren. Sie werden verwendet, um Text aus einem größeren Textkorpus abzugleichen und zu extrahieren und werden häufig in der Programmierung, beim Data Mining und zur Manipulation und Extraktion von Text genutzt. In der Arbeit mit Text können RegEx unter anderem zur Datenüberprüfung, zum Suchen und Ersetzen und zur Textanalyse verwendet werden.

Zeichenauswahl und Zeichenklassen in RegEx

SymbolErklärung
[abc]findet jedes einzelne Zeichen in der Menge (a, b oder c)
[^abc]findet jedes einzelne Zeichen, das nicht in der Menge enthalten ist (a, b oder c)
{n}Passt auf genau n Vorkommen des vorangehenden Zeichens oder der vorangehenden Gruppe
{n,}Passt auf n oder mehr Vorkommen des vorangehenden Zeichens oder der vorangehenden Gruppe
{n,m}Entspricht mindestens n und höchstens m Vorkommen des vorangehenden Zeichens oder der vorangehenden Gruppe
^entspricht dem Anfang einer Zeile
$Entspricht dem Ende einer Zeile
.passt auf jedes einzelne Zeichen, außer auf eine neue Zeile
*passt auf null oder mehr der vorangehenden Zeichen
+Entspricht einem oder mehreren der vorangehenden Zeichen
?entspricht null oder einem der vorangehenden Zeichen
\dentspricht einer beliebigen Ziffer (entspricht [0-9])
\DPasst auf eine beliebige Nicht-Ziffer
\wpasst auf jedes Wortzeichen (alphanumerische Zeichen und Unterstriche)
\WEntspricht einem beliebigen Nicht-Wort-Zeichen
\sentspricht einem beliebigen Leerzeichen (einschließlich Tabulatoren und Leerzeichen)
\SPasst zu jedem Zeichen, das kein Leerzeichen ist
|Entspricht entweder dem vorangehenden oder dem folgenden Zeichen oder der Gruppe
()Gruppiert die eingeschlossenen Zeichen und wendet den folgenden Quantifizierer auf die gesamte Gruppe an

Beispiele für reguläre Ausdrücke aus der Praxis

Validierung von E-Mail-Adressen

Ein regulärer Ausdruck kann verwendet werden, um zu prüfen, ob eine gegebene Zeichenkette eine gültige E-Mail-Adresse ist, indem sie mit einem Muster verglichen wird, das die Struktur einer gültigen E-Mail-Adresse definiert.

Beispielsyntax:

^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$

Parsing von URLs

Ein regulärer Ausdruck kann verwendet werden, um die verschiedenen Teile einer URL zu extrahieren, z. B. das Protokoll, den Hostnamen und den Pfad.

Beispielsyntax:

^(https?:\/\/)?([\da-z\.-]+)\.([a-z\.]{2,6})([\/\w \.-]*)*\/?$

Extrahieren von Telefonnummern aus Text

Ein regulärer Ausdruck kann verwendet werden, um Telefonnummern aus einem Textblock zu identifizieren und zu extrahieren.

Beispielsyntax:

^(?:\+\d{1,3}|0\d{1,3}|00\d{1,2})?(?:\s?\d){9,12}$

Entfernen von HTML-Tags aus einer Zeichenkette

Ein regulärer Ausdruck kann verwendet werden, um alle HTML-Tags aus einer Zeichenfolge zu entfernen, so dass nur der reine Textinhalt übrig bleibt.

Beispielsyntax:

\/?[^>]+

Suche nach bestimmten Wörtern oder Mustern in einer Zeichenkette

Ein regulärer Ausdruck kann verwendet werden, um schnell nach einem bestimmten Wort oder Muster in einer Zeichenfolge zu suchen.

Beispielsyntax:

\b(Wort1|Wort2|Wort3)\b

Ersetzen von Text

Ein regulärer Ausdruck kann verwendet werden, um alle Vorkommen eines bestimmten Wortes oder Musters in einer Zeichenfolge durch ein anderes Wort oder Muster zu ersetzen.

Beispielsyntax:

(Wort1|Wort2|Wort3)

Extrahieren von Daten aus strukturierten Dateien

Ein regulärer Ausdruck kann verwendet werden, um bestimmte Daten aus strukturierten Dateien wie CSV, JSON und Protokollen zu extrahieren.

Beispielsyntax:

(\w+)=(\d+)

Validierung von Kreditkartennummern

Ein regulärer Ausdruck kann verwendet werden, um sicherzustellen, dass eine bestimmte Zeichenfolge eine gültige Kreditkartennummer ist, indem sie mit einem Muster verglichen wird, das die Struktur einer gültigen Kreditkartennummer definiert.

Beispielsyntax:

^(?:4[0-9]{12}(?:[0-9]{3})?|[25][1-7][0-9]{14}|6(?:011|5[0-9][0-9])[0-9]{12}|3[47][0-9]{13}|3(?:0[0-5]|[68][0-9])[0-9]{11}|(?:2131|1800|35\d{3})\d{11})$

Tokenisierung eines Satzes

Reguläre Ausdrücke können verwendet werden, um einen Satz in Wörter und Satzzeichen zu zerlegen.

Beispielsyntax:

\w+|[^\w\s]+

Datenextraktion aus natürlichsprachigem Text

Ein regulärer Ausdruck kann verwendet werden, um bestimmte Informationen wie Namen, Daten, Preise usw. aus natürlichem Text zu extrahieren.

Beispielsyntax:

\b

Redundanz (Informationstheorie)

Was ist Redundanz?

Der Begriff Redundanz stammt vom lateinischen Wort „redundare“ und bedeutet „überlaufen“ oder „im Überschuss vorhanden“. In der Informatik bezeichnet Redundanz überschüssige Daten, deren Abwesenheit keinen Informationsverlust erzeugen würde. Grundsätzlich unterscheidet man zwischen beabsichtigter und unbeabsichtigter Redundanz.

Was sind Beispiele für Redundanzen in der Informatik?

Informationsübertragung

Bei der Informations- und Nachrichtenübertragung dient Redundanz zur Erkennung von Fehlern. Als redundant wird der Teil der Nachricht gekennzeichnet, der keine relevanten Informationen enthält. Es handelt sich also um zusätzliche Bits, die zum Beispiel Funktionen in der Nachricht repräsentieren können. Eine höhere Redundanz erlaubt zudem die Korrektur von Fehlern. In einer Übertragung können unter Umständen verloren gegangene Information wiederhergestellt werden. Dies ist jedoch von der Fehlertoleranz der Anwendung abhängig. Zum Beispiel ist IP-Telefonie fehlertoleranter als Transaktionen bei einer Bank. Gemessen wird die Fehlertoleranz durch die Hamming-Distanz. Mit dieser kann man Unterschiede zwischen Zeichenketten feststellen. So werden binär kodierte Zahlen durch XOR-Operation miteinander verglichen und die abweichenden Stellen gezählt.

Die Redundanz des Codes berechnet sich aus der Differenz von mittlerer Quellcodewortlänge L(C) und der Entropie H(X) der Information.

Die Redundanz der Quelle wird bestimmt aus der Differenz von maximaler Entropie Hmax(X) und Entropie H(X).

Kodierung

In der Kodierungstheorie gliedert man in Verteilungs- und Bindungsredundanz. Die Verteilungsredundanz bezieht sich auf die verschiedenen Wahrscheinlichkeiten des Vorkommens von Zeichen eines Alphabets. Bindungsredundanz hingegen bedeutet, dass es für bestimmte Zeichen wahrscheinlicher ist, nach gewissen anderen Zeichen aufzutreten. Zum Beispiel haben die Buchstaben „c“ und „h“ ein geringeres Vorkommen als andere Zeichen, doch wenn sie auftreten, dann meist als Kombination.

Das Ziel der Quellenkodierung ist es, überflüssige Daten zu beseitigen, um den Informationskanal maximal ausnutzen zu können. Relevante Informationen einer Nachricht müssen jedoch erhalten bleiben. Ein Beispiel für eine redundanzarme Kodierung ist die Huffman-Kodierung. Hierbei werden Zeichen, die häufiger in einer Quelle vorkommen, durch weniger Bits dargestellt als seltenere Symbole. Mithilfe eines Codebaums werden die Zeichen ihren Codewörtern zugeordnet. Die Dekodierung erfolgt bitweise, beginnend an der Wurzel. Dies ermöglicht eine verlustfreie Kompression und Übertragung.

Datenbanken und Datenbankstrukturen

In Datenbankensystem sind Redundanzen unerwünscht, da sie zu Datenanomalien führen. Existieren mehrere identische Datensätze, ist gegebenenfalls nicht klar, auf welche Daten zugegriffen werden soll. Es erschwert außerdem die Konsistenz und Pflege der Datenbank. Darüber hinaus können redundante Daten viel Speicherplatz verbrauchen.

Ein Beispiel sind die Kontaktangaben einer Person beim Kauf in einem Onlineshop. Fällt bei jeder Bestellung Name, Adresse und Kundennummer an, so handelt es sich um redundante Datensätze.

Durch Normalisierung von Datenbankschemen werden überschüssige Informationen reduziert. Relationale Datenbankensysteme stellen Daten in Tabellen dar. Datensätze aus verschiedenen Tabellen können durch ihre Attribute miteinander verknüpft werden. Bei einer Normalisierung werden die Daten in atomare Form gebracht und jede Tabellenspalte so aufgebaut, dass sie gleichartige Werte beinhaltet. Zudem müssen alle Nichtschlüsselattribute vom Primärschlüssel unabhängig sein.

Manchmal sind redundante Daten in einer Datenbank jedoch erforderlich, wie zum Beispiel Schlüsselredundanzen. Schlüssel sind Kennzeichner, die Datensätze eindeutig identifizieren. Auch werden redundante Informationen bewusst erhalten, wenn der Aufwand einer Normalisierung zu groß wäre. Eine Denormalisierung dient dann der Verbesserung der Laufzeit.

Random Forest

Was ist Random Forest?

Random Forest beschreibt einen Algorithmus im Bereich des maschinellen Lernens bzw. der künstlichen Intelligenz, welcher für Klassifikations- oder Regressionsaufgaben angewendet werden kann. Bei der Klassifikation oder Klassifizierung geht es um die Einteilung bzw. Zuordnung zu einer bestimmten Klasse. Hingegen hat die Regression das Ziel, Werte einer Variable auf Basis ihrer Abhängigkeit zu anderen Variablen zu schätzen.

Der Begriff Random Forest wurde vom Statistiker Leo Breiman eingeführt und basiert auf der Anwendung von Entscheidungsbäumen. Durch die Erstellung vieler zufälliger Entscheidungsbäume entsteht ein „zufälliger Wald“ (engl. Random Forest) an Bäumen.

Wie funktioniert ein Random Forest?

Um einen Wald an Bäumen zu erstellen, müssen zuvor viele einzelne Entscheidungsbäume (engl. decision trees) generiert werden. Diese Erstellung erfolgt unkorreliert und nach dem Zufallsprinzip. Jeder Baum besteht aus mehreren Verzweigungen/Knoten, welche schlussendlich nach mehreren Ebenen in einem Endpunkt/Blatt/Klasse resultiert. Dabei ordnet ein Klassifikator das Datenobjekt einer Klasse zu, welche dann in der nächsten Verzweigung wieder klassifiziert wird, bis das Objekt an einem Endpunkt angelangt.

Um zu verhindern, dass Entscheidungsbäume zueinander korrelieren, wird das sogenannte Prinzip des Bagging (Kurzform von Bootstrap Aggregation) angewendet. Hierzu werden für die Erstellung der Entscheidungsbäume die Trainingsdaten mehrmals mit unterschiedlichen Aufteilungen herangezogen. Durch diese Varianz der jeweiligen Entscheidungsknoten soll eine Korrelation der Entscheidungsbäume zueinander ausgeschlossen werden.

Nach der Erstellung der definierten Anzahl an Entscheidungsbäumen funktioniert der Algorithmus auf Basis der Ensemble-Methode durch die Berücksichtigung mehrere Entscheidungsbäume für die Vorhersage. Diese Methode hat gegenüber der Anwendung eines einzelnen Entscheidungsbaumes den Vorteil, dass die Entscheidungen einer Vielzahl an Prädiktoren Ausreißer gegensteuern können und so die Verlässlichkeit des Ergebnisses erhöhen. Somit entspricht die Vorhersage eines Random Forest Regressor dem Durchschnitt der Vorhersagen der einzelnen Entscheidungsbäume.

Random Forest zählt grundsätzlich zur Kategorie des sogenannten Supervised Learning (überwachtes Lernen). Bei dieser Art des maschinellen Lernens sind die Trainingsdaten des Algorithmus gelabelt, das heißt, dass die Eingangsdaten bereits den korrekten Zieldaten zugeordnet sind. Darauf aufbauend soll das System lernen, neue Daten richtig vorherzusagen.

In welcher Software lässt sich ein Random Forest umsetzen?

Die Methode lässt sich unter anderem in Scikit-learn, R Programmiersprache, H2O oder Weka umsetzen.

  • Bei Scikit-learn handelt es sich um eine Python-Bibliothek, welche vor allem für Klassifikations- & Regressionsalgorithmen sowie Visualisierungen im Bereich des maschinellen Lernens Anwendung findet.
  • Die Programmiersprache R wird als interpretierte Sprache eingestuft, wurde für statische Berechnungen entwickelt und ist für statistische Berechnungen sowohl in der Wissenschaft als auch in der Wirtschaft sehr weit verbreitet. Der Name R lässt sich auf den Anfangsbuchstaben des Vornamens seiner Begründer Ross Ihaka und Robert Gentleman zurückführen sowie auf die Schlichtheit der Programmiersprache S, an welcher sich der Syntax von R stark anlehnt.
  • H2O ist eine Open-Source-Software des Unternehmens H2O.ai und findet vor allem bei Algorithmen im Bereich der Statistik und des maschinellen Lernens Anwendung. Die Software kann über eine API beispielsweise auch in Microsoft Excel betrieben werden. Während der Berechnung des Algorithmus werden approximative Ergebnisses dargestellt, sodass Parameter während des Berechnungsvorgangs noch abgeändert werden können. Die Visualisierung der Methode zählt allgemein zu einem Vorteil dieser.
  • Weka (Waikato Environment for Knowledge Analysis) wurde von der University of Waikato in Neuseeland entwickelt und bietet neben Lösungsansätze für Klassifikationen und in der Clusteranalyse auch Anwendungsgebiete in neuronalen Netzen, welche mit der Anwendung von Random Forest kombinierte werden können.

Reasoning System

Was ist ein Reasoning System?

Ein Reasoning System ist ein Software-System, mit dem Schlussfolgerungen von einer verfügbaren Wissensbasis generiert und logische Techniken wie Deduktion und Induktion verwendet werden. Reasoning Systeme spielen eine außerordentlich große Rolle bei der Implementierung von Künstlicher Intelligenz und bei wissensbasierten Systemen. Im Prinzip sind alle bestehenden Computersysteme solche Systeme, denn sie alle automatisieren gewisse Arten von Logik oder Entscheidungen.

Normalerweise wird dieser Begriff aber für Systeme gebraucht, bei denen eine komplexere Art von Argumentationssystemen verwendet wird. So werden etwa Systeme, die eine direkte Argumentation implementieren wie die Mehrwertsteuer oder der Kundenrabatt nicht als solche Systeme im engeren Sinne betrachtet, sondern vielmehr Systeme, die logische Inferenzen über medizinische Diagnosen oder mathematische Theoreme machen. Es gibt zwei Modi, in denen Argumentationssysteme operieren: im interaktiven Modus und im Stapelverarbeitungsmodus. Beide Arten können den Begründungsprozess mit Benutzerführung durchführen und damit die beste Antwort ermitteln.

Typen von Reasoning Systemen

Es gibt unterschiedliche Reasoning Systeme, die sich in verschiedenen Bereichen etabliert haben:

Klinisches beziehungsweise professionelles Reasoning

Bei klinischem Reasoning können die folgenden Bereiche unterschieden werden:

  • Scientific Reasoning (SR): fachliches, professionsspezifisches Hintergrundwissen
  • Interaktives Reasoning (IR): befindet sich in Interaktion mit den anderen Individuen und das Denken findet auf der Beziehungsebene statt
  • Konditionales Reasoning (KR): dieses betrifft Zukunftsvorstellungen und auch Konditionen, unter denen mögliche Zukünfte eintreten könnten
  • Narratives Reasoning (NR): hier findet das Denken in Geschichten und bezogen auf Personen und Einrichtungen statt
  • Pragmatisches Reasoning (PR): die Fähigkeit, nach pragmatischen Gesichtspunkten zu handeln
  • Ethisches Reasoning (ER): durch Einstellungen, Haltungen oder Werte bestimmtes Denken

Case-based Reasoning System

Ein Case-based Reasoning ist ein fallbasiertes Schließen mit einer Fallbasis (case memory) und einer Nachahmung menschlichen Verhaltens, wobei die Lösung eines gegebenen Problemes sich an der Lösung eines ähnlichen und früher bereits gelösten Problemes orientiert. Das fallbasierte Schließen ist ein Ansatz, um menschliches Denken zu modellieren. Mit diesem Ansatz können intelligente Systeme gebaut werden. Es werden dazu gemachte Erfahrungen (alle Fälle) gespeichert. Diese Fälle werden zum Lösen neuer Aufgaben eingesetzt. Zu den Aufgabenklassen von CBR-Systemen gehören die analytischen Aufgaben der Klassifikation, Diagnose, Bewertung, Entscheidungsunterstützung und Vorhersage, sowie die synthetischen Aufgaben der Konfiguration, des Designs und der Planung.

Systeme maschinellen Lernens

Maschinelles Lernen beschäftigt sich mit den rechnerbasierten Methoden zum Erwerb von neuem Wissen und neuen Fähigkeiten sowie neuartigen Wegen der Organisation von bestehendem Wissen. Sowohl symbolorientierte wie auch konnektionistische Verfahren werden unter dem Begriff des maschinellen Lernens verstanden. Die Aufgabe von lernenden Systemen besteht darin, dass das System die gestellten Aufgaben (globale oder konkrete Zielvorgaben) schrittweise nach der Wiederholung besser ausführen kann als vorher. Die Verbesserung der Performanz des Systems kann dadurch erreicht werden, indem neue oder modifizierte Methoden und Wissen angewandt werden. Die Aufgaben können schließlich mit verbesserter Qualität ausgeführt werden (schneller, genauer, sicherer und robuster).

Regelbasiertes System

Was ist ein Regelbasiertes System?

Ein Regelbasiertes System ist ein nützliches wissensbasiertes System, das regelbasiertes Schließen erlaubt. Solche Regelbasierten Systeme bestehen aus einer Datenbank mit Fakten (Faktenbasis), einer Menge von Regeln (Regelbasis) und aus einem Kontrollsystem, das mit einem Regelinterpreter ausgestattet ist (Inferenzmaschine oder auch Business-Rule-Engine).

Die Regeln sind nach dem If-then-else-Prinzip aufgebaut. Der WENN-Teil wird als Prämisse bezeichnet und der DANN-Teil ist die Konklusion. Das Kontrollsystem soll eine Identifikation von geeigneten Regeln vornehmen und ausgewählte Regeln anwenden und die Datenbank aktualisieren. Die Auswahlmechanismen sind daten- oder zielgetrieben.

Regelbasierte Systeme bilden die Grundlage von Expertensystemen. Die Verwaltung von Regeln erfolgt in einem Business-Rule-Repository, das Teil eines Business-Rule-Management-Systems ist.

Welche Anwendungen gibt es für Regelbasierte Systeme?

Es kommt zum zunehmenden Einsatz von Regelbasierten Systemen in der Produktionsplanung und in der Produktionssteuerung. Gerade in Industriezweigen mit variantenreichen Gebrauchs- und Investitionsgütern werden diese Systeme genutzt. So gibt es sie in der Möbelindustrie, im Maschinenbau, in der Automobilindustrie und in der Elektroindustrie.

Produktkonfiguratoren wissen, welche Abhängigkeiten es gibt und informieren darüber. So gibt es gewisse Merkmalskombinationen. Ein Kunde kann ein Cabrio bestellen, aber dieses kann kein „Schiebedach“ besitzen. Bei der Bestellung einer vollautomatischen „Klimaanlage“ benötigt das Fahrzeug auch gleichzeitig eine stärkere „Batterie“.

Es werden Regelbasierte Systeme auch für die Verteilung von weltweiten Fahrzeugbestellungen genutzt. So gibt es Regeln für Fahrzeug- und Aggregatwerke von Automobilherstellern. Das Regelwerk eines Automobilherstellers verfügt über tausende Produkt- und Produktionsregeln.

Wie sind Regelbasierte Systeme aufgebaut?

Regelbasierte Systeme sind die am weitesten verbreitetste Art von wissensbasierten Systemen (Expertensystemen). Die Bestandteile sind eine Regelbasis (Menge von Regeln) und ein Inferenzmechanismus (Inferenzmaschine). Der Inferenzmechanismus legt fest, welche der Regeln anzuwenden sind und es gibt verschiedene mögliche Strategien, die angewendet werden können. So gibt es entweder die Vorwärtsverkettung oder aber die Rückwärtsverkettung von entsprechenden Regeln.

Wie lauten die Regeln in einem Regelbasierten System?

Die Regeln sind ganz einfach formalisierte Konditionalsätze. Sie besitzen die Form:

Wenn (if) A, dann (then) B

Daraus ergibt sich die Bedeutung:

Wenn A wahr (erfüllt, bewiesen) ist,
dann schließe, dass auch B wahr ist.

A und B sind dabei Aussagen. Die „Wenn“-Teil-Formel einer Regel wird als Prämisse oder auch als Antezedenz der Regel bezeichnet. Die „Dann“-Teil-Formel wird Konklusion oder auch Konsequenz genannt. Sobald die Prämisse einer Regel erfüllt ist, wird diese Regel angewendet.

Sollte diese Regel immer gelten, dann spricht man von einer deterministischen Regel. Sollte die Konsequenz einer Regel mit einer entsprechenden Aktion verbunden sein, dann erhält man eine Produktionsregel. Diese Regeln werden gerne in entsprechenden Produktionssystemen zu einer Steuerung eingesetzt.

Die Regeln sind ein guter Kompromiss zwischen einer verständlichen Wissensdarstellung und formalen Ansprüchen. In der Kognitionswissenschaft werden Regeln als Bestandteile von informationsverarbeitenden Prozessen angesehen.