© Patrick Blackburn, Johan Bos & Kristina Striegnitz FL 6: Definite Clause Grammars (kap. 7) Teori –Introducerar kontextfria grammatikor och några besläktade.

Slides:



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

PowerPoint av Bendik S. Søvegjarto Koncept, text och regler av Skage Hansen.
Golv, väggar, tak. fönster och en dörr
hej och välkomna EKVATIONER Ta reda på det okända talet.
Varför grammatik? Vad är ordklasser?
Funktioner och programorganisation
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.
Logikprogrammering, Mån 23/9 Rebecca Jonson. Repetition P :- Q, R. Deklarativ syn: –P är sann om Q och R är sanna. –Av Q och R följer P Procedurell syn:
© Patrick Blackburn, Johan Bos & Kristina Striegnitz FL 4: Listor (kap. 4 & 6) Teori –Introducera listor, en viktig rekursiv datastruktur som ofta används.
Ålder Namn Datum SSQ12 SSQ12 Instruktioner Jag använder en hörapparat (vänster öra) Jag använder en hörapparat (höger öra) Jag använder två hörapparater.
Logikprogrammering Ons, 25/9
Föreläsning 7 Analys av algoritmer T(n) och ordo
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.
Svenska p Svenska p.
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
© Patrick Blackburn, Johan Bos & Kristina Striegnitz FL 7: Cut och negation (kap. 10) Teori –Förklarar hur man kontrollerar Prologs backtracking-beteende.
Växjö 15 april -04Språk & logik: Reguljära uttryck1 DAB760: Språk och logik 15/4: Finita automater och 13-15reguljära uttryck Leif Grönqvist
© 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 Föreläsning 2 Teori –Unifiering –Unifiering i Prolog –Sökning efter bevis Övningar –Ett lite större.
© Patrick Blackburn, Johan Bos & Kristina Striegnitz Föreläsning 3: rekursion Teori –Introducera rekursiva definitioner i Prolog –Fyra exempel –Visa att.
Presupposition gemensam kunskap som inte behöver påstås eller förklaras förutsatt information - bakgrundsantaganden konventionaliserade bärare av implicit.
Programmering B PHP Lektion 2
PROCESSPROGRAMMERING
Programmering B PHP Lektion 2
Det svenska kulturarvet: spår 1
Föreläsning 4 Kö Implementerad med array Implementerad med länkad lista Djup kontra bredd Bredden först mha kö.
Formell logik Kapitel 1 och 2
Språkteknologiska metoder Språkteknologisk forskning och utveckling (HT 2006)
Frågor om elevinflytande till elever i åk 3 – 9 i grundskolan
Lennart Edblom, Frank Drewes, Inst. f. datavetenskap 1 Föreläsning 6: Semantik Statisk semantik Attributgrammatiker Dynamisk semantik Axiomatisk.
PROCESSPROGRAMMERING Föreläsning ‏ Innehåll: Högnivå objekt för trådprogrammering: - Trådgrupper (”Thread pools”)‏ - Exekverare (Executor.
Jonny Karlsson INTRODUKTION TILL PROGRAMMERING Föreläsning 8 ( ) INNEHÅLL:Klasser: -Konstruktorer -Klassvariabler -Instansmetoder -Privata.
F. Drewes, Inst. f. datavetenskap1 Föreläsning 11: Funktionella språk Funktioner och variabler i matematiken Funktionella språk LISP, ML och.
Systemdesign som process
Logikprogrammering 21/10 Binära träd
INTRODUKTION TILL PROGRAMMERING
Läsbar prolog CM 8.1. allmäna principer correctness user-friendliness efficiency readability modifiability robustness documentation.
Göran Svanelid.
Formell logik Kapitel 9 Robin Stenwall Lunds universitet.
Labgrupper: 2 pers/grupp fr o m lab 2 schema ENKÄT.
© Patrick Blackburn, Johan Bos & Kristina Striegnitz Logikprogrammering –Undervisningsmaterialet NYTT för 2013: –Learn Prolog Now! –SWI Prolog-tolk, startas.
Formella metoder i MDI Behovet Vad menas med formell? Verktyg Exempel Att läsa: Kapitel 14 i Carroll.
F. Drewes, Inst. f. datavetenskap1 Föreläsning 4: Syntaxdefinition Formell syntaxdefinition Lexikalisk och kontextfri syntax Flertydighet i kontextfri.
Anders Broberg, Programspråksteoridelen DVA Moment 2 1 Epost: Hemsida: Tel: Rum: D438.
Aritmetik 3.4 M 8.2 E 2.2. dagens föreläsning operatorer för aritmetik tillämpningar.
1 Mönstermatchning och rekursion Nr 4. 2 Förenklad notation val fnname = fn name => expression Förenklas till fun fnname name = expression Exempel fun.
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.
DEMOKRATI Skriv ner dina tankar kring begreppet Demokrati. Vad betyder det för dig? Vad tänker du när du hör ordet? Går det att föreställa sig hur det.
Föreläsning 2 2D1312 Introduktion till Python Kap 1 och 2 i kursboken.
Föreläsning 16 Logik med tillämpningar Innehåll u Information kring kursvärdering och tentagenomgång u Genomgång av övningstenta 2.
1 Semantik – introduktion Semantik = läran om mening Tvärvetenskapligt filosofi lingvistik psykologi AI Lingvistik motsägelser mångtydighet metaforer Filosofi.
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.
Formella metoder i MDI Behovet Vad menas med formell? Verktyg Exempel Att läsa: Kapitel 14 i kursboken.
Lennart Edblom, Frank Drewes, Inst. f. datavetenskap 1 Föreläsning 4: Syntaxdefinition Formell syntaxdefinition Lexikalisk och kontextfri syntax.
Lennart Edblom, Frank Drewes, Inst. f. datavetenskap 1 Föreläsning 3: Abstrakta datatyper Algebror Abstrakta datatyper Inkapsling och informationsmaskering.
Logikprogrammering ons 4/9 Rebecca Jonson.
Lennart Edblom, Frank Drewes, Inst. f. datavetenskap 1 Föreläsning 13: Resolution Resolution i satslogiken Resolution i predikatlogiken.
Regler för citatteknik
Formell logik Kapitel 1 och 2
Helhet och allsidighet
Presentationens avskrift:

© Patrick Blackburn, Johan Bos & Kristina Striegnitz FL 6: Definite Clause Grammars (kap. 7) Teori –Introducerar kontextfria grammatikor och några besläktade begrepp –Introducerar definite clause - grammatikor, Prologs sätt att jobba med kontextfria grammatikor (och andra grammatikor likaså)

© Patrick Blackburn, Johan Bos & Kristina Striegnitz Kontextfria grammatikor Prolog erbjuder en speciell notation för att definiera grammatikor med, nämligen DCG:or eller definite clause- grammatikor Så vad är en grammatik? Vi ska besvara frågan genom att diskutera kontextfria grammatikor CFG:or är en mycket kraftig mekanism som kan hantera de flesta aspekter av syntaxen hos naturliga språk (ex. svenska/finska)

© Patrick Blackburn, Johan Bos & Kristina Striegnitz Ett exempel på en CFG s  np vp np  det n vp  v np vp  v det  the det  a n  man n  woman v  shoots

© Patrick Blackburn, Johan Bos & Kristina Striegnitz Ingredienserna av en grammatik Pilsymbolen  används för att definiera reglerna Symbolerna s, np, vp, det, n, v heter icke-terminala symboler De kursiverade symbolerna är de terminala symbolerna: the, a, man, woman, shoots s  np vp np  det n vp  v np vp  v det  the det  a n  man n  woman v  shoots

© Patrick Blackburn, Johan Bos & Kristina Striegnitz En liten bit lingvistik De icke-terminala symbolerna i denna grammatik har en traditionell mening i lingvistik: –np: noun phrase(nominalfras) –vp: verb phrase(verbfras) –det: determiner(determinerare) –n: noun(substantiv) –v: verb(verb) –s: sentence(mening, i vissa fall sats)

© Patrick Blackburn, Johan Bos & Kristina Striegnitz Mera lingvistik I en lingvistisk grammatik motsvarar de icke-terminala symbolerna oftast grammatikaliska kategorier I en lingvistisk grammatik kallas de terminala symbolerna lexikala enheter, eller helt enkelt ord (en datavetare skulle kalla dem alfabetet)

© Patrick Blackburn, Johan Bos & Kristina Striegnitz Kontextfria regler Exempelgrammatiken består av nio kontextfria regler En kontextfri regel består av: –En ensam icke-terminal symbol –följd av  –följd av en ändlig sekvens av terminala eller icke-terminala symboler s  np vp np  det n vp  v np vp  v det  the det  a n  man n  woman v  shoots

© Patrick Blackburn, Johan Bos & Kristina Striegnitz Vad täcker grammatiken? Betrakta följande sträng: the woman shoots a man Är denna sträng grammatikalisk enligt vår grammatik? Och om den är det, vilken syntaktisk struktur har den?

© Patrick Blackburn, Johan Bos & Kristina Striegnitz Syntaktisk struktur s vp np np det n v det n the woman shoots a man s  np vp np  det n vp  v np vp  v det  the det  a n  man n  woman v  shoots

© Patrick Blackburn, Johan Bos & Kristina Striegnitz Parse trees (syntaxträd) Träd som representerar den syntaktiska strukturen av en sträng kallas ofta syntaxträd (parse trees) Syntaxträd är viktiga: –De ger oss information om strängen –De ger oss information om struktur

© Patrick Blackburn, Johan Bos & Kristina Striegnitz Grammatikaliska strängar Om vi får en sträng av ord och en grammatik, och det visar sig att vi kan konstruera ett syntaxträd, säger vi att strängen är grammatikalisk (med avseende på den givna grammatiken) –Ex., the man shoots är grammatikalisk Om vi inte kan konstruera ett syntaxträd är den givna strängen ogrammatikalisk (igen med avseende på den givna grammatiken) –Ex. a shoots woman är ogrammatikalisk

© Patrick Blackburn, Johan Bos & Kristina Striegnitz Genererat språk Språk som genereras av en grammatik består av alla de strängar som grammatiken klassificerar som grammatikaliska T. ex. a woman shoots a man a man shoots hör till språket som genereras av vår lilla exempelgrammatik

© Patrick Blackburn, Johan Bos & Kristina Striegnitz Igenkännare/Recogniser En kontextfri igenkännare (recogniser) är ett program som korrekt informerar oss om en sträng hör eller inte hör till det språk som genereras av en kontextfri grammatik Med andra ord är en igenkännare/ recogniser ett program som korrekt klassificerar strängar i grammatikaliska och ogrammatikaliska

© Patrick Blackburn, Johan Bos & Kristina Striegnitz Information om struktur Men varken i lingvistik eller datavetenskap är vi enbart intresserade av ifall en sträng är grammatikalisk eller ej Vi vill också veta varför den är grammatikalisk: vi vill veta dess struktur Syntaxträdet ger oss denna struktur

© Patrick Blackburn, Johan Bos & Kristina Striegnitz Analysprogram/Parser En kontextfri parser avgör korrekt ifall en sträng hör till det språk som genereras av en kontextfri grammatik Och det berättar oss också vad dess struktur är Alltså: –En recogniser säger bara ja eller nej –En parser ger oss också syntaxträdet

© Patrick Blackburn, Johan Bos & Kristina Striegnitz Kontextfritt språk Vi vet vad en kontextfri grammatik är, men vad är ett kontextfritt språk? Helt enkelt: ett kontextfritt språk är ett språk som kan genereras av en kontextfri grammatik Vissa mänskliga språk är kontextfria, vissa andra är inte det –Engelska och italienska är antagligen kontextfria –Holländska och Schweiz-tyska är inte kontextfria

© Patrick Blackburn, Johan Bos & Kristina Striegnitz Teori vs. praktik Detta om teorin, men hur jobbar vi med kontextfria grammatikor i Prolog? Anta att vi får en kontextfri grammatik –Hur ska vi skriva en recogniser för den? –Hur ska vi skriva en parser för den? Under denna föreläsning ska vi lära oss att definiera en igenkännare/recogniser

© Patrick Blackburn, Johan Bos & Kristina Striegnitz CFG-igenkänning i Prolog Vi ska använda listor för att representera strängar [a,woman,shoots,a,man] Regeln s  np vp kan tänkas som en konkatenering av en np-lista med en vp-lista så att resultatet blir en s-lista Vi vet hur vi kan konkatenera listor i Prolog: mha append/3 Så nu gäller det att implementera detta i Prolog

© Patrick Blackburn, Johan Bos & Kristina Striegnitz CFG-igenkänning mha append/3 s(C) :- np(A), vp(B), append(A,B,C). np(C) :- det(A), n(B), append(A,B,C). vp(C) :- v(A), np(B), append(A,B,C). vp(C) :- v(C). det([the]). det([a]). n([man]). n([woman]). v([shoots]).

© Patrick Blackburn, Johan Bos & Kristina Striegnitz CFG-igenkänning mha append/3 ?- s([the,woman,shoots,a,man]). yes ?- s(C) :- np(A), vp(B), append(A,B,C). np(C) :- det(A), n(B), append(A,B,C). vp(C) :- v(A), np(B), append(A,B,C). vp(C) :- v(C). det([the]). det([a]). n([man]). n([woman]). v([shoots]).

© Patrick Blackburn, Johan Bos & Kristina Striegnitz CFG-igenkänning mha append/3 ?- s(S). S = [the,man,shoots,the,man]; S = [the,man,shoots,the,woman]; S = [the,woman,shoots,a,man] … s(C) :- np(A), vp(B), append(A,B,C). np(C) :- det(A), n(B), append(A,B,C). vp(C) :- v(A), np(B), append(A,B,C). vp(C) :- v(C). det([the]). det([a]). n([man]). n([woman]). v([shoots]).

© Patrick Blackburn, Johan Bos & Kristina Striegnitz CFG-igenkänning mha append/3 ?- s(S). S = [the, man, shoots, the, man] ; S = [the, man, shoots, the, woman] ; S = [the, man, shoots, a, man] ; S = [the, man, shoots, a, woman] ; S = [the, man, shoots] ; S = [the, woman, shoots, the, man] ; S = [the, woman, shoots, the, woman] ; S = [the, woman, shoots, a, man] ; S = [the, woman, shoots, a, woman] ; S = [the, woman, shoots] ; S = [a, man, shoots, the, man] ; S = [a, man, shoots, the, woman] ; S = [a, man, shoots, a, man] ; S = [a, man, shoots, a, woman] ; S = [a, man, shoots] ; S = [a, woman, shoots, the, man] ; S = [a, woman, shoots, the, woman] ; S = [a, woman, shoots, a, man] ; S = [a, woman, shoots, a, woman] ; S = [a, woman, shoots]. host-001:~ soini$ more CFG.pl s(C) :- np(A), vp(B), append(A,B,C). np(C) :- det(A), n(B), append(A,B,C). vp(C) :- v(A), np(B), append(A,B,C). vp(C) :- v(C). det([the]). det([a]). n([man]). n([woman]). v([shoots]).

© Patrick Blackburn, Johan Bos & Kristina Striegnitz CFG-igenkänning mha append/3 ?- np([the,woman]). yes ?- np(X). X = [the,man]; X = [the,woman] s(C) :- np(A), vp(B), append(A,B,C). np(C) :- det(A), n(B), append(A,B,C). vp(C) :- v(A), np(B), append(A,B,C). vp(C) :- v(C). det([the]). det([a]). n([man]). n([woman]). v([shoots]).

© Patrick Blackburn, Johan Bos & Kristina Striegnitz CFG-igenkänning mha append/3 ?- np(X). X = [the, man] ; X = [the, woman] ; X = [a, man] ; X = [a, woman]. ?- trace. true.

© Patrick Blackburn, Johan Bos & Kristina Striegnitz CFG-igenkänning mha append/3 [trace] ?- np(X). Call: (6) np(_G1563) ? creep Call: (7) det(_G1634) ? creep Exit: (7) det([the]) ? creep Call: (7) n(_G1637) ? creep Exit: (7) n([man]) ? creep Call: (7) lists:append([the], [man], _G1563) ? creep Exit: (7) lists:append([the], [man], [the, man]) ? creep Exit: (6) np([the, man]) ? creep X = [the, man] ; Redo: (7) n(_G1637) ? creep Exit: (7) n([woman]) ? creep Call: (7) lists:append([the], [woman], _G1563) ? creep Exit: (7) lists:append([the], [woman], [the, woman]) ? creep Exit: (6) np([the, woman]) ? creep X = [the, woman] ;

© Patrick Blackburn, Johan Bos & Kristina Striegnitz CFG-igenkänning mha append/3 Redo: (7) det(_G1634) ? creep Exit: (7) det([a]) ? creep Call: (7) n(_G1637) ? creep Exit: (7) n([man]) ? creep Call: (7) lists:append([a], [man], _G1563) ? creep Exit: (7) lists:append([a], [man], [a, man]) ? creep Exit: (6) np([a, man]) ? creep X = [a, man] ; Redo: (7) n(_G1637) ? creep Exit: (7) n([woman]) ? creep Call: (7) lists:append([a], [woman], _G1563) ? creep Exit: (7) lists:append([a], [woman], [a, woman]) ? creep Exit: (6) np([a, woman]) ? creep X = [a, woman]. [trace] ?- notrace.

© Patrick Blackburn, Johan Bos & Kristina Striegnitz Problem med denna igenkännare Den använder sig inte av inputsträngen för att styra sökprocessen Mål som np(A) och vp(B) anropas med oinstantierade variabler Att flytta append/3-målen framåt i regeln är inte en speciellt bra lösning --- det bara senarelägger problemet --- det kommer att uppstå massor av anrop till append/3 med oinstantierade variabler

© Patrick Blackburn, Johan Bos & Kristina Striegnitz Differenslistor En mera effektiv implementation kan åstadkommas mha differenslistor Det här är en sofistikerad Prolog-teknik för att representera och bearbeta listor Exempel: [a,b,c]-[ ] är lista [a,b,c] [a,b,c,d]-[d] är lista [a,b,c] [a,b,c|T]-T är lista [a,b,c] X-X är den tomma listan [ ]

© Patrick Blackburn, Johan Bos & Kristina Striegnitz CFG-igenkänning mha differenslistor s(A-C):- np(A-B), vp(B-C). En sats s består av en lista A minus en lista C så att första delen av denna A är en np, och resten av strängen kallar vi för B.

© Patrick Blackburn, Johan Bos & Kristina Striegnitz CFG-igenkänning mha differenslistor s(A-C):- np(A-B), vp(B-C). B-delen i sin tur ska representera en vp, och det som finns kvar av strängen kallar vi C.

© Patrick Blackburn, Johan Bos & Kristina Striegnitz CFG-igenkänning mha differenslistor s(A-C):- np(A-B), vp(B-C). Om vi vill att satsen har strukturen s  np, vp ska resten C vara [].

© Patrick Blackburn, Johan Bos & Kristina Striegnitz CFG-igenkänning mha differenslistor s(A-C):- np(A-B), vp(B-C). np(A-C):- det(A-B), n(B-C). En nominalfras np består av en determinerare och ett substantiv (noun). Om np:n representeras som en differenslista A-C, ska A:s början vara determineraren.

© Patrick Blackburn, Johan Bos & Kristina Striegnitz CFG-igenkänning mha differenslistor s(A-C):- np(A-B), vp(B-C). np(A-C):- det(A-B), n(B-C). När vi “plockar bort” determineraren, har vi B-delen kvar. Den ska gå att matcha mot ett substantiv, n. C, det som återstår, ska i detta fall vara [].

© Patrick Blackburn, Johan Bos & Kristina Striegnitz CFG-igenkänning mha differenslistor s(A-C):- np(A-B), vp(B-C). np(A-C):- det(A-B), n(B-C). vp(A-C):- v(A-B), np(B-C). Verbfrasen vp analyseras på samma sätt: om vp:n representeras av differenslistan A-C, ska början av A gå att matcha mot ett verb v.

© Patrick Blackburn, Johan Bos & Kristina Striegnitz CFG-igenkänning mha differenslistor s(A-C):- np(A-B), vp(B-C). np(A-C):- det(A-B), n(B-C). vp(A-C):- v(A-B), np(B-C). Det som återstår – listan B-C – ska gå att matcha mot en np. Resten C ska enligt denna regel bli [].

© Patrick Blackburn, Johan Bos & Kristina Striegnitz CFG-igenkänning mha differenslistor s(A-C):- np(A-B), vp(B-C). np(A-C):- det(A-B), n(B-C). vp(A-C):- v(A-B), np(B-C). vp(A-C):- v(A-C). Vår lilla grammatik tillåter också en annan form av vp, verbet ensamt (för intransitiva verb). Då ska hela A-C gå att matcha mot detta v.

© Patrick Blackburn, Johan Bos & Kristina Striegnitz CFG-igenkänning mha differenslistor det([the|W]-W). det([a|W]-W). n([man|W]-W). n([woman|W]-W). v([shoots|W]-W). Lexikonet representeras likaså med differenslistor; varje enskilt ord är en lista [ordet|W]-W

© Patrick Blackburn, Johan Bos & Kristina Striegnitz CFG-igenkänning mha differenslistor ?- s(S-[ ]). S = [the,man,shoots,the,man]; S = [the,man,shoots,a,man]; …. s(A-C) :- np(A-B), vp(B-C). np(A-C) :- det(A-B), n(B-C). vp(A-C) :- v(A-B), np(B-C). vp(A-C) :- v(A-C). det([the|W]-W). det([a|W]-W). n([man|W]-W). n([woman|W]-W). v([shoots|W]-W).

© Patrick Blackburn, Johan Bos & Kristina Striegnitz CFG-igenkänning mha differenslistor ?- s(S-[]). S = [the, man, shoots, the, man] ; S = [the, man, shoots, the, woman] ; S = [the, man, shoots, a, man] ; S = [the, man, shoots, a, woman] ; S = [the, man, shoots] ; S = [the, woman, shoots, the, man] ; S = [the, woman, shoots, the, woman] ; S = [the, woman, shoots, a, man] ; S = [the, woman, shoots, a, woman] ; S = [the, woman, shoots] ; S = [a, man, shoots, the, man] ; S = [a, man, shoots, the, woman] ; S = [a, man, shoots, a, man] ; S = [a, man, shoots, a, woman] ; S = [a, man, shoots] ; S = [a, woman, shoots, the, man] ; S = [a, woman, shoots, the, woman] ; S = [a, woman, shoots, a, man] ; S = [a, woman, shoots, a, woman] ; S = [a, woman, shoots].

© Patrick Blackburn, Johan Bos & Kristina Striegnitz Sammandrag så här långt... Igenkännaren som använder sig av differenslistor är mycket mera effektiv än den som använder sig av append/3 Den är tyvärr inte lika lätt att förstå rent intuitivt, och det kan vara mödosamt att hålla reda på alla de variabler som representerar de olika differenslistorna. Vi skulle gärna ha en igenkännare som var lika enkel som den första och lika effektiv som den andra. Detta är möjligt mha DCG:or

© Patrick Blackburn, Johan Bos & Kristina Striegnitz Definite Clause-Grammatikor Vad är DCG:or? Helt enkelt en användarvänlig notation att skriva grammatikor med som gömmer de underliggande differenslistvariablerna Tre exempel följer...

© Patrick Blackburn, Johan Bos & Kristina Striegnitz DCG:or: första exemplet s --> np, vp. np --> det, n. vp --> v, np. vp --> v. det --> [the]. det --> [a]. n --> [man]. n --> [woman]. v --> [shoots].

© Patrick Blackburn, Johan Bos & Kristina Striegnitz DCG:or: första exemplet ?- s([a,man,shoots,a,woman],[ ]). yes ?- s --> np, vp. np --> det, n. vp --> v, np. vp --> v. det --> [the]. det --> [a]. n --> [man]. n --> [woman]. v --> [shoots].

© Patrick Blackburn, Johan Bos & Kristina Striegnitz DCG:or: första exemplet ?- s(S,[]). S = [the, man, shoots, the, man] ; S = [the, man, shoots, the, woman] ; S = [the, man, shoots, a, man] ; S = [the, man, shoots, a, woman] ; S = [the, man, shoots] ; S = [the, woman, shoots, the, man] ; S = [the, woman, shoots, the, woman] ; S = [the, woman, shoots, a, man] ; S = [the, woman, shoots, a, woman] ; S = [the, woman, shoots] ; S = [a, man, shoots, the, man] ; S = [a, man, shoots, the, woman] ; S = [a, man, shoots, a, man] ; S = [a, man, shoots, a, woman] ; S = [a, man, shoots] ; S = [a, woman, shoots, the, man] ; S = [a, woman, shoots, the, woman] ; S = [a, woman, shoots, a, man] ; S = [a, woman, shoots, a, woman] ; S = [a, woman, shoots]. s --> np, vp. np --> det, n. vp --> v, np. vp --> v. det --> [the]. det --> [a]. n --> [man]. n --> [woman]. v --> [shoots].

© Patrick Blackburn, Johan Bos & Kristina Striegnitz DCG:or: andra exemplet Vi har tillagt en rekursiv regel i grammatiken... Vilka och hur många meningar kommer den här grammatiken att generera? Vad gör Prolog med denna DCG? s --> s, conj, s. s --> np, vp. np --> det, n. vp --> v, np. vp --> v. det --> [the]. det --> [a]. n --> [man]. n --> [woman]. v --> [shoots]. conj --> [and]. conj --> [or]. conj --> [but].

© Patrick Blackburn, Johan Bos & Kristina Striegnitz DCG:or: andra exemplet s --> s, conj, s. s --> np, vp. np --> det, n. vp --> v, np. vp --> v. det --> [the]. det --> [a]. n --> [man]. n --> [woman]. v --> [shoots]. conj --> [and]. conj --> [or]. conj --> [but]. ?- s([the, woman, shoots, and, the, woman, shoots], S). ERROR: Out of local stack Exception: (1,763,388) s([the, woman, shoots, and, the, woman, shoots], _G1555) ? Unknown option (h for help) Exception: (1,763,388) s([the, woman, shoots, and, the, woman, shoots], _G1555) ? alternatives [1,763,388] s([the, woman, shoots, and, the, woman, shoots], _G1569) [1,763,387] s([the, woman, shoots, and, the, woman, shoots], _G1569) [1,763,386] s([the, woman, shoots, and, the, woman, shoots], _G1569) [1,763,385] s([the, woman, shoots, and, the, woman, shoots], _G1569) [1,763,384] s([the, woman, shoots, and, the, woman, shoots], _G1569)...

© Patrick Blackburn, Johan Bos & Kristina Striegnitz DCG utan vänsterrekursiva regler s --> simple_s, conj, s. s --> simple_s. simple_s --> np, vp. np --> det, n. vp --> v, np. vp --> v. det --> [the]. det --> [a]. n --> [man]. n --> [woman]. v --> [shoots]. conj --> [and]. conj --> [or]. conj --> [but]. ?- s([a, woman, shoots, and, a, woman, shoots], []). true ; false. Did anybody call for a doctor??

© Patrick Blackburn, Johan Bos & Kristina Striegnitz DCG utan vänsterrekursiva regler s --> simple_s. s --> simple_s, conj, s. simple_s --> np, vp. np --> det, n. vp --> v, np. vp --> v. det --> [the]. det --> [a]. n --> [man]. n --> [woman]. v --> [shoots]. conj --> [and]. conj --> [or]. conj --> [but]. ?- s(S, []). S = [the, man, shoots, the, man] ; S = [the, man, shoots, the, woman] ; S = [the, man, shoots, a, man] ; S = [the, man, shoots, a, woman] ; S = [the, man, shoots] ; S = [the, woman, shoots, the, man] ;... S = [a, woman, shoots, a, woman] ; S = [a, woman, shoots] ; S = [the, man, shoots, the, man, and, the, man, shoots|...] ; S = [the, man, shoots, the, man, and, the, man, shoots|...] Action (h for help) ? abort % Execution Aborted

© Patrick Blackburn, Johan Bos & Kristina Striegnitz DCG:or är inte magi! Lärdom: DCG:or är en bekväm notation, men du kan inte skriva arbiträra kontextfria grammatikor som DCG:or och köra dem utan problem DCG:or är vanliga Prolog-regler men maskerade Så var på din vakt mot vänsterrekursion! Ett flertal av reglerna måste få vara rekursiva, så de (försöker) generera oändliga strängar

DCG:or är inte magi! © Patrick Blackburn, Johan Bos & Kristina Striegnitz host-001:~ soini$ more DCG4.pl s --> simple_s. s --> simple_s, conj, s. % ej vansterrekursiv simple_s --> np, vp. % grundstrukturen for en sats np --> det, n. vp --> v, np. % transitiva verb vp --> v. % intransitiva verb det --> [the]. det --> [a]. n --> [man]. n --> [woman]. v --> [shoots]. conj --> [and]. conj --> [or]. conj --> [but].

DCG:or är inte magi! © Patrick Blackburn, Johan Bos & Kristina Striegnitz host-001:~ soini$ swipl -s DCG4.pl % /Users/soini/DCG4.pl compiled 0.00 sec, 23 clauses ?- listing. s(A, B) :- simple_s(A, B). s(A, D) :- simple_s(A, B), conj(B, C), s(C, D). simple_s(A, C) :- np(A, B), vp(B, C). conj([and|A], A). conj([or|A], A). conj([but|A], A). np(A, C) :- det(A, B), n(B, C). vp(A, C) :- v(A, B), np(B, C). vp(A, B) :- v(A, B). det([the|A], A). det([a|A], A). n([man|A], A). n([woman|A], A). v([shoots|A], A). true. Den interna representa- tionen är normal Prolog-kod med differenslistor.

© Patrick Blackburn, Johan Bos & Kristina Striegnitz DCG:or: tredje exempel Vi ska definiera en DCG för ett formellt språk Ett formellt språk är helt enkelt en mängd av strängar –Formella språk är objekt som datavetare och matematiker definierar och studerar –Naturliga språk är språk som (normalt) används av människor för att kommunicera Vi ska definiera språket a n b n

© Patrick Blackburn, Johan Bos & Kristina Striegnitz DCG:or: tredje exempel s --> []. s --> l,s,r. l --> [a]. r --> [b]. ?- s([a,a,a,b,b,b],[ ]). yes ?- s([a,a,a,a,b,b,b],[ ]). no Vi ska definiera det formella språket a n b n

© Patrick Blackburn, Johan Bos & Kristina Striegnitz DCG:or: tredje exempel s --> []. s --> l,s,r. l --> [a]. r --> [b]. ?- s(X,[ ]). X = [ ]; X = [a,b]; X = [a,a,b,b]; X = [a,a,a,b,b,b] …. Vi ska definiera det formella språket a n b n

© Patrick Blackburn, Johan Bos & Kristina Striegnitz Sammandrag Vi har diskuterat vad grammatikor och kontextfria grammatikor är Vi har introducerat Prolog-tekniken differenslista Vi har visat att differenslistor kan användas för att beskriva grammatikor Definite Clause-grammatikor (DCG) är en användarvänlig Prolog-notation för programmering mha differenslistor