SlideServe
Menu
Préférences
© SlideServe · v2026

dcg-notation

laban avatar
31 diapositives · 515 Views · Oct 21, 2014

dcg-notation. 21.2 G 2.3 M 8.1.2 (BBS 8). dagens föreläsning. extra argument i dcg-notation prolog-anrop i dcg-notation avslutande kommentarer om dcg. repetition. ett språk är en ändlig mängd satser en sats är en lista av terminaler

dcg-notation - slide 1
01 / 31dcg-notation
1 / 17

Télécharger la présentation

dcg-notation
Une image / un lien ci-dessous est fourni (tel quel) pour télécharger la présentation

Politique de téléchargement : le contenu du site vous est fourni TEL QUEL pour votre information et votre usage personnel ; il ne peut être vendu, concédé sous licence ni partagé sur d’autres sites sans l’accord de son auteur.Le contenu vous est fourni TEL QUEL, pour votre information et votre usage personnel uniquement. Téléchargez la présentation en cliquant sur ce lien. Lors du téléchargement, si vous ne parvenez pas à télécharger une présentation, l’éditeur a peut-être supprimé le fichier de son serveur.Pendant le téléchargement, si vous ne parvenez pas à obtenir une présentation, le fichier a peut-être été supprimé par l’éditeur.

F I N

Plus de contenu associé

Transcription de la présentation
  1. dcg-notation 21.2 G 2.3 M 8.1.2 (BBS 8)

  2. dagens föreläsning • extra argument i dcg-notation • prolog-anrop i dcg-notation • avslutande kommentarer om dcg

  3. repetition • ett språk är en ändlig mängd satser • en sats är en lista av terminaler • en grammatik är en ändlig samling regler som definierar ett språk • cfg-regler har i prolog formen: x0 --> x1, …, xn . där x0 är icke-terminal och xi kan vara terminal eller icke-terminal

  4. repetition • implementera cfg: • append • differenslistor • dcg-notation • parsning av meningen [en,hund,jagar,en,bil] • append: • differenslistor/dcg: 56 instruktioner 30 instruktioner

  5. icke-terminaler terminaler repetition • vi använde dcg-notation för att skriva cfg-regler: s --> np, vp . np --> det, n. vp --> v, np. det --> [en]. n --> [hund]. n --> [bil]. v --> [jagar].

  6. repetition • inom NLP kan cfg bl a användas för: • parsning • dvs ”känna igen” samt ge struktur åt satser • generering • dvs konstruera satser (parsningens ”motsats”)

  7. en cfg för siffror siffra --> ”ett”. siffra --> ”två”. … siffra --> ”nio”. • ”ett” = [e,t,t] != [ett]

  8. fler siffror ental --> ”ett”. ental --> ”två”. ental --> ”tre” . … tontal --> "tio". tontal --> "elva". tontal --> "tolv". … tiotal --> ”tjugo”. tiotal --> ”trettio”. … under100 --> ental . under100 --> tontal . under100 --> tiotal, ental.

  9. körning… ?- under100(X,[]). X = [e,t,t] ? ; X = [t,v,å] ? ; … X = [t,i,o] ? ; X = [e,l,v,a] ? ; … X = [t,j,u,g,o,e,t,t] ? ; X = [t,j,u,g,o,t,v,å] ? ; … X = [t,r,e,t,t,i,o,e,t,t] ? ; X = [t,r,e,t,t,i,o,t,v,å] ? …

  10. körning… ?- under100("trettiotre",[]). yes

  11. argument • definite clause grammar (dcg) utökar cfg genom att tillåta argument i vänsterledet. % exempel på dcg med argument siffra(0) --> ”noll” . % = [n,o,l,l] siffra(1) --> ”ett” . % = [e,t,t] siffra(2) --> ”två” . % != [två] … ?- siffra(X, ”två”, ””). X = 2

  12. observera ariteten! ”dolda” argument argument (forts.) • dcg: siffra(1) --> ”ett” . • ”vanlig” prolog ger: siffra(1, List1, Rest) :- ’C’(List1,e, List2), % ’C’ kan läsas som ”terminal” ’C’(List2,t, List3), % se SICStus-manualen! ’C’(List3,t, Rest).

  13. numerus i naturligt språk s --> sing_sentence . s --> pl_sentence . sing_sentence --> sing_np, sing_vp . pl_sentence --> pl_np, pl_vp . sing_np --> sing_det, sing_noun . sing_vp --> sing_verb . sing_vp --> sing_verb, np . … sing_noun --> [dog]. pl_noun --> [dogs].

  14. % ett extra argument för numerus s(Num) --> np(Num), vp(Num) . vp(Num) --> v(Num), np(Num2) np(Num) --> det(Num),n(Num) . n(sing) --> [dog]. n(pl) --> [dogs]. n(sing) --> [car]. n(pl) --> [cars]. v(sing) --> [chases]. v(pl) --> [chase]. det(sing) --> [a]. det(pl) --> [the]. ”vanlig prolog”: s(Num, List1, Rest) :- np(Num,List1,List2), vp(Num,List2,Rest). numerus med hjälp av argument

  15. körning… ?- s(pl,X,[]). X = [the,dogs,chase,a,dog] ? ; X = [the,dogs,chase,a,car] ? ; X = [the,dogs,chase,the,dogs] ? ; X = [the,dogs,chase,the,cars] ? ; […] ?- s(sing,X,[]). X = [a,dog,chases,a,dog] ? ; X = [a,dog,chases,a,car] ? ; X = [a,dog,chases,the,dogs] ? ; X = [a,dog,chases,the,cars] ? ; […]

  16. bestämd/obestämd form s(Num,Det) --> np(Num, Det), vp(Num, Det) . vp(Num,Det) --> v, np(Num2,Det2) . np(Num,Det) --> det(Num,Det),n(Num,Det) . np(Num,Det) --> n(Num,Det). n(sing,obest) --> [hund]. n(sing,best) --> [hunden]. n(sing,obest) --> [bil]. n(sing,best) --> [bilen]. n(pl,obest) --> [hundar]. n(pl,best) --> [hundarna]. n(pl,obest) --> [bilar]. n(pl,best) --> [bilarna]. v --> [jagar]. % jfr engelska: v(sing) --> [chases]. v(pl) --> [chase].

  17. körning… ?- s(sing,Det,X,[]). X = [en,hund,jagar,en,hund], Det = obest ? ; … X = [den,hunden,jagar,en,bil] ? Det = best ?; …

  18. körning… ?- s(Num,Det,[den,hunden,jagar,en,bil],[]). Num = sing, Det = best

  19. fler argument % enkel grammatik som genererar ett ”parse-träd” s(Num,Det,s(NP,VP)) --> np(Num, Det, NP), vp(Num, Det, VP) . vp(Num,Det,vp(V,NP)) --> v(V), np(Num2,Det2,NP) . np(Num,Det,np(N)) --> n(Num,Det,N) . n(sing,obest,n(hund)) --> [hund]. n(sing,best,n(hunden)) --> [hunden]. n(sing,obest,n(bil)) --> [bil]. n(sing,best,n(bilen)) --> [bilen]. n(pl,obest,n(hundar)) --> [hundar]. n(pl,best,n(hundarna)) --> [hundarna]. n(pl,obest,n(bilar)) --> [bilar]. n(pl,best,n(bilarna)) --> [bilarna]. v(v(jagar)) --> [jagar].

  20. s np vp n v np n hunden jagar bilarna körning… ?- s(Num,Det,Tree,[hunden, jagar, bilarna],[]). Det = best, Num = sing, Tree = s(np(n(hunden)),vp(v(jagar),np(n(bilarna))))

  21. pp • vi tar oss an prepositionsfraser (pp): • kan följa verbfraser • och även substantivfraser • består av en preposition (prep) följd av en np (i vårt enkla fall bara ett n)

  22. exempel s(s(NP,VP)) --> np(NP), vp(VP) . np(np(X,Y)) --> art(X),n(Y) . np(np(A,N,PP)) --> art(A), n(N), pp(PP) . vp(vp(V,NP,PP)) --> v(V), np(NP), pp(PP) . vp(vp(V,NP)) --> v(V), np(NP). pp(pp(P,N)) --> p(P), n(N) . v(v(jagar)) --> [jagar] . art(art(en)) --> [en]. n(n(hund)) --> [hund] . n(n(bil)) --> [bil] . n(n(gevär)) --> [gevär] . p(p(med)) --> [med] .

  23. körning… ?- s(Tree,[en,hund,jagar,en,bil,med,gevär],[]). Tree = s(np(art(en),n(hund)),vp(v(jagar),np(art(en),n(bil)),pp(p(med),n(gevär)))) Tree = s(np(art(en),n(hund)),vp(v(jagar),np(art(en),n(bil),pp(p(med),n(gevär)))))

  24. prologanrop i dcg-regler • utöka siffer-reglerna med flera siffror: siffra(0) --> ”noll” . … siffra(9) --> ”nio” . siffror([N]) --> siffra(N). siffror([N|Tail]) --> siffra(N), ”,”, siffror(Tail). ?- siffror(X, ”ett,noll,två,två”, ””). X = [1,0,2,2]

  25. prologanrop (forts.) siffersumma(N) --> siffra(N). siffersumma(N) --> siffra(N0), ”,”, siffersumma(N1), { plus(N0,N1,N) } . plus(X,Y,Summa) :- Summa is X+Y . ?- siffersumma(Sum, ”ett,noll,två,två”, ””). Sum = 5

  26. separera lexikon från grammatik • grammatik består av regler • inga konkreta ord • lexikon består av ord • inga abstrakta regler

  27. %lexikon lex(the,det). lex(a,det). lex(dog,n). lex(car,n). lex(chase,v). %grammatik det --> [Det], {lex(Det,det)} . n --> [Noun], {lex(Noun,n)} . v --> [Verb], {lex(Verb,v)} . exempel 1

  28. exempel 2 • ett annat sätt att hantera lexikon: n(n(Ord)) --> [Ord], { subst(Ord) } . subst(Ord) :- member(Ord, [hund,bil,snok,…]). • (vi antar att member/2 är definierat)

  29. översättning till ”ren” prolog n(n(Ord)) --> [Ord], { subst(Ord) } . n(n(Ord),[Ord|Rest],Rest) :- subst(Ord).

  30. utöka lexikonet • hittills har vi rört oss med syntax (n, v, sg, pl, …) • men lexikon kan också innehålla information om t ex: • fonologi • morfologi (”mini-lexicon”) • semantik • …

  31. hur bra är det här då? • dcg är ett ”programmeringsspråk” i sig själv (kan generera kontextuella språk). Alltså kraftfullt! • lingvistiskt sett finns några problem… • …men för snabb implementering/test av domänspecifika applikationer i naturligt språk är det snabbt och enkelt