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.

Slides:



Advertisements
Liknande presentationer
F. Drewes, Inst. f. datavetenskap1 Föreläsning 13: Resolution •Resolution i satslogiken •Resolution i predikatlogiken.
Advertisements

Ordklasser Substantiv Verb Pronomen Konjunktioner Adjektiv Adverb
Utveckla en applikation Kursbok: “Objects First with Java - A Practical Introduction using BlueJ”, David J. Barnes & Michael Kölling Fredric Ragnar
Idag Today Repetition: siffror, klockan Repetition: numbers, the clock
Svenska Grammatik.
1 Logikprogrammering ons 11/9 David Hjelm. 2 Repetition Listor är sammansatta termer. De består av en ordnad mängd element. Elementen i en lista kan vara.
Prolog, Mån 16/9 Rebecca Jonson.
SYNTAX Allmän Grammatik.
Böja den bestämda/obestämda artikeln.
Grammatik.
Den uppsats ni är på väg att skriva skall en vacker dag presenteras muntligt. I betygskriterierna för Svenska C står det att eleven, skall använda sig.
Logikprogrammering Ons, 25/9
Satsdelar.
Beskriver vilken funktion orden har i en sats.
Namn på saker Ord man kan sätta en, ett eller flera framför
Växjö 21 april -04Språk & logik: Kontextfria grammatiker1 DAB760: Språk och logik 21/4: Kontextfria 10-12grammatiker Leif Grönqvist
Växjö 22 april -04Språk & logik: Parsning med kontextfria grammatiker1 DAB760:Språk och logik: 22 aprilParsning Leif Grönqvist
Föreläsning 2 Datalogi för E1 2D1343
Växjö 29 april -04Språk & logik: Kontextfria grammatiker i språkteknologi1 DAB760, 29 april Kontextfria grammatiker i språkteknolog Leif Grönqvist
Ordklasser Substantiv Verb Pronomen Konjunktioner Adjektiv Adverb
© Patrick Blackburn, Johan Bos & Kristina Striegnitz FL 5: Aritmetik Teori –Introducerar Prologs inbyggda operationer för aritmetik –Tillämpar dessa på.
© Patrick Blackburn, Johan Bos & Kristina Striegnitz FL 6: Definite Clause Grammars (kap. 7) Teori –Introducerar kontextfria grammatikor och några besläktade.
Lättläst på webben Mittuniversitet 2 och 23 april 2007
Presupposition gemensam kunskap som inte behöver påstås eller förklaras förutsatt information - bakgrundsantaganden konventionaliserade bärare av implicit.
Från binära till hexadecimala
Formell logik Kapitel 1 och 2
Lennart Edblom, Frank Drewes, Inst. f. datavetenskap 1 Föreläsning 6: Semantik Statisk semantik Attributgrammatiker Dynamisk semantik Axiomatisk.
1 Föreläsning 5 Programmeringsteknik och Matlab 2D1312/2D1305 Repetition Metoder Array API och klassen ArrayList.
Logikprogrammering 21/10 Binära träd
Kenneth Wilhelmsson 1 Logikprogrammering 10 P Onsdag 20 november 2002.
Läsbar prolog CM 8.1. allmäna principer correctness user-friendliness efficiency readability modifiability robustness documentation.
Logikprogrammering 16/ : operatorer Staffan Larsson.
Labgrupper: 2 pers/grupp fr o m lab 2 schema ENKÄT.
Simulering Introduktion Exempel: Antag att någon kastar tärning
F. Drewes, Inst. f. datavetenskap1 Föreläsning 4: Syntaxdefinition Formell syntaxdefinition Lexikalisk och kontextfri syntax Flertydighet i kontextfri.
Ackumulatorer CM 3.7 AOP 8.3 (BBS 5.3, 6.2.2). dagens föreläsning rekursion iteration ackumulatorer för effektivitet exempel.
Syntaktiska funktioner
Aritmetik 3.4 M 8.2 E 2.2. dagens föreläsning operatorer för aritmetik tillämpningar.
Föreläsning 9 Logik med tillämpningar Innehåll u Semantiska tablåer i predikatlogiken u Klausulform u Herbrandmodeller u Kapitel 3.5,
Föreläsning 13 Logik med tillämpningar Innehåll u Aritmetik i Prolog u Rekursiva och iterativa program u Typpredikat u Metalogiska predikat.
Lennart Edblom, Frank Drewes, Inst. f. datavetenskap 1 Föreläsning 12: -kalkylen allmänt om -kalkylen syntax semantik att programmera i -kalkylen.
Karl-Henrik Hagdahl, 11 november Repetition Logikprogrammering: måndag 11 november 2002.
F. Drewes, Inst. f. datavetenskap1 Föreläsning 5: Syntaxanalys (parsning) Syntaxanalysens mål Tillvägagångssätt och komplexitet Syntaxanalys.
Pontus Johansson 1 grammatiker 21.1 G 1 (BBS 7)
Föreläsning 14 Logik med tillämpningar Innehåll u Cuts och negation u Input/output u Extralogiska predikat u Interaktiva program, failure-drivna.
F. Drewes, Inst. f. datavetenskap1 Föreläsning 12: -kalkylen allmänt om -kalkylen syntax semantik att programmera i -kalkylen.
Procedurellt potpurri Dagens samtalsämnen –Klipp (Cut) –If-then-else –fail/0 –repeat/0 Att läsa –The Art of Prolog, kapitel 11 –Relevant avsnitt i Learn.
@ Anna Sågvall Hein 2005 Uppsala Chart Processor - UCP icke-deterministisk chartparser procedurell formalism versioner –UCP-1, UCP2 –UCP3 (light)
Pickering Robust semantisk parser Del i HIGGINS- projektet –Felhantering i dialogsystem –Navigering i stadsmiljö.
Föreläsning 1 Introduktion till kursen. Algoritmer
Lennart Edblom, Frank Drewes, Inst. f. datavetenskap 1 Föreläsning 4: Syntaxdefinition Formell syntaxdefinition Lexikalisk och kontextfri syntax.
Logikprogrammering ons 4/9 Rebecca Jonson.
Huvudsats och bisats– att bygga meningar
Johanna Ståhl, Pilängskolan, Lomma –
SPRÅKLIG MEDVETENHET/UPPMÄRKSAMHET
Välkomna till kvällens föräldramöte i klass 2a.
Bedömning av text Innehåll Texten är lätt att följa och förstå. Innehållet stämmer med uppgiften och följer instruktionerna. Längden på texten är tillräcklig.
Börja och avsluta med tid
Satsbegreppet. Begreppen mening och sats På svenska talar man ofta om meningar och satser, men på tyska finns inte begreppet mening. På svenska används.
Ordklasser Svensk grammatik Johanna Ståhl, Pilängskolan, Lomma –
ORDKLASSERNA I SVENSKA SPRÅKET
Instruerande text.
Formell logik Kapitel 1 och 2
Träna svenska A och B ett till tio 1-10
SUBSTANTIV Obestämd form (indefinite) Singular och plural (numerus)
Basic Swedish 1 Lektion 4, den 15 februari Välkomna
Grammatisk terminologi I
Föräldramöte VT- 17 Välkomna!.
Inför NP Svenska Våren 2019.
Relativpronomen.
Presentationens avskrift:

dcg-notation 21.2 G 2.3 M (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 en grammatik är en ändlig samling regler som definierar ett språk cfg-regler har i prolog formen: x 0 --> x 1, …, x n. där x 0 är icke-terminal och x i kan vara terminal eller icke-terminal

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

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]. icke-terminaler terminaler

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”)

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

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.

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,å] ? …

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

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

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). observera ariteten! ”dolda” argument

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].

numerus med hjälp av argument % 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).

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] ? ; […]

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].

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

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

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].

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

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)

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].

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)))))

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]

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

separera lexikon från grammatik grammatik består av regler –inga konkreta ord lexikon består av ord –inga abstrakta regler

exempel 1 %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 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)

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

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 –…–…

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