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