Einführung in die Methoden der Künstlichen Intelligenz - Goethe ...
Einführung in die Methoden der Künstlichen Intelligenz - Goethe ...
Einführung in die Methoden der Künstlichen Intelligenz - Goethe ...
Erfolgreiche ePaper selbst erstellen
Machen Sie aus Ihren PDF Publikationen ein blätterbares Flipbook mit unserer einzigartigen Google optimierten e-Paper Software.
5.4 Sprachverarbeitung und Parsen <strong>in</strong> Prolog<br />
s --> [a,b].<br />
s --> [a], s, [b].<br />
D.h. anstelle von → wird --> benutzt, Term<strong>in</strong>ale werden <strong>in</strong> Listenklammern geschrieben<br />
und Folgen werden durch Kommata getrennt. Tatsächlich wird hier nur syntaktischer Zucker<br />
verwendet, d.h. Prolog übersetzt <strong>die</strong>se sogenannte Def<strong>in</strong>ite Clause Grammar (DCG)<br />
– <strong>die</strong> <strong>in</strong> <strong>die</strong>sem Fall auch e<strong>in</strong>e CFG ist – <strong>in</strong> Hornklauseln. Dabei werden <strong>die</strong> Nichtterm<strong>in</strong>ale<br />
<strong>in</strong> Prädikate übersetzt, <strong>die</strong> jedoch zwei weitere Argumente zur Verarbeitung <strong>der</strong> E<strong>in</strong>gabe<br />
erhalten. D.h. im Beispiel wird durch <strong>die</strong> DCG das zweistellige Prädikat s def<strong>in</strong>iert. Die<br />
Argumente stellen dabei gerade <strong>die</strong> E<strong>in</strong>gabeliste als Differenzliste dar (wobei e<strong>in</strong> Paar<br />
(L 1 , L 2 ) verwendet wird, und nicht <strong>die</strong> Darstellung L 1 − L 2 ). Wir betrachten zunächst<br />
e<strong>in</strong>ige Beispielaufrufe für unser Programm.<br />
?- s([a,a,b,b],[]).<br />
true.<br />
?- s([a,b,b,a],[]).<br />
false.<br />
?- s([a,a,a,b,b,b],[]).<br />
true.<br />
?- s([a,a,a,b,b,b|X],X).<br />
true .<br />
?- s([a,a,a,b,b,b,c,d],[c,d]).<br />
true.<br />
Die genaue Übersetzung ist: Sei <strong>die</strong> Produktion n --> n1,...,nm, wobei alle ni zunächst<br />
Nichtterm<strong>in</strong>ale seien. Dann wird für jede solche Produktion <strong>die</strong> Klausel<br />
n(E<strong>in</strong>gabe,Rest) :- n1(E<strong>in</strong>gabe,Rest1), n2(Rest1,Rest2),..., nm(Restm,Rest)<br />
erzeugt, d.h. <strong>die</strong> Differenzliste wird quasi sequentiell aufgeteilt: Jedes <strong>der</strong> Nichtterm<strong>in</strong>ale<br />
ni nimmt sich zur Verarbeitung gerade soviele Elemente aus <strong>der</strong> Liste wie es zur Verarbeitung<br />
benötigt.<br />
Die Übersetzung <strong>der</strong> Term<strong>in</strong>ale erfolgt dementsprechend: Man kann z.B. annehmen,<br />
dass e<strong>in</strong> Prädikat term<strong>in</strong>al zur Verarbeitung aller Term<strong>in</strong>ale h<strong>in</strong>zugefügt wird, mit <strong>der</strong><br />
Def<strong>in</strong>ition<br />
term<strong>in</strong>al(Term<strong>in</strong>ale,E<strong>in</strong>gabe,Rest) :- append(Term<strong>in</strong>ale,Rest,E<strong>in</strong>gabe).<br />
Wenn ni gerade <strong>die</strong> Liste [t1,...,tk] von Term<strong>in</strong>alen ist, dann wird ni ersetzt durch<br />
term<strong>in</strong>al([t1,....,tk],RestI −1,RestI) Man kann auch auf <strong>die</strong> Verwendung des Prädikats<br />
term<strong>in</strong>al verzichten und <strong>die</strong> Bed<strong>in</strong>gungen direkt ko<strong>die</strong>ren.<br />
Kehren wir zurück zur Beispielgrammatik und übersetzen <strong>die</strong>se nach obiger Anleitung<br />
<strong>in</strong> Prolog-Hornklauseln:<br />
M. Schmidt-Schauß & D. Sabel, Skript KI, WS 2012/13 183 Stand: 7. Januar 2013