Lektion 6 Der Einfluss von Quantoren auf die Wortsuche
Am Ende der Lektion 5 lernten wir ein neues Zeichen kennen: das „+“!
Das Pluszeichen „+“ findet ein oder mehrere aufeinanderfolgende Vorkommen des voranstehenden Zeichens, bzw. Zeichengruppe oder Teilmusters
So etwas Ähnliches hatten wir doch schon! Wir erinnern uns:
Das Fragezeichen „?“ findet entweder kein oder genau ein Vorkommen des vorangegangenen Zeichens, bzw. Zeichengruppe oder Teilmusters
Der Stern „*“ findet entweder kein, ein oder mehrere aufeinanderfolgende Vorkommen des vorangegangenen Zeichens, bzw. Zeichengruppe oder Teilmusters
Die Zeichen „?“ „+“ und „*“ werden auch oft Quantoren genannt, weil sie Einfluss auf die Häufigkeit des voranstehenden Zeichens nehmen. Dieses Zeichen kann auch ein Ausdruck in einer runden Klammer sein – eine Zeichengruppe – sein! Dann bezieht sich der Quantor auf die in der runden Klammer angegebene Zeichenfolge.
Um diese Unterschiede herauszuarbeiten, bedienen wir uns eines Beispiels aus der Praxis:
Ich gebe den Ausdruck "^BITT(ER)$" vor. Danach spielen wir ein wenig, indem wir zwischen dem Klammerausdruck (ER) und dem $ wahlweise erst ein ?, dann ein + und dann ein * einfügen.
Guckt euch folgende Animation genau an und überlegt schon mal vor den nachfolgenden Erklärungen, woran es liegt, dass diese vier Variationen unterschiedliche Treffer matchen:
Der Ausdruck „^BITT(ER)$“ sucht nach der Zeichenfolge BITTER, wobei das B den Anfang des Wortes und ER das Ende des Wortes markieren. Lasst euch durch die runde Klammer nicht irritieren, die Abfrage ist ident mit „^BITTER$“. Hier spielt es keine Rolle, ob wir ER in einer Klammer zusammenfassen oder nicht. Das gilt übrigens auch für andere mögliche Gruppierungen wie "^BI(TT)ER$" oder "^BIT(TER)$" oder "^B(IT)T(ER)$".
Anders wird es, wenn die Quantoren ins Spiel kommen. Sie beeinflussen das Suchverhalten des PCs bezüglich des vorangehenden Zeichens bzw. der vorangehenden Zeichengruppe maßgeblich.
Fangen wir mit dem „?“ an: „^BITT(ER)?$“ BITT und BITTER sind die zwei Treffer: Der PC sucht nach einem (einzelnen) Wort BITT wahlweise darf es auch das Wort BITTER sein. Ohne die Ankerzeichen ^ und $ müsste es heißen: wir suchen innerhalb des zu durchsuchenden Wortschatzes nach der Zeichenfolge BITT.
Machen wir mit dem „+“ weiter: „^BITT(ER)+$“ Mit BITTER, BITTERER und BITTERERER sind hier drei Treffer zu verzeichnen: Der PC sucht nach einem Wort BITTER, wobei im Gegensatz zum vorherigen Beispiel auf die Zeichenfolge ER nicht verzichtet werden darf, sie darf/ kann – nicht muss - sich aber beliebig oft wiederholen. Gäbe es ein Wort BITTERERERER, es würde durch diese Abfrage als Treffer gematcht.
Beenden wir dieses Spielchen mit dem „*“: „^BITT(ER)*$“ BITT, BITTER, BITTERER und BITTERERER sind die vier Treffer. Der PC sucht nach einem Wort BITT, wobei hier auf die Zeichenfolge ER verzichtet werden kann, wahlweise kann die Zeichenfolge ER aber auch einmal bis beliebig oft hintereinander vorkommen.
Wir sehen: die Abfrage mit dem * ist die Abfrage, die die Funktionen der Quantoren ? und + in sich vereint und daher immer die meisten Treffer generiert.
Hier die ersten Hausaufgaben:
1. Vorgegeben wird der Ausdruck „MAG(ER)$“. 1.1 Wieviel Treffer matcht dieser Ausdruck und worin besteht der augenfällige Unterschied zur Abfrage „^BITT(ER)?$“ 1.2 Wieviel Treffer matcht der Ausdruck „MAG(ER)?$“ 1.3 Wieviel Treffer matcht der Ausdruck „MAG(ER)+$“ 1.4 Wieviel Treffer matcht der Ausdruck „MAG(ER)*$“
Anlässlich der Hausaufgaben zur Lektion 5 suchten wir u.a. nach allen Wörtern, die mit Q anfangen und nicht mehr als 5 Buchstaben aufweisen. Die Lösung war der Suchstring "^Q.?.?.?$"
Dieser Suchstring kann aber mit Hilfe des MiniMaxBefehls effizienter ausgedrückt werden.
Hier zunächst einmal die Definition des MiniMax-Befehls, der ebenfalls zu den Quantoren gezählt wird, da dieser Befehl wie *, + und ? Einfluss auf die Häufigkeit des voranstehenden Zeichens bzw. Zeichengruppe nimmt:
{min,max}: Der voranstehende Ausdruck muss mindestens „min“-mal und darf maximal „max“-mal vorkommen.
„min“ und „max“ ersetze man durch Zahlen. Wichtig ist darauf zu achten, dass die MiniMax-Funktion immer in geschweifte Klammern zu setzen ist.
Tasten wir uns schrittweise an das Verständnis des Suchstrings heran:
“^Q.$“ sucht nach Wörtern mit einem Q am Anfang, dem ein beliebiges Zeichen folgen muss, dass gleichzeitig auch das Ende des Wortes sein muss (QI)
“^Q..$“ sucht nach Wörtern mit einem Q am Anfang, dem zwei beliebige Zeichen folgen müssen, die gleichzeitig auch das Ende des Wortes markieren (QIS, QAT oder QUA)
“^Q.?.?$“ sucht nach Wörtern mit einem Q am Anfang, dem bis zu zwei beliebige Zeichen folgen können, aber nicht müssen. Gleichzeitig wird nach diesen optionalen Zeichen auch das Ende des Wortes gefordert (QI, QIS, QAT oder QUA). Gäbe es ein Wort Q, es würde von dieser Abfrage erfasst werden.
Der Suchstring“^Q.{0,2}$“ ist ident mit der Abfrage “^Q.?.?$“- durch die Klammer {0,2}wird der PC angewiesen, dass für den Punkt als Platzhalter für ein beliebiges Zeichen folgende Spielregeln gelten: Dem Q können null bis maximal zwei beliebige Zeichen folgen. Wichtig ist in diesem Zusammenhang zu wissen, das in diesem Beispiel die dem Q folgenden Zeichen nicht zueinander identisch sein müssen. Wenn also nach dem Q als erstes beliebiges Zeichen ein U folgt, muss dass optionale zweite Zeichen nicht unbedingt auch ein U sein. Die Definition beliebiges Zeichen ist also weit auszulegen – hat sich der PC beim optionalen ersten Punkt für ein U als Platzhalter entschieden, muss diese Entscheidung für einen optionalen zweiten Punkt nicht übernommen werden.
Dies vorausgeschickt sind wir nun in der Lage, unsere eingangs gestellte Aufgabe für die Suche nach allen Wörtern, die mit Q anfangen und nicht mehr als 5 Buchstaben aufweisen, auch wie folgt darzustellen: “^Q.{0,4}$“
Nun die nächste Hausaufgabe:
2. Wir suchen alle Wörter, die mit C anfangen und nicht mehr als 5 Buchstaben aufweisen. Formuliere den Suchstring dazu mit Hilfe des MinMaxBefehl!
Wir beenden diese Lektion mit dem Hinweis, dass der MinMaxBefehl auch aufgesplittet bzw. geteilt werden kann, indem man die Ober- oder Untergrenze einfach weglässt:
{min,}: Der voranstehende Ausdruck muss mindestens min-mal vorkommen
{,max}: Der voranstehende Ausdruck darf maximal max-mal vorkommen
Steht in der geschweiften Klammer nur eine Zahl, so gibt diese explizit an, wie oft das vorausgehende Zeichen bzw. die vorausgehende Zeichenfolge vorzukommen hat:
„^BITT(ER){1}$“ zum Beispiel matcht als Ergebnis nur BITTER, weil hier der geschweifte Klammerausdruch den PC anweist, nur Wörter zu suchen, wo dem BITT genau einmal hintereinander das ER folgt.
„^BITT(ER){2}$“ hingegen matcht als Ergebnis nur BITTERER, weil hier der geschweifte Klammerausdruch den PC anweist, nur Wörter zu suchen, wo dem BITT genau zweimal hintereinander das ER folgt.
„^BITT(ER){3}$“ zum Beispiel matcht als Ergebnis …
ja, welches Wort würde hier bei der Suche innerhalb von Geros SuperDic als Treffer angezeigt werden? Das ist die 3. und letzte Hausaufgabe!
In der nächsten Lektion werden wir uns mit Ausschluss von Buchstaben bei der Wortsuche näher befassen.
Gero
PS: Die Tabelle von Lektion 5 werden wir im Zuge der nächsten Lektionen um die bis dahin neu gelernten Befehle noch ergänzen!
Download: Geros Superdic, was sonst! | Discussion: Forum | News: Twitter | ... und im übrigen bin ich der Meinung, dass Wordfinder beim online-Spiel pfui sind!