1 / 19

Definite Clause Grammar

Definite Clause Grammar. Natuurlijke taalverwerking week 5. 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. Zinsontleden in Prolog.

senona
Download Presentation

Definite Clause Grammar

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  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. 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]. vertaalt als • np(P0,P1) :- ‘C’(P0,jan,P1). (‘C’ is Sicstus’ voor woord.) Natuurlijke Taalverwerking

  9. 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]. Voorbeeld ? s([het,kind,koopt,een,ijsje,in,het,park],[]). 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 • ik denk aan Henk • * zij denkt aan Henk • wij denken aan Henk • *hij denken aan Henk Het onderwerp van de zin moet overeenstemmen in persoon en getal met de persoonsvorm: Natuurlijke Taalverwerking

  13. 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. 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 • Wim slaapt / *Wim slaapt Ben • Wim kent Ben / *Wim kent • Wim denkt aan Ben • *Wim denkt van Ben Werkwoorden leggen restricties op aan de argumenten waarmee ze combineren: 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. 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. 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

More Related