LE-Text - Institut für Computerlinguistik
Transcription
LE-Text - Institut für Computerlinguistik
Reguläre Ausdrücke c CLab-Team Institut für Computerlinguistik Universität Zürich August 2011 Zusammenfassung Ein regulärer Ausdruck (regular expression oder regex) beschreibt ein Muster, nach dem eine Zeichenkette abgesucht werden kann (pattern matching). Die gefundenen Instanzen (matches) stehen dann für die weitere Verarbeitung zur Verfügung. Reguläre Ausdrücke sind weit verbreitet in der Computerlinguistik, sie werden etwa bei der Tokenisierung, beim Chunk-Parsing oder bei der Named-Entity-Recognition eingesetzt, sowie oft für die Aufbereitung von Textdaten benutzt. Reguläre Ausdrücke 1 1 Lernziele • die Möglichkeit zur Ersetzung eines (oder aller) Vorkommen in einem Text durch etwas Sie sollten umfassend Bescheid wissen, was re- anderes guläre Ausdrücke sind und wozu man sie einsetzen kann. Sie können reguläre Ausdrücke • die Möglichkeit zur Zerlegung eines Textes an den Stellen, an denen ein gegebener RA vor- nach vorgegebenen Kriterien bilden. kommt. 2 Grundlegendes zu regulären (QUIZ) Reguläre Ausdrücke: Eigenschaften Ausdrücken 3 Konstruktion regulärer Aus- Die Verwendung regulärer Ausdrücke (RA) ist drücke heute weit verbreitet im Bereich grundlegender Verfahren der Computerlinguistik (z.B. Tokenisierung und L Tagging), der sogenannten flachen Textverarbeitung. Mittels regulärer Ausdrücke lassen sich konzise Muster für unterschiedliche Zeichenketten spezifizieren, mit denen automatisch in Texten gesucht wird. Ein Beispiel hierfür, umgangssprachlich ausgedrückt, wäre: “Wort, das mit einem Grossbuchstaben anfängt und mit einem ’k’ aufhört”. Je nach Textkorpus, in dem man sucht, lässt sich damit das Wort Computerlinguistik finden. Die gefundenen Instanzen (sogenannte matches) eines solchen L Mustervergleichs (pattern matching) stehen dann zur Weiterverarbeitung zur Verfügung. Im Folgenden sollen die wesentlichen Möglichkeiten zur Konstruktion von RA vorgestellt werden. Hierzu werden RA in den Beispielen stets durch Schrägstriche (”/”) (slashes) begrenzt, wie es z.B. in Perl üblich ist.1 Anhand eines so angegebenen Suchmusters wird ein Text (hier: Jeder Mensch ist einzigartig und besitzt eine eigene spezifische Persönlichkeit) von Anfang bis Ende durchsucht und es wird der zuerst gefundene Match als Ergebnis geliefert. Im Folgenden gehen wir davon aus, dass jeweils alle Ergebnisse aufgesammelt werden. Ausdrücke Direkte Angabe von Zeichenketten ist vor allem durch Suchfunktionen (UNIX- Direkte Angabe von Zeichenketten, also Folgen Werkzeug grep) und Skriptsprachen (PERL) be- von Zeichen, sind der einfachste Fall: Die Verwendung regulärer 3.1 kannt geworden. Mittlerweile werden RA nicht nur in vielen gängigen Programmiersprachen /einzig/ verwendet, sondern auch in Textverarbeitungs- → Suche nach dem Vorkommen von einzig im programmen wie Microsoft Word. Programmiersprachen, die die Verwendung von RA implementieren, bieten in der Regel mindestens die folgenden Möglichkeiten: Text: Jeder Mensch ist einzigartig und besitzt eine eigene spezifische Persönlichkeit Matches: [“einzig”] • testen, ob ein RA in einem Text matcht Hierzu finden Sie hier eine (ILAP) (Übung): • angeben, wo ein RA in einem Text matcht Pattern Matching (Zeichenketten) • den Zugriff auf Teile eines Matches im Text • den Zugriff auf alle zu findenden Matches im Text 1 Andere Programmiersprachen kennen andere Konventionen, wie reguläre Ausdrücke angegeben werden: In Python beispielsweise werden sie als r’RA’ notiert. Reguläre Ausdrücke 3.2 2 Zeichen und Zeichenklassen • /\r/ carriage return (Wagenrücklauf) Zeichenklassen (character classes) erlauben, reguläre Ausdrücke kürzer zu formulieren: In “[]” eingeschlossen lassen sich Zeichen angeben, die an einer bestimmten Position auftreten dürfen. Sie dienen im wesentlichen der Vereinfachung von RA (um nicht jeweils die Zeichenalternativen an einer Position explizit angeben zu müssen). • /\f/ form feed (Seitenvorschub) • /\w/ alphanumerisches Zeichen (word character), entspricht dem RA: /[A-Za-z0-9 ]/, in Posix-Notation: /[:alpha:]/. Abhängig von den Lokalisierungseinstellungen können auch weitere alphanumerische Zeichen darin enthalten sein. • /\W/ nicht-alphanumerisches Zeichen, ent- /[MP]/ spricht dem RA: /[ˆA-Za-z0-9 ]/ → Suche nach dem Vorkommen von M oder P: Jeder Mensch ist einzigartig und besitzt eine eigene spezifische Persönlichkeit • /\s/ whitespace, entspricht dem RA: /[\f\n\r\t\v]/, in Posix-Notation: /[:space:]/ • /\S/ non-whitespace, entspricht dem RA: Matches: [“M”, “P”] /[ˆ\f\n\r \t\v]/ Mit Zeichenbereichen, ausgedrückt durch Bindestrich, können kompakt Zeichenklassen aus Zeichen gebildet werden, deren Zeichenkodes einander nachfolgen: • /[A-Z]/ ein beliebiger Grossbuchstabe (aber ohne Umlaute, ß und Buchstaben mit Akzenten) • /\D/ Nicht-Ziffer, entspricht dem RA: /[ˆ09]/ • /\x00/ Hexadezimalcode eines Zeichens • /[0-9]/ eine beliebige Ziffer und Pattern Matching (Vorgefertigte Zeichenklassen) buchstabe (ditto) Tereichsangaben 3.4 sind möglich, z.B. /[ab17G-K]/ • /[ˆ0-9]/ negierte Zeichenklasse, alles ausser Ziffern Hierzu finden Sie hier eine (ILAP) (Übung): Pattern Matching (Zeichenklassen) 3.3 Posix-Notation: /[:digit:]/ Hierzu finden Sie hier eine (ILAP) (Übung): • /[A-Za-z]/ ein beliebiger Gross- oder Klein- • Mischungen • /\d/ Ziffer, entspricht dem RA: /[0-9]/, in Metazeichen Metazeichen (metacharacters) sind Zeichen, die eine besondere Funktion in einem RA haben. Das wichtigste ist der Punkt (”.”), der für die Zeichenklasse [ˆ\n\r] steht und somit auf alle Zeichen (ausser dem Zeilenende) matcht. Soll ein Metazeichen selbst gematcht werden, muss ihm ein \ vorangestellt werden. So findet man z.B. Punkte in einem Text mit /\./. Vorgefertigte Zeichenklassen |, (, ), [,] sind ebenfalls Metazeichen. “|” ent- Vorgefertigte Zeichenklassen sind besondere spricht einem “oder” im RA (Alternative), “()” Zeichen: Es gibt eine Reihe von Zeichen, gruppiert und “[]” gibt eine Zeichenklasse an. die angelehnt an die Textverarbeitung in Programmiersprachen wie folgt gematcht werden können: • /\t/ Tabulator • /\n/ newline (Zeilenumbruch) /.ei./ → Suche nach dem Vorkommen von ei nach und vor einem beliebigen Zeichen: Jeder Mensch ist einzigartig und besitzt eine eigene spezifische Persönlichkeit Reguläre Ausdrücke Matches: [“ ein”, “ ein”, “ eig”, “keit”] 3 Matches: [“einzig”, “spezifisch”] Hierzu finden Sie hier eine (ILAP) (Übung): Hierzu finden Sie hier eine (ILAP) (Übung): Pattern Matching (Achtung: Posix-Notation Pattern Matching (Optionalität, Gruppierung, kann in der ILAP nicht verwendet werden!) Disjunktion) 3.5 3.7 Verankerungen Allgemeine Wiederholungen Verankerungen (anchors) definieren einen festen Quantoren geben an, wie häufig der vorange- Punkt innerhalb der Zeile, an dem das Such- hende RA vorkommen darf. Es gibt einige all- muster festgemacht wird. Die meisten Werkzeu- gemeine und eine Reihe von numerischen Wie- ge/Programmiersprachen kennen die folgen- derholungen. Allgemeine Wiederholungen sind: den Metazeichen für Anker: • /ˆ/ der Anfang einer Zeile (ausser innerhalb einer Zeichenklasse, dort in der Bedeutung “bilde das L Komplement zu”) • /$/ das Ende einer Zeile • /\b/ Wortgrenze (d.h., Grenze zwischen \w und \W bzw. \W und \w) • /\B/ Nicht-Wortgrenze Hierzu finden Sie hier eine (ILAP) (Übung): Pattern Matching (Verankerung) • * (Kleene-Stern) Keinmal oder beliebig oft • + (Kleene-Plus) Mindestens einmal • ? Einmal oder keinmal, d.h. optional /ei[ne]*/ → Suche nach dem Vorkommen von ei, optional gefolgt von “n” oder “e“, beliebig oft wiederholt: Jeder Mensch ist einzigartig und besitzt eine eigene spezifische Persönlichkeit Matches: [“ein”, “eine”, “ei”, “ei”] /ei[ne]+/ 3.6 Optionalität, Gruppierung, Disjunktion → Suche nach dem Vorkommen von ei gefolgt Alternativen werden durch “|“ getrennt und Jeder Mensch ist einzigartig und besitzt eine eigene am besten von runden Klammern eingeschlos- spezifische Persönlichkeit Matches: [“ein”, eine”] sen. Auf diese Weise kann eine L Disjunktion von mindestens einmal entweder “e” oder “n”: in einen grösseren Ausdruck eingebettet werHierzu finden Sie hier eine (ILAP) (Übung): den (der Disjunktionsoperator hat eine geringe Präzedenz, so dass die Disjunktion entspre- Pattern Matching (Wiederholungen) chend abgeschlossen werden muss). Nur bei einfachen Mustern reicht die Angabe der Disjunktion selbst. 3.8 Numerische Wiederholungen Numerische Wiederholungen sind: /(einzig|spezifisch)/ • {n} n-mal oder • {n,} mindestens n-mal /einzig|spezifisch/ • {n,m} mindestens n-mal, aber höchstens m- → Suche nach dem Vorkommen von einzig oder spezifisch im Text: Jeder Mensch ist einzigartig und besitzt eine eigene spezifische Persönlichkeit mal • das heisst: * entspricht {0,}, + entspricht {1,} und ? entspricht {0,1}. /ei.{0,2}ne/ Reguläre Ausdrücke 4 → Suche nach dem Vorkommen von ei am Anfang und ne am Ende einer Zeichenkette, die insgesamt 4 bis 6 Zeichen lang ist: Jeder Mensch ist einzigartig und besitzt eine eigene spezifische Persönlichkeit Matches: [“eine”, “eigene”] 3.9 Gier und Eifer Um zu verstehen, wieso etwas gematcht wird, sind die folgenden beiden Matching-Strategien der Regex-Maschine wichtig: 1. Eifer (eagerness): Der früheste (am weitesten links beginnende) Treffer gewinnt. Die Quantoren matchen per default immer so oft wie möglich, d.h. das Teilmuster findet den längstmöglichen Match (man spricht hier auch von “gierigen” Mustern (Englisch greedy, 2. Gier (greediness): Der längste Treffer gewinnt. Die normalen Quantoren (?, *, +, {n, m}) sind gierig. mehr dazu in Kapitel 3.9). Ein Beispiel zum Eifer: Wenn wir in unserem Deshalb bedeuten Text nach /ei.{0,2}ne/ /e?/ von oben und suchen, ist der erste Treffer, der gefunden wird, /ei(..)?ne/ der leere String (“”), da der Text mit “J” beginnt. nicht das gleiche: Beim zweiten Ausdruck sind nur “eine” (also 4 Zeichen) oder “eiXXne” Ein Beispiel zur Gier: Wir suchen einen belie- (also 6 Zeichen, mit X ein beliebiges Zeichen) bigen Text, welcher von Klammern umschlossen möglich. ist. Wir ändern den Beispieltext dafür wie folgt Wünscht man hingegen den jeweils ab: kürzesten Match, so muss den Quantoren ein Jeder Mensch ist (wirklich) einzigartig und besitzt ei- “?” angehängt werden (siehe auch Kapitel 3.10). ne eigene (spezifische) Persönlichkeit /\b[egin]{3,3}.*\b/ /(.*)/ → Suche nach dem Vorkommen einer Zei- → Suche nach dem Vorkommen einer öffnenden chenkette, die mit einer Wortgrenze beginnt, ge- Klammer, auf welche beliebig viele Zeichen und folgt von genau 3 Zeichen, die jeweils entweder eine schliessende Klammer folgen: “e”, “g”, “i” oder “n” sind, gefolgt von beliebi- Jeder Mensch ist (wirklich) einzigartig und be- gen Zeichen bis zu einer Wortgrenze: sitzt eine eigene (spezifische) Persönlichkeit Jeder Mensch ist einzigartig und besitzt eine eige- Matches: [“(wirklich) einzigartig und besitzt ei- ne spezifische Persönlichkeit ne eigene (spezifische)”] Matches: [“einzigartig und besitzt eine eigene Die Gier bewirkt, dass so viele Zeichen wie spezifische Persönlichkeit”] möglich konsumiert werden, d.h., .* matcht alles bis zur letzten gefundenen schliessenden /\b[egin]{3,3}.*?\b/ → Suche nach dem Vorkommen einer Zeichenkette, die mit einer Wortgrenze beginnt, ge- Klammer. folgt von genau 3 Zeichen, die jeweils entweder 3.10 “e”, “g”, “i” oder “n” sind, gefolgt von beliebi- Um dem letzen Fall vorzubeugen, gibt es in gen Zeichen bis zur ersten Wortgrenze: Jeder Mensch ist einzigartig und besitzt eine eige- vielen Programmiersprachen sogenannte nicht- ne spezifische Persönlichkeit versuchen, so wenige Zeichen wie möglich, aber Matches: [“einzigartig”, “eine”, “eigene”] so viele wie nötig zu verbrauchen. Hierzu finden Sie hier eine (ILAP) Pattern Matching (Numerische Wiederholungen) Genügsame Quantoren gierige oder genügsame (lazy) Quantoren. Sie Nicht-gierige Quantoren: Reguläre Ausdrücke 5 • *? → Suche nach einem Vorkommen von ein, auf das nicht zigartig folgt. • +? Jeder Mensch ist einzigartig und besitzt eine eigene spezifische Persönlichkeit Matches: [“ein”] • ?? • {n,m}? Noch einmal das Beispiel mit dem Text in Klammern, dieses Mal mit genügsamen Quantoren: /(.*?)/ Lookbehinds funktionieren analog: /(?<= einzig)artig/ → Suche nach dem Vorkommen einer öffnenden → Suche nach einem Vorkommen von artig, das auf einzig folgt. Klammer, auf welche beliebig viele Zeichen fol- Jeder Mensch ist einzigartig und besitzt eine eigene gen, jedoch höchstens bis zur nächsten schlies- spezifische Persönlichkeit senden Klammer: Matches: [“artig”] Jeder Mensch ist (wirklich) einzigartig und besitzt eine eigene (spezifische) Persönlichkeit Zu beachten ist, dass Ausdrücke von variabler Matches: [“(wirklich)”, “(spezifische)”] Länge (also solche mit *, + oder {n,m}) inner- Hierzu finden Sie hier eine (ILAP) (Übung): Pat- halb von Lookbehinds nicht erlaubt sind. tern Matching (Genügsames Matchen) Zum Thema Lookaheads finden Sie hier eine (ILAP) Pattern Matching (Lookaheads) 3.11 Lookbehinds werden in den ILAPs nicht un- Lookahead und Lookbehind Lookaround-Konstrukte erweitern die re- gulären Ausdrücke um die Möglichkeit, kon- terstützt. den Kontext selbst zu matchen. Diese Konstruk- Rückverweise, Ersetzen und (nicht-)einfangende Klammern te ähneln den Verankerungen (siehe Kapitel 3.5) Rückverweise sind ein sehr mächtiges In- insofern, als dass sie nicht auf eigentlichen Text strument beim Schreiben von regulären Aus- textsensitive Bedingungen zu formulieren, ohne 3.12 passen, sondern auf eine Position. drücken. Für gruppierte (d.h. in runde Klam- • (?= · · ·) positives Lookahead mern eingeschlossene) Teilmuster werden sy- • (?! · · ·) negatives Lookahead stematisch Register angelegt, so dass mit Hilfe • (?<= · · ·) positives Lookbehind • (?<! · · ·) negatives Lookbehind von L Variablen der Form ”$i”(mit i aus [1-9]) ein Rückbezug auf Matches dieser Teilstrukturen möglich ist. Dies ist insbesondere bei Erset- Ein Beispiel eines Lookaheads: zungen sehr hilfreich. Innerhalb des RA kann mit “\i” auf Teilmuster (matches) zurückverwiesen werden: /ei(?=g)/ → Suche nach einem Vorkommen von ei, auf das /\b([egin]{3,3}).*? \b\s\1/ g folgt. → Suche nach dem Vorkommen einer Zeichen- Jeder Mensch ist einzigartig und besitzt eine eigene kette, die mit einer Wortgrenze beginnt, gefolgt spezifische Persönlichkeit von genau 3 Zeichen, die jeweils entweder “e“, Matches: [“ei”] ”g“, ”i“ oder ”n“ sind (dieses Muster wird als erstes Muster gespeichert), gefolgt von beliebigen Das Beispiel für einen negativen Lookahead: / ein(?!zigartig)/ Zeichen bis zur ersten Wortgrenze, gefolgt von einem white space, gefolgt vom ersten Muster: Reguläre Ausdrücke Jeder Mensch ist einzigartig und besitzt eine eige- 6 ganz besondere Persönlichkeit ne spezifische Persönlichkeit Matches: [”einzigartig und besitzt ein“] Sowohl für die Suche nach einem Muster als auch für das Ersetzen einer Zeichenkette können Fast alle gängigen Programme unterstützen verschiedene Optionen übergeben werden, die auch die nicht-einfangenden (oder “nur grup- Folgendes spezifizieren: pierenden”) Klammern: (?:· · ·) Der Text, welcher vom darin enthaltenen Unterausdruck erkannt wurde, wird nicht abgespeichert. Das heisst, die nicht-einfangenden Klammern werden beim Nummerieren für $1, $2 etc. nicht mitgezählt. Eine nützliche Besonderheit gibt es in diesem Zusammenhang in Python und in den .NETSprachen: Man kann dem Unterausdruck in einem einfangenden Klammerpaar einen Na- • g “global”, suche nach allen Vorkommen des RA, nicht nur nach dem ersten. Dies ist die einzig relevante Option beim Ersetzen. • i Suche ohne Unterscheidung von Gross- und Kleinschreibung. • m Die Verankerungen ˆ und $ matchen nicht bloss am Beginn und Ende der ganzen Zeichenkette, sondern auch an allen Zeilenenden (newlines) innerhalb der Zeichenkette. men geben. In Python wird dazu die Syntax • s Die Zeichenklasse “.” matcht auch Zeilenen- (?P<Name>· · ·) verwendet. Danach kann man den - damit können Muster einfacher no- im Programm auf die gefundenen Substrings tiert werden, welche über Zeilenenden hin- mit dem Namen zugreifen, ohne sich überlegen weg matchen sollen. zu müssen, in der wievielten einfangenden Klammer denn nun der gesuchte Ausdruck sein könnte. In Python wird dies folgendermassen gehandhabt: RegexObj.group(“Name”) Die Optionen werden jeweils an einen Operator ohne Leerraum angefügt. Es können mehrere Optionen angegeben werden. s/spezifisch(.*?)\b/ganz besonder$1/gi → Suche nach dem Vorkommen einer Zeichen- 4 Textsuche und Ersetzen kette, die mit “spezifisch” beginnt und mit beliebigen Zeichen bis zur nächsten Wortgrenze fort- In Perl existiert eine einfach zu handhabende gesetzt wird (diese Zeichen werden in der Varia- Verwendung der RA für Ersetzungen innerhalb ble $1 gespeichert). Ersetze dies durch “ganz be- eines Textes (andere Sprachen bieten ähnliche sonder” gefolgt von den gespeicherten Zeichen Möglichkeiten). Hier wird der Operator s/// aus $1. Führe die Suche bis zum Ende des abzu- verwendet: suchenden Textes durch. Unterscheide nicht, ob s/RA/Ersetzungsausdruck/ die Matches gross oder klein geschrieben sind. s/spezifisch(.*?)\b/ganz besonder$1/ Hierzu finden Sie hier eine (ILAP) Pattern Matching (Ersetzen mit regulären Ausdrücken) → Suche nach dem Vorkommen einer Zeichen- und zwei Selbsttests: kette, die mit “spezifisch” beginnt und mit belie- (QUIZ) Reguläre Ausdrücke: Basics bigen Zeichen bis zur nächsten Wortgrenze fort- (QUIZ) Reguläre Ausdrücke: Match gesetzt wird (diese Zeichen werden in der Variable $1 gespeichert). Ersetze dies durch “ganz Hier findet sich nochmals die Übersicht aller besonder” gefolgt von den gespeicherten Zei- vorstehend verwendeten Übungen zu den ein- chen aus $1: zelnen Typen Regulärer Ausdrücke: Jeder Mensch ist einzigartig und besitzt eine eigene (ILAP) (Übung): Praktische Einführung Pattern Reguläre Ausdrücke Matching” 7 kann, ist das Erkennen von sog. benannten Einheiten. Das Problem: Hier findet sich ein Experiment, in dem man die verschiedenen Typen Regulärer Ausdrücke • Typischerweise kann man auf das gleiche Ob- kombiniert auf einen ganzen Text ansetzen jekt in der Welt auf verschiedenste Arten Be- kann: zug nehmen. Besonders gross ist die Variabi- (ILAP) Pattern Matching (Suchmustern allge- lität offenbar bei Bezugnahmen auf einmali- mein) ge Objekte. Natürlich sollte ein sprachverarbeitendes System diese Bezugnahmen als synonym erkennen und sie auf eine kanonische 5 Verwendung von regulären Ausdrücken in sprachtechnologischen Systemen Form abbilden. • Sehr oft bestehen diese Bezugnahme auch aus mehreren Tokens. Wenn man diese Tokens nicht als zusammengehörig erkennt, wird der Reguläre Ausdrücke finden seit einiger Zeit Parser versuchen, sie syntaktisch als L Kon- verstärkt Verwendung bei der flachen Textverar- stituente des Satzes zu erkennen. Das ist aber beitung. Hierbei kann es sich um eigenständige sinnlos, da sie syntaktisch in aller Regel die Anwendungen handeln (z.B. Filterung von Mel- Rolle eines Eigennamens spielen, unabhängig dungen) oder um die Vorverarbeitung von Tex- von ihrer Strukturierung, und da sie immer ten für komplexere Aufgaben. Zum zweiten die gleiche Bedeutung haben. gehören insbesondere Tokenisierung (aus welchen Basiseinheiten besteht der Text?), Tagging (welche Wortart kann jeder einzelnen Basiseinheit zugewiesen werden?) und Chunk L Parsing (welche Satzteile können auf einfache Weise im Text identifiziert werden?). In diesen Bereichen geht es im Wesentlichen darum, einfache Operationen auf Texten auszuführen (Erkennen und Ersetzen anhand einfacher Muster), und zwar mit möglichst einfachen, allgemeinen und wiederverwendbaren Verfahren. RA bieten sich hierfür an. Eine wesentliche Aufgabe besteht darin, Textbestandteile zu identifizieren und zu isolieren, die jeweils eine bestimmte Funktion erfüllen, z.B. die Angabe von Name, Zeit, Datum. Jede dieser einzelnen Angaben weist bestimmte strukturelle Merkmale auf, die für ihre Erkennung verwendet werden können, die man aber ungern einem allgemeinen Verfahren (z.B. dem L Parser) überlassen möchte. Eine Erkennung und Isolierung solcher Ausdrücke in einer frühen Phase der Analyse bedeutet also ein Problem weniger in der weiteren Verarbeitung. Dieser Prozess wird in der Literatur irreführenderweise meist als named entity recognition bezeichnet. Aber natürlich erkennt man nicht die benannten Einheiten selbst (die Objekte in der Welt), sondern ihre Benennungen in der Sprache. Wenn schon müsste man von named entity name recognition sprechen, oder, auf Deutsch, “Erkennung eigennamenähnlicher Ausdrücke”. Zu diesen Ausdrücken zählt man üblicherweise: 1. eigentliche Eigennamen (für Personen, Organisationen, geographische Objekte) Beispiele: • {“Harry Schearer”, “H. Schearer”, “Mr. Harry Schearer”}, “Secretary Robert Mosbacher”, “John Doe, Jr.” 5.1 Named Entity Recognition Eine typische Aufgabe der Computerlinguistik, bei der man reguläre Ausdrücke verwenden • {“Hyundai of Korea, Inc.”, “Hyundai, Inc. of Korea”}, “Bridgestone Sports Co.”, “University of California in Los Angeles” Reguläre Ausdrücke 8 • {“European Community”, “EU”, “The 5.2 Filtern und Sortieren von Meldungen Union”}, “NASDAQ”, “Labor Party”, “Trinity Lutheran Church” Eine bekannte derartige Anwendung ist das Fil- 2. Zeitbezeichnungen tern und Sortieren von verschiedenen Arten von Beispiele: {“twelve o’clock noon”, “12 am”, “12:00”, “12.00”, “12 o’clock”}, “5 p.m. EST”, “fiscal 1989”, “third quarter of 1991” , “the first half of fiscal 1990” Texten: • Ein erstes Beispiel dafür sind Mail- Filter-Systeme. Sie sollen bestimmte MailMeldungen ganz unterdrücken (z.B. Spam) Ein besonders häufiges Beispiel sind Datums- und/oder nach bestimmten Kriterien in ver- angaben wie z.B. die folgenden: schiedene In-Boxes des Mail-Readers leiten (sie also sortieren, oder routen). • “8. August 2001“ • Eine anderes Beispiel sind Systeme, welche • ”08.08.01“ Sammlungen von Meldungen (z.B. Newslists, • ”8. Aug. 01” 3. numerische Massangaben Meldungsströme von Nachrichtenagenturen) (Prozent-, nach bestimmtem Meldungen (z.B. Stellenan- Temperatur-, Geldbetragsangaben) zeigen, Konferenzankündigungen) durchsu- Beispiele: “20 million New Pesos”, “$42.1 mil- chen und diese extrahieren. lion”, “15 pct”, “£26 million ($43.6 million)” Wie die Beispiele zeigen, liegt ein besonderes Problem beim Erkennen dieser Ausdrücke darin, dass diese Ausdrücke oftmals viele Sonderzeichen enthalten, die bei der Tokenisierung besondere Schwierigkeiten bereiten (siehe die Lerneinheit zur Tokenisierung). Die Aufgabe ist in beiden Fällen die gleiche: Auf Grund von einfachen Mustern schnell eine grosse Anzahl von Texten bearbeiten. Sie finden im Folgenden eine ILAP, in der Meldungen in Newslists durch den Einsatz regulärer Ausdrücke nach verschiedenen Kriterien gefiltert werden sollen. Hierzu eine (ILAP) Datumserkennung und ein (QUIZ) Datumserkennung mit Regulären Ausdrücken Zur spezifischen Problematik der Erkennung von Eigennamen siehe auch Roth (2002). Neben der Named Entity Recognition, welche primär als eine Komponente umfassenderer Anwendungen nützlich ist, gibt es eine Reihe von Fällen, wo reguläre Ausdrücke in eigenständigen Anwendungen verwendet werden. In allen diesen Anwendungen kann man durch den sorgfältigen (und mengenmässig massiven!) Einsatz regulärer Ausdrücke recht schnell einen ersten (trügerischen) Eindruck von Sprachverstehen erzielen. Drei derartige Anwendungen von regulären Ausdrücken werden hier betrachtet. 5.3 Automatisches Beantworten von Meldungen Eine andere kommerziell sehr aktuelle Anwendung von Meldungsverarbeitung sind E-MailBeantwortungs-Systeme, also Systeme, welche die E-Mail von Kunden an Firmen nicht nur vorsortieren, sondern sogar mit einer entsprechenden Antwort versehen (und diese vor dem Versenden hoffentlich noch einem menschlichen Kontrolleur zur Freigabe vorlegen). Dabei wird versucht, für jede wichtige Frage die möglichen verschiedenen Formulierungen vorauszusehen, um jeweils die passende Antwort geben zu können. Auch diese Systeme versuchen, mit regulären Ausdrücke auszukommen. Im Unterschied zu den reinen Filter- und SortierSystemen wird hier aber mit jedem regulären Reguläre Ausdrücke 9 Ausdruck für eine spezifische Frage eine (vorge- eyethingo/eyethings/eyethingumy/ fertigte) Antwort verbunden. Da die möglichen eyethingummy/eyethinggy/eyethingy/ Formen, die eine Frage annehmen kann, sehr eyethingys/eyethingies/eyegimmick/ verschieden sind, ergeben sich dabei ziemlich monströse reguläre Ausdrücke. Ein konkretes eyegimmic/eyegimmik/eyegimick/eyegimic/ Beispiel für einen regulären Ausdruck, wie er in einem kommerziellen System2 verwendet wird, eyegimik/eyetrek/eyetreck/eyetrak/ eyetrack/eytreck/eitrek/eytrek/eytrack/ eytrak/eyetreks/eyettrecks/eyetrecks/ eyetraks/eyetracks/eytrecks/eytrecs/ kann als Illustration der Probleme dieses An- eytracs/eytracks/eitreks/eitrecs/unit/ satzes dienen (die verwendete Notation unter- units/((the/them/this/these/those)& scheidet sich in einigen Punkten von der oben glasses/shades/sunnies/sunglasses)/((it/ eingeführten (üblicheren) Repräsentation für re- one)&ˆeytrek)/{e-t})!{e.t.}) guläre Ausdrücke). ((((((((how/hwo/hou/hows/howz/how’s/hows Man beachte, dass auch die Tippfehlerkorrektur in diesem Ausdruck erfasst wird. Näheres zu diesem Thema erfahren Sie in ’))+(much/muhc))/howmuch/hwomuch)&( money/cash/dough/bread/pesetas/peseta/ der Lizentiatsarbeit von Metzinger (2002). dollar/dollars/bucks/buck/quid/cents/ euro/euros/dm/{$}/usd/penny/quarter/ dime/nickle))/((((how/hwo/hou/hows/howz/ 5.4 Chatterbots how’s/hows’)/(what/wot/waht/wat/waddya/ Ebenfalls sehr aktuell sind schliesslich die sog. whut)/(((what/wot/waht/wat/waddya/whut)+ Chatterbots oder auch Chatbots, d.h. Syste- is)/whats/what’s/wats/wat’s/wots/wot’s/ me, welche z.B. mit Besuchern von Firmen- wahts/waht’s/wotz))&(expensive/ Webseiten in natürlicher Sprache konversieren expencive/much/muhc/cost/costs/(does+ sollen. Für ausführlichere Informationen zu die- cost)/(do+cost)/cots/expense/expence/ sem Thema, siehe auch die Lerneinheit Dialog- expensivness/expensiveness/price/(retail +price)/rp))/(((((how/hwo/hou/hows/howz/ systeme im Clab. how’s/hows’))+(many/mayn/mani))/howmany/ Diese Systeme beruhen zum grössten Teil howmayn/((((how/hwo/hou/hows/howz/how’s/ ebenfalls auf einfacher Mustererkennung (in hows’))+(much/muhc))/howmuch/hwomuch))&( Fragen erkannte Muster lösen die Ausgabe (to+pay+(for/fro))/(money/cash/dough/ von “Konservenantworten” aus), was die Lei- bread/pesetas/peseta/dollar/dollars/ bucks/buck/quid/cents/euro/euros/dm/{$ stungsfähigkeit dieser Systeme in ganz prinzipieller Art einschränkt. Der vielleicht beste die- }/usd/penny/quarter/dime/nickle))))/(is ser Chatterbots ist ALICE3 , ein Open Source Pro- +(affordable/expensive/dear)/((cost/ jekt. Interessant an diesem System ist, dass eine price/expense)+(high/low/great/small/big spezifische Sprache für das Definieren der ver- /affordable))&%g?)/((can/may/might/ wendeten Muster besteht, die AIML (Artificial possible/possibility)&(buy/purchase/ acquire/aquire)&(i/me))/((is/are)&( Intelligence Markup Language). Aber es bleibt purchaseable/acquireable/(for+sale)/(on+ eben eine Sprache mit (offenbar nur) regulären the+market)/purchasable/acquirable))))) Ausdrücken, und daher lässt sich auch ALICE &((((eye/eyye/eyes/eie/e)+(t/trek/treck/ leicht aufs Glatteis führen: track/trak/treks/trecks/tracks/traks/ >Do you really understand human thing/thingamagic/thingamagik/thingi/ language? thingo/things/thingumy/thingummy/thinggy /thingy/gimmick/gimmic/gimmik/gimick/ ALICE: For real. Of course I understand gimic/gimik))/eyething/eyethingi/ 2 der “Marc” LingubotTM der Firma Kiwilogic, für die Firma Olympus entwickelt 3 http://www.alicebot.org/ siehe auch http://www-rohan.sdsu.edu/˜ling354/chatterbots.html it. Do you understand it? Reguläre Ausdrücke 10 > She didn’t want me in the >How do you do this? ALICE: I am very well, how are you? first place, I suppose. Can you elaborate on that? > Gosh, she just got married to (> I meant how come you understand my father for fear of becoming an old human languages? You are a spinster, and then she got machine, after all.) pregnant. It’s as simple as that. >You are a machine, after all. Who else in your family for (Alice ignoriert den ersten Satz) fear of becoming an old spinster and then she got pregnant its as ALICE: Thanks and you are a delightful person too. Yes I am an simple as that? > quit. artificial brain. Goodbye. My secretary will send >Do you know languages other you a bill. than English? Während die Idee, einen PsychotherapeuALICE: I know very little ten durch ein derartiges System zu ersetzen, als about it. What kind of it do eher abartig erscheinen muss, sind Anwendun- you like? gen in viel engeren (und weniger sensitiven) Die “Urgrossmutter” aller Chatterbots ist ELIZA4 , die Karikatur eines Psychotherapeuten (die aber, dem Vernehmen nach, bei einigen Patienten durchaus Anklang fand). Das System existiert in der Zwischenzeit in einer Vielzahl von Varianten (z.B. eine Prolog-Version5 ). Ein typischer L Dialog zeigt, was die Grenzen des Systems sind: Hello. I am ELIZA. How can I help you? Bereichen nicht von vornherein ausgeschlossen. So kann man sich schon vorstellen, mittels regulärer Ausdrücke spezifische Fragen zu einem (eng begrenzten) Thema automatisch beantworten zu lassen. Ein derartiges System soll dabei die Antworten des Benutzers so auswerten, dass auch nicht-triviale Fragen einigermassen sinnvoll beantwortet werden können. Das Ziel des Systems soll es also sein, einen Dialog wie etwa den folgenden zu erlauben: > my mother hates me. User: Tell me more about your family. your monitor?" > Oh, well, I have two sisters. I hate them, too. "My computer doesn’t work" Lingubot: "Do you see anything on User: "No" Lingubot: "Is the power indicator You say oh well you have two on your computer or on sisters you hate them too. > yes. your monitor lit?" User: "The one on the computer is" Lingubot: "The one on your monitor You seem quite positive. isn’t?" > of course. User: Lets discuss further why your mother hates you. 4 http://www-ai.ijs.si/eliza/eliza.html 5 http://www.lpa.co.uk/pws_exec/pws/proweb.exe?eg=Eliza "I don’t think so" Lingubot: "Please check the cable connecting the monitor to Reguläre Ausdrücke 11 Natürlich werden Sie mit dieser Methode your computer. Is it correctly plugged in and nur unvollkommene Ergebnisse erreichen. Er- are the safety screws fastened?" stens sagen Betreffzeilen oft nicht genug über den Inhalt einer Meldung aus, um eine klare Entscheidung über die L Relevanz zuzulassen. 5.5 ILAP: Filtern von Betreffzeilen Im Folgenden sollen die Möglichkeiten und Grenzen des Einsatzes von regulären Ausdrücken im beschriebenen Bereich anhand einer relativ einfachen Fragestellung vertieft werden. Die Aufgabe besteht darin, in einer Liste von Betreffzeilen einer Newslist folgende Arten von Zeilen zu identifizieren: In manchen Fällen wird Ihnen vielleicht Ihr L Weltwissen sagen, wie eine Betreffziele kategorisiert werden muss, aber oft werden Sie auch als Mensch kapitulieren müssen (und der Computer umso mehr). Ganz besonders trifft dies bekanntlich auf Spam zu, wo Betreffzeilen oft bewusst irreführend formuliert werden. Zweitens ist das Werkzeug der regulären Ausdrücke eben recht grob - zu grob für diese Aufgabe. Schlies- 1. Aufrufe zur Einreichung von Konferenzbei- slich kann nicht ausgeschlossen werden, dass trägen (Calls for Papers), und zwar auch Dead- einzelne der Meldungen falsch vor-klassifiziert line extensions für die Einreichung von Bei- sind (denn die Korrektheit von Treffern muss trägen etc. natürlich gegen einen handgefertigten Gold- 2. Alle Meldungen zu Konferenzen (also auch Aufrufe zur Teilnahme an Konferenzen, Angaben zu Daten von Konferenzen etc.) 3. Job-Angebote (auch für PhD-Positionen etc.) 4. Spam (unerwünschte Werbemeldungen) Sie sollten nun für jeden der vier Fälle jene standard bestimmt werden, und beim Erstellen dieser Musterklassifikation können uns sehr wohl Fehler unterlaufen sein). Grundlage des Experiments ist eine Liste von 2062 (echten, unmodifizierten) Betreffzeilen einer Newslist zum Thema der Künstlichen Intelligenz6 ; Sie können sie von innerhalb der ILAP aus aufrufen (“Betreffzeilen → anzeigen”). Folge von regulären Ausdrücken finden, welche (in Sequenz auf die einzelnen Zeilen ange- (ILAP) Filtern von Betreffzeilen wendet) alle gewünschten Zeilen, und nur diese, identifiziert und damit herausfiltert. Ein Mustereintrag ist vorgegeben; er ist nicht unbedingt 6 Theoretischer Hintergrund ideal und sollte modifiziert (oder entfernt) wer- Reguläre Ausdrücke sind zunächst einmal den. Sie können (und sollen) auch mit den Such- einfach zu spezifizieren. Einfach heisst da- optionen experimentieren. bei nicht unbedingt “leicht verständlich”, son- Das System meldet, welche Zeilen korrek- dern “gemäss formaler Kriterien wie Re- terweise und welche fälschlicherweise gefunden präsentations- und Verarbeitungskomplexität worden sind, und welche korrekterweise und einfach”, und genau das macht sie so attrak- welche fälschlicherweise nicht gefunden wor- tiv. Entsprechend lassen sich Sprachen, die RA den sind (und den Prozentsatz solcher falsch po- beschreiben (sogenannte reguläre Sprachen), sitiver und falsch negativer Treffer). Durch sy- mithilfe des einfachsten Grammatiktyps (soge- stematisches Vergleichen dieser Angaben (und dem Inspizieren der Gesamtliste) sollten Sie er- nannten Typ-3-Grammatiken) beschreiben. Sol- mitteln können, mit welchen regulären Aus- fizient verarbeitende Automaten (sogenannte drücken Sie die korrekten Zeilen identifizieren L Endliche Automaten) übersetzt werden, die können. 6 comp.ai.nat-lang che Grammatiken können nachweislich in ef- Reguläre Ausdrücke durch RA spezifizierte Zeichenketten schnell aufspüren. Eine gute Einstiegslektüre ist der Artikel Regulärer Ausdruck“ in Wikipedia. ” 7 Schluss Reguläre Ausdrücke bilden Muster für sprachliche Ausdrücke, nach denen in einer Zeichenkette gesucht werden kann. Um das Bilden von derartigen Mustern zu vereinfachen, gibt es vorgefertigte Zeichenklassen. Zeichen, die in der Syntax eines RA eine spezielle Bedeutung haben müssen speziell gekennzeichnet werden, wenn sie in ihrer “normalen” Bedeutung verwendet werden. Einen weiteren Vorteil bei der Suche mit Mustern bieten die Verankerungen, mit denen festgelegt wird, wo innerhalb einer Zeile oder eines Worts nach einem bestimmten Muster gesucht werden soll. RAs kommen in vielen Anwendungen der Computerlinguistik zum Einsatz, sei es bei der Tokenisierung, beim Erkennen von benannten Einheiten oder auch in Chatterbots. Hier finden Sie noch zwei letzte Übungen zur Lernkontrolle: (SET) Zeichenklassen, Wiederholungen, Disjunktion (SET) Unbegrenzte Wiederholung, Verankerung, Matching Strategien 12 Reguläre Ausdrücke 13 Literatur Metzinger, Björn: Automatische E-Mail Beantwortung. Theoretische Grundlagen und Aspekte praktischer Anwendung. Diplomarbeit, Institut für Computerlinguistik der Universität Zürich, 2002, hURL: http: //www.ifi.uzh.ch/cl/study/lizarbeiten/lizbjoernmetzinger.pdfi Roth, Jeannette: Der Stand der Kunst in der Eigennamen-Erkennung. Mit einem Fokus auf ProduktnamenErkennung. Diplomarbeit, Institut für Computerlinguistik der Universität Zürich, 2002, hURL: http: //www.ifi.uzh.ch/cl/study/lizarbeiten/lizjeannetteroth.pdfi