Spracherkennung mit der Brute-Force-Methode

Eine Grammatik für Gleitkommazahlen

Ziel ist es, die Spracherkennung über Ableitungen mit den Produktionen einer Grammatik zu automatisieren.

Wir vereinfachen zunächst die Darstellung der Produktionen:

Grammatikregeln - in Langform Grammatikregeln - in Kurzform
floatnumber -> pointfloat
floatnumber -> exponentfloat
F -> P
F -> E
pointfloat -> fraction
pointfloat -> intpart fraction
pointfloat -> intpart "."
P -> R
P -> IR
P -> I.
exponentfloat -> intpart exponent
exponentfloat -> pointfloat exponent
E -> IX
E -> PX
intpart -> digit
intpart -> digit intpart
I -> D
I -> DI
fraction -> "." intpart
R -> .I
exponent -> "e" intpart
exponent -> "E" intpart
exponent -> "e" "+" intpart
exponent -> "E" "+" intpart
exponent -> "e" "-" intpart
exponent -> "E" "-" intpart
X -> eI

X -> e+I

X -> e-I

digit -> "0"
digit -> "1"
digit -> "2"
digit -> "3"
digit -> "4"
digit -> "5"
digit -> "6"
digit -> "7"
digit -> "8"
digit -> "9"
D -> 0
D -> 1
D -> 2
D -> 3
D -> 4
D -> 5
D -> 6
D -> 7
D -> 8
D -> 9

Beachte, dass wir hier darauf verzichten, den Exponenten mit "E" darzustellen. Das liegt letztlich daran, weil dann Großbuchstaben als Nichtterminalsymbole gedeutet werden können.

Spracherkennung mit Hilfe von Produktionen

Spracherkennung mit Hilfe von Produktionen scheint ganz einfach zu sein. Man muss - ausgehend vom Startsymbol - lediglich die "richtigen" Produktionen anwenden. Schon hat man gezeigt, dass die betreffende Gleitkommazahl korrekt gebildet ist.

F ->    # mit F->P
P ->    # mit P->I.
I. ->   # mit I->DI
DI. ->  # mit D->2
2I. ->  # mit I->D
2D. ->  # mit D->1
21.     

Nur, woher weiß man, welche Produktion die richtige ist? Als Mensch hat man Überblick und kann die richtige Produktion auswählen. Ohne diese Übersicht muss man mit anderen Strategien an die Auswahl der anzuwendenen Produktionen gehen, z.B. so:

F ->    
    P ->    
        R ->    
            .I  # keine Fortsetzung möglich
        IR ->   
            DR ->   
                0R  # keine Fortsetzung möglich
                1R  # keine Fortsetzung möglich
                2R  
                    2.I  # keine Fortsetzung möglich
            DIR ->  
...      	                   

Aufgabe 1

(a) Welche Strategie wird hier benutzt, um eine Ableitung zum Wort 21. zu finden?

(b) Setze die Ableitungsversuche passend zur Strategie um einige Schritte weiter fort.

(c) Warum könnte man die benutzte Strategie als "Brute-Force-Strategie" bezeichnen?

Experimente mit JFlap

Mit Hilfe des Software-Werkzeugs JFlap kann man die Worterkennung mit Grammatiken experimentell testen.

Zunächst gibt man die Grammatik im Grammatik-Editor ein.

JFlap

Zum Testen wählt man der Reihe nach die Menupunkte [Input] und [Brute Force Parse] aus. In das [Input]-Feld gibt man die zu analysierende Zeichenfolge ein, z.B. 21.. Mit dem Menupunkt [Start] wird jetzt die Suche nach einer Ableitung zum eingegebenen Wortes mit Hilfe der vorgegebenen Ersetzungsregeln gestartet. Achtung, diese Suche kann eine Weile dauern. Wenn sie erfolgreich beendet wird, dann erhält man eine positive Rückmeldung und kann sich die Ableitung anzeigen lassen.

JFlap

Aufgabe 2

(a) Probiere das selbst aus.

(b) Wie verhält sich JFlap, wenn die zu analysierenden Zeichenketten länger werden? Hast du eine Erklärung hierfür?

(c) Ist die Brute-Force-Methode eine praktikable Methode zur Spracherkennung bei Gleitkommazahlen? Woran liegt das?

X

Fehler melden

X

Suche