Presentation laddar. Vänta.

Presentation laddar. Vänta.

Pontus Johansson 1 grammatiker 21.1 G 1 (BBS 7)

Liknande presentationer


En presentation över ämnet: "Pontus Johansson 1 grammatiker 21.1 G 1 (BBS 7)"— Presentationens avskrift:

1 Pontus Johansson [ponjo@ida.liu.se] 1 grammatiker 21.1 G 1 (BBS 7)

2 Pontus Johansson [ponjo@ida.liu.se] 2 dagens föreläsning definitioner kontextfria regler (cfg) hur implementerar man cfg i prolog? vänsterrekursion

3 Pontus Johansson [ponjo@ida.liu.se] 3 definitioner några lingvistiska förkortningar: s = sentence np = noun phrase vp = verb phrase det = determiner n = noun v = verb

4 Pontus Johansson [ponjo@ida.liu.se] 4 np np = noun phrase (noun group) pelle flyger… en skabbig hund grubblar… hon sparras… tre bra band från seattle spelar… en tuff tvättbjörn som oskar äter…

5 Pontus Johansson [ponjo@ida.liu.se] 5 np (forts.) ett ”bevis” på att vissa ord hänger ihop inom samma np tycks alltså vara att de uppstår i liknande syntaktiska kontexter (t ex följs av ett verb) men individuella ord inom frasen behöver nödvändigtvis inte kunna det…

6 Pontus Johansson [ponjo@ida.liu.se] 6 np (forts.) *skabbig grubblar… *från spelar… *tuff äter…

7 Pontus Johansson [ponjo@ida.liu.se] 7 modell matematiska modeller –kontextfri grammatik (cfg), eller –frasstrukturgrammatik, och sägs vara i –backus-naur form (bnf) grundidé är hur som helst: –regler + ett lexikon

8 Pontus Johansson [ponjo@ida.liu.se] 8 definitioner (forts.) ett språk är en ändlig mängd satser en sats är en lista av terminaler… …som ingår i ett alfabete (en mängd av terminaler) en grammatik är en ändlig samling regler som definierar ett språk regler består av terminaler och icke- terminaler

9 Pontus Johansson [ponjo@ida.liu.se] 9 regler En kontextfri regel har formen: X 0 -> X 1 … X n där X 0 är en icke-terminal och X i är terminaler ELLER icke-terminaler

10 Pontus Johansson [ponjo@ida.liu.se] 10 regler (forts.) en icke-terminal återfinns i vänsterled (kallas också fras eller kategori) en terminal finns aldrig i vänsterledet, och utgörs typiskt av ord/element i lexikon/alfabete.

11 Pontus Johansson [ponjo@ida.liu.se] 11 exempel s -> np vp np -> det n vp -> v np det -> en n -> hund n -> bil v -> jagar ”en hund jagar en bil”

12 Pontus Johansson [ponjo@ida.liu.se] 12 trädrepresentation (’parse tree’) s npvp vnp det n n enhundjagarenbil terminaler icke-terminaler s -> np vp np -> det n vp -> v np det -> en n -> hund n -> bil v -> jagar

13 Pontus Johansson [ponjo@ida.liu.se] 13 cfg i prolog (1) % append version append([],L,L). append([H|T],L2,[H|L3]) :- append(T,L2,L3). s(Z) :- np(X), vp(Y), append(X,Y,Z). np(Z) :- det(X), n(Y), append(X,Y,Z). vp(Z) :- v(X), np(Y), append(X,Y,Z). det([en]). n([hund]). n([bil]). v([jagar]). s([en,hund,jagar,en,bil]) np([en,hund]) vp([jagar,en,bil]) append( [en,hund], [jagar,en,bil], [en,hund,jagar,en,bil] ) np([en,hund]) det([en]) n([hund]) append([en],[hund],[en,hund]) vp([jagar,en,bil]) v([jagar]) np([en,bil]) append([jagar],[en,bil],[jagar,en,bil])

14 Pontus Johansson [ponjo@ida.liu.se] 14 cfg i prolog (2) % difference list version s(List1, Rest) :- np(List1, List2), vp(List2, Rest). np(List,Rest) :- det(List,List2), n(List2,Rest). vp(List,Rest) :- v(List,List2), np(List2,Rest). det([en|Rest],Rest). n([hund|Rest],Rest). v([jagar|Rest],Rest). n([bil|Rest],Rest). skillnaden mellan List1 och Rest är en s om: skillnaden mellan List1 och List2 är en np, och skillnaden mellan List2 och Rest är en vp. npvpRest List2 List1 s

15 Pontus Johansson [ponjo@ida.liu.se] 15 körning… ?- s([en,bil,jagar,en,hund],[]). yes ?- s([en,bil,jagar,en,hund|[]],[]). yes ?- s([en,bil,jagar,en,hund,jättefort],[]). no ?- s([en,bil,jagar,en,hund,jättefort],Rest). Rest = [jättefort] ?- s([en,bil,jagar,en,hund,jättefort],[jättefort]). yes

16 Pontus Johansson [ponjo@ida.liu.se] 16 [en,hund][jagar,en,bil][jättefort] List2 List1 s

17 Pontus Johansson [ponjo@ida.liu.se] 17 cfg i prolog dcg = definite clause grammar (nästa föreläsning!) ”syntaktiskt socker för att dölja differenslistornas notation”

18 Pontus Johansson [ponjo@ida.liu.se] 18 cfg i prolog (3) % DCG (CFG) version s --> np,vp. np --> det,n. vp --> v,np. det --> [en]. n --> [hund]. v --> [jagar]. n --> [bil]. %difference list version s(List1, Rest) :- np(List1, List2), vp(List2, Rest). np(List,Rest) :- det(List,List2), n(List2,Rest). vp(List,Rest) :- v(List,List2), np(List2,Rest). det([en|Rest],Rest). n([hund|Rest],Rest). v([jagar|Rest],Rest). n([bil|Rest],Rest). % append version append([],L,L). append([H|T],L2,[H|L3]) :- append(T,L2,L3). s(Z) :- np(X), vp(Y), append(X,Y,Z). np(Z) :- det(X), n(Y), append(X,Y,Z). vp(Z) :- v(X), np(Y), append(X,Y,Z). det([en]). n([hund]). n([bil]). v([jagar]).

19 Pontus Johansson [ponjo@ida.liu.se] 19 mer cfg hur utökar vi vårt språk? vp --> v, np, adv. adv --> [jättefort].

20 Pontus Johansson [ponjo@ida.liu.se] 20 körning… ?- s([en,bil,jagar,en,hund,Hur],[]). Hur = jättefort

21 Pontus Johansson [ponjo@ida.liu.se] 21 körning… språket blir dubbelt så stort! ?- s(X,[]). X = [en,bil,jagar,en,bil] ? ; X = [en,bil,jagar,en,hund] ? ; X = [en,bil,jagar,en,bil,jättefort] ? ; X = [en,bil,jagar,en,hund,jättefort] ? ; X = [en,hund,jagar,en,bil] ? ; X = [en,hund,jagar,en,hund] ? ; X = [en,hund,jagar,en,bil,jättefort] ? ; X = [en,hund,jagar,en,hund,jättefort] ? ; no

22 Pontus Johansson [ponjo@ida.liu.se] 22 användning parsning –testar om en sträng accepteras av grammatiken (dvs om den ”känns igen”) –egentligen ska parsern ge info om strukturen (t ex genom ett parseträd) också… ?- s([en,hund,jagar,en,bil],[]). yes generering –låter grammatiken generera strängar (parsningens motsats) ?- s(Generated,[]). Generated = [en,hund,jagar,en,bil]

23 Pontus Johansson [ponjo@ida.liu.se] 23 en grammatik till % satser s --> np, vp. % verbfraser vp --> v. vp --> v, np. vp --> vp, pp. % nominalfraser np --> namn. np --> pron. np --> n. np --> det, n. % prepositionsfraser pp --> prep, np.

24 Pontus Johansson [ponjo@ida.liu.se] 24 en grammatik till (forts.) n --> [hund]. n --> [kastrull]. det --> [en]. v --> [kastar]. v --> [sover]. namn --> [pelle]. pron --> [han]. prep --> [på].

25 Pontus Johansson [ponjo@ida.liu.se] 25 några exempel en hund kastar en kastrull på pelle pelle sover han kastar en hund på en kastrull en hund sover pelle på han en kastrull kastar etc…

26 Pontus Johansson [ponjo@ida.liu.se] 26 vänsterrekursion vp --> vp, pp. kan få prolog i oändlig loop vp(List,Rest) :- vp(List,List2), pp(List2,Rest). vp(List,… etc…

27 Pontus Johansson [ponjo@ida.liu.se] 27 vänsterrekursion (forts.) vp --> v. vp --> v, np. vp --> vp, pp. vad innebär detta? ”efter varje vp kan en pp följa” vp --> v, somePP.% skriv om med ”somePP” vp --> v, np, somePP.% skriv om med ”somePP” somePP --> []. somePP --> pp.

28 Pontus Johansson [ponjo@ida.liu.se] 28 vänsterrekursion (forts.) obs! vänsterrekursion är ett prolog- problem (alltså inte ett lingvistiskt problem) –deklarativt är det ok –procedurellt är det inte ok alla vänsterrekursiva grammatiker kan skrivas om till icke- vänsterrekursiva grammatiker

29 Pontus Johansson [ponjo@ida.liu.se] 29 mixa terminaler och icke- terminaler n --> [dog]. n --> n1, [t2], n3, [t4]. n([dog|Rest],Rest). n(List1, Rest) :- n1(List1, [t2|List3]), n3(List3, [t4|Rest]).

30 Pontus Johansson [ponjo@ida.liu.se] 30 nästa föreläsning mer om dcg –argument –prologanrop från dcg –och lite till litteratur –21.2 –G 2.3 –M 8.1.2 –(BBS 8)


Ladda ner ppt "Pontus Johansson 1 grammatiker 21.1 G 1 (BBS 7)"

Liknande presentationer


Google-annonser