Download de presentatie
De presentatie wordt gedownload. Even geduld aub
1
Definite Clause Grammar
Natuurlijke taalverwerking week 5
2
Zinsontleden in Prolog: parsing as deduction
Een herschrijfregel vertoont enige overeenkomst met een Prolog-regel: S --> NP VP Je kunt een S afleiden door een NP en een VP af te leiden s :- np, vp. Natuurlijke Taalverwerking
3
Zinsontleden in Prolog
Verschil tussen herschrijfregel en Prolog:(woord-)volgorde. De volgende Prolog-regels zijn equivalent: s :- np, vp. s :- vp, np s :- np, vp, np. De corresponderende herschrijfregels niet. Natuurlijke Taalverwerking
4
Woordvolgorde toevoegen
s(P0,P1) : een s van positie P0 tot P1. s(P0,P2) :- np(P0,P1), vp(P1,P2). Regels die woorden introduceren: np(P0,P1) :- woord(P0,jan,P1). Invoer weergeven (assert) als: woord(0,de,1). woord(1,man,2). woord(2,slaapt,3). Natuurlijke Taalverwerking
5
Stringposities als lijsten
Invoer: [de,man,slaapt] Positie 0: [de,man,slaapt] Positie 1: [man,slaapt] Positie 2: [slaapt] Positie 3: [] (tevens: zinseinde) Invoer hoef je nu niet meer apart toe te voegen: Natuurlijke Taalverwerking
6
Natuurlijke Taalverwerking
Posities als lijsten: ? s([de,man,slaapt],[]). ? det([de,man,slaapt],P1) ? woord([de,man,slaapt],de,P1). algemene regel: woord([Woord|Wn],Woord,Wn). Natuurlijke Taalverwerking
7
Definite clause grammar
Iedere herschrijfregel bevat twee argumenten die stringposities coderen. Regels die een woord introduceren, verwijderen (‘poppen’) het eerste woord van een lijst. Deze twee mechanismen zijn ingebouwd in de Prolog DCG-notatie. Natuurlijke Taalverwerking
8
Definite clause grammar II
s --> np, vp. vertaalt als s(P0,P2) :- np(P0,P1), vp(P1,P2). np --> [jan]. np(P0,P1) :- ‘C’(P0,jan,P1). (‘C’ is Sicstus’ voor woord.) Natuurlijke Taalverwerking
9
Voorbeeld ? s([het,kind,koopt,een,ijsje,in,het,park],[]).
s --> np, vp. np --> det, n. vp --> v, np. vp --> v, np, pp. vp --> v, pp. pp --> p, np. det --> [een]. det --> [het]. n --> [kind]. n --> [ijsje]. n --> [park]. v --> [koopt]. v --> [loopt]. v --> [in]. Natuurlijke Taalverwerking
10
Strings als difference lists
Dit is een alternatieve manier om CFG-regels als Prolog op te schrijven: s(String) :- append(NP,VP,String), np(NP), vp(VP). np([jan]). vp(String) :- append(V,NP,String), v(V), np(NP). Nadeel : non-deterministisch gebruik van append! Natuurlijke Taalverwerking
11
Strings als difference-lists
Je kunt de string-posities van een DCG ook zien als een difference-list, die append overbodig maakt: s(In,Out) :- np(In,Mid), vp(Mid,Out). vp(In,Out) :- v(In,Mid), np(Mid,Out). np([jan|Rest],Rest). Natuurlijke Taalverwerking
12
Congruentie/Agreement
Het onderwerp van de zin moet overeenstemmen in persoon en getal met de persoonsvorm: ik denk aan Henk * zij denkt aan Henk wij denken aan Henk *hij denken aan Henk Natuurlijke Taalverwerking
13
Natuurlijke Taalverwerking
DCG is veel meer dan CFG s > np(P,G), vp(P,G). vp(P,G) --> v(P,G), pp. np(1,enk) --> [ik]. np(1,mv) --> [wij]. v(1,enk) --> [denk]. v(1,mv) --> [denken]. s(P0,P2) :- np(P,G,P0,P1),vp(P,G,P1,P2). Natuurlijke Taalverwerking
14
Natuurlijke Taalverwerking
De/Het-onderscheid np --> det(Det), n(Det). det(de) --> [de]. det(het) --> [het]. det(_) --> [een]. n(de) --> [hond]. n(het) --> [hondje]. Natuurlijke Taalverwerking
15
Selectie van argumenten
Werkwoorden leggen restricties op aan de argumenten waarmee ze combineren: Wim slaapt / *Wim slaapt Ben Wim kent Ben / *Wim kent Wim denkt aan Ben *Wim denkt van Ben Natuurlijke Taalverwerking
16
Selectie van argumenten
vp --> v(intrans). vp --> v(trans), np. vp --> v(Prep), pp(Prep). pp(Prep) --> p(Prep), np. v(intrans) --> [slaapt]. v(trans) --> [kent]. v(aan) --> [denk]. p(aan) --> [aan]. Natuurlijke Taalverwerking
17
Natuurlijke Taalverwerking
Het Woordenboek v(1,enk) --> [aai]. v(2,enk) --> [aait]. v(_,mv) --> [aaien]. ….. v(1,enk) --> [zwijg]. v(2,enk) --> [zwijgt]. v(_,mv) --> [zwijgen]. Natuurlijke Taalverwerking
18
Accolades Soms is het handig `gewone’ Prolog-code en DCG-notatie te combineren. v(1,enk) --> [Woord], {ww(Woord,_,_)}. v(2,enk) --> [Woord], {ww(_,Woord,_)}. v(_,mv) --> [Woord], {ww(_,_,Woord)}. ww(aai,aait,aaien). ww(zwijg,zwijgt,zwijgen). v(1,enk,P0,P1) :- ‘C’(P0,Wd,P1), ww(Wd,_,_). Natuurlijke Taalverwerking
19
Natuurlijke Taalverwerking
Links-recursie DCG heeft één groot nadeel: Links-recursieve regels leiden tot een eindeloze lus. n --> n, pp vp --> vp, pp. n(P0,P2) :- n(P0,P1), pp(P1,P2) Natuurlijke Taalverwerking
Verwante presentaties
© 2024 SlidePlayer.nl Inc.
All rights reserved.