% -*- prolog -*- % % Reguły opisujące jednostki elementarne gramatyki formalnej języka % polskiego Marka Świdzińskiego % % Copyright (C) 1992 Marek Świdziński % Copyright (C) 1997-2006 Marcin Woliński % % This program is free software; you can redistribute it and/or modify % it under the terms of the GNU General Public License version 3 as % published by the Free Software Foundation. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program; if not, write to the Free Software % Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, % MA 02110-1301, USA % % In addition, as a special exception, the copyright holder gives % permission to link the code of this program with the Morfeusz library % (see http://www.nlp.ipipan.waw.pl/~wolinski/morfeusz), and distribute % linked combinations including the two. You must obey the GNU General % Public License in all respects for all of the code used other than % Morfeusz. If you modify this file, you may extend this exception to % your version of the file, but you are not obligated to do so. If you % do not wish to do so, delete this exception statement from your % version. % :-style_check(-singleton). %%%%%%%%%%%%%%%%%%%% Funkcyjne: %%%%%%%%%%%%%%%%%%%% % 5.16.2: Zaimek zaimpyt(rzecz, P, Rl, 3, co) --> s(zaim1n), zaimrzecz(co, P, Rl). zaimpyt(rzecz, P, Rl, 3, kto) --> s(zaim5n), zaimrzecz(kto, P, Rl). zaimpyt(przym, P, Rl, _O, _Kl) --> s(zaim9n), zaimprzym(F, P, Rl), { rowne(F, ['czyj','jaki','który'])}. zaimpyt(przysl, _P, _Rl, _O, _Kl) --> s(zaim22), zaimprzys(F), { rowne(F, [dlaczego,'dokąd','gdzie','jak','kiedy','odkąd','skąd'])}. zaimwzg(rzecz, P, Rl, 3, co) --> s(zaim23n), zaimrzecz(co, P, Rl). zaimwzg(rzecz, P, Rl, 3, kto) --> s(zaim27n), zaimrzecz(kto, P, Rl). zaimwzg(rzecz, P, Rl, 3, 'który') --> s(zaim31n), % zaimrzecz(F, P, Rl), % to nie ma szansy działać? zaimprzym(F, P, Rl), % czy raczej tak??? { rowne(F, ['jaki','który'])}. zaimwzg(przym, P, Rl, _O, _Kl) --> s(zaim44n), zaimprzym(jaki, P, Rl). zaimno(przym, P, Rl, _O, tk) --> s(zaim57n), zaimprzym(taki, P, Rl). zaimno(przysl, _P, _Rl, _O, tk) --> s(zaim70), zaimprzys(tak). % nowe reguły zaimkowe: % 5.16.2.3. Zaimki nieokreślone % 5.16.2.3.1. zaimki rzeczowne zaimno(rzecz, P, Rl, 3, co) --> s(zaim71), zaimrzecz(coś, P, Rl). zaimno(rzecz, P, Rl, 3, kto) --> s(zaim72), zaimrzecz(ktoś, P, Rl). zaimno(rzecz, P, r(R1,nmo(R2))/L, _O, co) --> s(zaim73), zaimprzym(ten, P, r(R1,nmo(R2))/L). zaimno(rzecz, P, r(mn(m(zy)),mo)/poj, _O, kto) --> s(zaim73k), zaimprzym(ten, P, r(mn(m(zy)),mo)/poj). zaimno(przym, P, Rl, _O, _Kl) --> s(zaim73x), zaimprzym(ten, P, Rl). % [MŚ: można dodać jeszcze tamten, ów] zaimneg(rzecz, P, Rl, 3, co) --> s(zaim74), zaimrzecz(nic, P, Rl). zaimneg(rzecz, P, Rl, 3, kto) --> s(zaim75), zaimrzecz(nikt, P, Rl). zaimneg(przysl, _P, _Rl, _O, kto) --> s(zaim76n), zaimprzys(nigdy). % 5.16.3 i n.: pyt(F, I) --> s(par1), partykula(F), spoj(Tsp, I, ni), { rowne(I, ['bowiem','natomiast','więc','zaś']), rowne(Tsp, [pi,ri]) }. pyt(F, ni) --> s(par2), partykula(F). agl(Rl, O, I) --> s(agl1), agl1(Rl, O), spoj(Tsp, I, ni), { rowne(I, ['bowiem','natomiast','więc','zaś']), rowne(Tsp, [pi,ri]) }. agl(_Rl, 3, I) --> s(agl1e), spoj(Tsp, I, ni), { rowne(I, ['bowiem','natomiast','więc','zaś']), rowne(Tsp, [pi,ri]) }. agl(Rl, O, ni) --> s(agl2), agl1(Rl, O). agl1(R/poj, 1) --> s(agl3), morfagl(m, R/poj, 1). agl1(R/mno, 1) --> s(agl4), morfagl('śmy', R/mno, 1). agl1(R/poj, 2) --> s(agl5), morfagl('ś', R/poj, 2). agl1(R/mno, 2) --> s(agl6), morfagl('ście', R/mno, 2). % !!! epsilon %agl1(Rl, 3) --> s(agl7). kor(K/P, I) --> s(kor1), przyimek(K, P), kor1(P), spoj(Tsp, I, ni), { rowne(I, ['bowiem','natomiast','więc','zaś']), rowne(Tsp, [pi,ri]) }. % reguła dodana na mocy listu prof. Świdzińskiego z 28 grudnia 1999: kor(K/P, ni) --> s(kor1x), przyimek(K, P), kor1(P). kor(P, ni) --> s(kor2), kor1(P). kor1(P) --> s(kor3n), zaimrzecz(to, P, r(mn(n),nmo(np(n)))/poj). %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%% Elementarne: %%%%%%%%%%%%%%%%%%%% % 5.17: znakkonca(p) --> s(int1), [morf('?',_,interp)]. znakkonca(np) --> s(int2), [morf('.',_,interp)]. znakkonca(np) --> s(int3), [morf('!',_,interp)]. znakkonca(np) --> s(int4), [morf('.',_,interp)], [morf('.',_,interp)], [morf('.',_,interp)]. % Lewostronny kontekst !!! %[F],przecsp --> s(int5), [F], % { rowne(F, ['albowiem','aż','bo','chociaż', % 'choć','czy','dopóki','dopóty','gdy','gdyż','iż','jak', % 'jeśli','jeżeli','kiedy','nim','ponieważ','póki','póty', % 'skoro','wówczas','wtedy','zanim','że'])}. przecsp --> s(int5), [morf('','',przecsp)]. przecsp --> s(int6), przec. %przec, [?] --> s(int7), [?]. %przec, [.] --> s(int8), [.]. %przec, [!] --> s(int9), [!]. %przec, ['...'] --> s(int10), ['...']. %przec, [','] --> s(int11), [',']. % Lewostronny kontekst !!! % [%], przec --> s(int12), [%]. przec --> s(int13), [morf(_,',',interp)]. morfagl(F, _R/L, O) --> s(jel1), [morf(F, 'być', aglt:Num:Per:_:_)], { liczba(Num,L), osoba(Per,O) }. partykula(H) --> s(jel2), [morf(_,H,qub)]. przyimek(F, P) --> s(jel3), [morf(_,F,prep:Cases)], { przypadki(Cases,P) }. przyimek(F, P) --> s(jel3), [morf(_,F,prep:Cases:_)], { przypadki(Cases,P) }. % tymczasowe, trzeba zrobić porządnie! % następujące dwuczłonowe przyimki występują w słowniku Świdzińskiego: przyimek('co do',dop) --> s(jel3a), [morf(co,co,prep:acc)], [morf(do,do,prep:gen)]. przyimek('na temat',dop) --> s(jel3b), [morf(na,na,prep:[acc|loc])], [morf(temat,temat,subst:sg:[nom|acc]:m3)]. przyimek('w sprawie',dop) --> s(jel3c), [morf(w,w,prep:[acc|loc]:nwok)], [morf(sprawie,sprawa,subst:sg:[dat|loc]:f)]. przyimek('z powodu',dop) --> s(jel3d), [morf(z,z,prep:[gen,acc|inst]:nwok)], [morf(powodu,powód,subst:sg:gen:m3)]. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% spojnik(F) --> s(jel4), [morf(_,F,conj)]. zaimrzecz(H, P, R/L) --> s(jel5), [morf(_,H,psubst:Num:Cases:Gend)], { liczba(Num,L), przypadki(Cases,P), rodzaj(Gend,R) }. zaimprzym(H, P, R/L) --> s(jel6), [morf(_,H,padj:Num:Cases:Gend:pos)], { liczba(Num,L), przypadki(Cases,P), rodzaj(Gend,R) }. zaimprzys(H) --> s(jel7), [morf(_,H,padv)]. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% formarzecz( P, R/L ) --> s(n_rz1), [morf(_,_,subst:Num:Cases:Gend)], { liczba(Num,L), przypadki(Cases,P), rodzaj(Gend,R) }. formarzecz( P, R/L ) --> s(n_rz2), [morf(_,_,depr:Num:Cases:Gend)], { liczba(Num,L), przypadki(Cases,P), rodzaj(Gend,R) }. formarzecz( P, R/L ) --> s(n_rz3), [morf(_,_,ger:Num:Cases:Gend:_:_)], { liczba(Num,L), przypadki(Cases,P), rodzaj(Gend,R) }. formaprzym( P, R/L, St ) --> s(n_pt1), [morf(_,_,adj:Num:Cases:Gend:Degr)], { liczba(Num,L), przypadki(Cases,P), rodzaj(Gend,R), stopien(Degr,St) }. formaprzym( P, R/L, St ) --> s(n_pt2), [morf(_,_,adja)], [morf('-','-',interp)], formaprzym( P, R/L, St). formaprzym( P, R/L, row ) --> s(n_pt3), [morf(_,_,ppas:Num:Cases:Gend:_)], { liczba(Num,L), przypadki(Cases,P), rodzaj(Gend,R) }. formaprzym( P, R/L, row ) --> s(n_pt4), [morf(_,_,pact:Num:Cases:Gend:_)], { liczba(Num,L), przypadki(Cases,P), rodzaj(Gend,R) }. % To na potrzeby GFJPA:540 Kim <interesujący się> chłopcy przyjdą, ... formaprzym( P, R/L, row ) --> s(n_pt5), [morf(_,_,pact:Num:Cases:Gend:_)], [morf(_,'się',qub)], { liczba(Num,L), przypadki(Cases,P), rodzaj(Gend,R) }. formalicz(P, R/L, Akom) --> s(n_li), [morf(_,_,num:Num:Cases:Gend:Acom)], { liczba(Num,L), przypadki(Cases,P), rodzaj(Gend,R), akomodacyjnosc(Acom,Akom) }. formaprzysl( St ) --> s(n_ps), [morf(_,_,adv:Degr)], { stopien(Degr,St) }. % dodane dla Morfeusza SGJP: formaprzysl( row ) --> s(n_ps2), [morf(_,_,advndm)]. zaimos( P, R/L, O ) --> s(n_zo1), [morf(_,_,ppron12:Num:Cases:Gend:Per)], { liczba(Num,L), przypadki(Cases,P), rodzaj(Gend,R), osoba(Per,O) }. zaimos( P, R/L, O ) --> s(n_zo2), [morf(_,_,ppron12:Num:Cases:Gend:Per:_)], { liczba(Num,L), przypadki(Cases,P), rodzaj(Gend,R), osoba(Per,O) }. zaimos( P, R/L, O ) --> s(n_zo3), [morf(_,_,ppron3:Num:Cases:Gend:Per:_)], { liczba(Num,L), przypadki(Cases,P), rodzaj(Gend,R), osoba(Per,O) }. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %% Formy czasownikowe: formaczas( Wf, A, C, T, Rl, O, Wym, K ) --> s(n_cz1), formaczas1( n, Wf, A, C, T, Rl, O, Wym, K ). %% Sięność: formaczas( Wf, A, C, T, Rl, O, Wym, K ) --> s(n_cz2), formaczas1( s, Wf, A, C, T, Rl, O, Wym, K ), [morf(_,'się',qub)]. formaczas( Wf, A, C, T, Rl, O, Wym, K ) --> s(n_cz3), [morf(_,'się',qub)], formaczas1( s, Wf, A, C, T, Rl, O, Wym, K ). %%%% Tryb oznajmujący, czas ter. lub przypro: formaczas1( S, os, A, C, ozn, _R/L, O, Wym, _K ) --> s(n_cz4), [morf(_,H,fin:Num:Per:As)], { aspekt(As,A), czas(fin,A,C), osoba(Per,O), liczba(Num,L), rekcja(H,S,Wym) }. formaczas1( S, os, nd, przy, ozn, _R/L, O, Wym, _K ) --> s(n_cz5), [morf(_, być, bedzie:Num:Per:imperf)], { osoba(Per,O), liczba(Num,L), rekcja(być,S,Wym) }. %% czas przyszły złożony: przyzlo( S, _RL, Wym, _K ) --> s(n_czp1), [morf(_,H,inf:As)], { aspekt(As,nd), rekcja(H,S,Wym) }. przyzlo( S, R/L, Wym, _K ) --> s(n_czp2), [morf(_,H,praet:Num:Gend:AsAgl)], { asagl(AsAgl, As, nagl), aspekt(As,nd), liczba(Num,L), rodzaj(Gend,R), rekcja(H,S,Wym) }. formaczas1( S, os, nd, przy, ozn, R/L, O, Wym, _K ) --> s(n_cz6), [morf(_, być, bedzie:Num:Per:imperf)], { osoba(Per,O), liczba(Num,L) }, przyzlo( S, R/L, Wym, K ). formaczas1( S, os, nd, przy, ozn, R/L, O, Wym, _K ) --> s(n_cz7), przyzlo( S, R/L, Wym, K ), [morf(_, być, bedzie:Num:Per:imperf)], { osoba(Per,O), liczba(Num,L) }. formaczas1( n, os, nd, przy, ozn, R/L, O, Wym, _K ) --> s(n_cz8), [morf(_, być, bedzie:Num:Per:imperf)], [morf(_,'się',qub)], { osoba(Per,O), liczba(Num,L) }, przyzlo( s, R/L, Wym, K ). formaczas1( n, os, nd, przy, ozn, R/L, O, Wym, _K ) --> s(n_cz9), przyzlo( s, R/L, Wym, K ), [morf(_,'się',qub)], [morf(_, być, bedzie:Num:Per:imperf)], { osoba(Per,O), liczba(Num,L) }. %% czas przeszły: formaczas1( S, os, A, prze, ozn, R/L, 3, Wym, _K ) --> s(n_cz10), [morf(_,H,praet:Num:Gend:AsAgl)], { asagl(AsAgl, As, nagl), aspekt(As,A), liczba(Num,L), rodzaj(Gend,R), rekcja(H,S,Wym) }. formaczas1( S, os, A, prze, ozn, R/L, O, Wym, _K ) --> s(n_cz11), [morf(_,H,praet:Num:Gend:AsAgl)], { asagl(AsAgl, As, agl), aspekt(As,A), liczba(Num,L), rodzaj(Gend,R), rekcja(H,S,Wym) }, [morf(_F, 'być', aglt:Num:Per:_:_)], { osoba(Per,O) }. %%%% Tryb warunkowy: condaglt(L,3) --> s(n_cza1), [morf(_,by,qub)]. condaglt(L,O) --> s(n_cza2), [morf(_,by,qub)], [morf(_F, 'być', aglt:Num:Per:_:_)], { liczba(Num,L), osoba(Per,O) }. formaczas1( S, os, A, _C, war, R/L, O, Wym, _K ) --> s(n_cz12), [morf(_,H,praet:Num:Gend:AsAgl)], { asagl(AsAgl, As, nagl), aspekt(As,A), liczba(Num,L), rodzaj(Gend,R), rekcja(H,S,Wym) }, condaglt(L,O). formaczas1( S, os, A, _C, war, R/L, O, Wym, _K ) --> s(n_cz13), condaglt(L, O), [morf(_,H,praet:Num:Gend:AsAgl)], { asagl(AsAgl, As, nagl), aspekt(As,A), liczba(Num,L), rodzaj(Gend,R), rekcja(H,S,Wym) }. % wariant z 'się' w środku: formaczas1( n, os, A, _C, war, R/L, O, Wym, _K ) --> s(n_cz14), [morf(_,H,praet:Num:Gend:AsAgl)], [morf(_,'się',qub)], { asagl(AsAgl, As, nagl), aspekt(As,A), liczba(Num,L), rodzaj(Gend,R), rekcja(H,s,Wym) }, condaglt(L,O). formaczas1( n, os, A, _C, war, R/L, O, Wym, _K ) --> s(n_cz15), condaglt(L, O), [morf(_,'się',qub)], [morf(_,H,praet:Num:Gend:AsAgl)], { asagl(AsAgl, As, nagl), aspekt(As,A), liczba(Num,L), rodzaj(Gend,R), rekcja(H,s,Wym) }. %%%% Tryb rozkazujący: formaczas1( S, os, A, przy, roz, _R/L, O, Wym, _K ) --> s(n_cz16), [morf(_,H,impt:Num:Per:As)], { aspekt(As,A), osoba(Per,O), liczba(Num,L), rekcja(H,S,Wym) }. formaczas1( S, os, A, przy, roz, _R/L, O, Wym, _K ) --> s(n_cz17), [morf(_,niech,qub)], [morf(_,H,fin:Num:Per:As)], { (Num=sg, Per\=sec ; Num=pl, Per=ter), aspekt(As,A), osoba(Per,O), liczba(Num,L), rekcja(H,S,Wym) }. formaczas1( n, os, A, przy, roz, _R/L, O, Wym, _K ) --> s(n_cz18), [morf(_,niech,qub)], [morf(_,'się',qub)], [morf(_,H,fin:Num:Per:As)], { (Num=sg, Per\=sec ; Num=pl, Per=ter), aspekt(As,A), osoba(Per,O), liczba(Num,L), rekcja(H,s,Wym) }. %%%% Formy nieosobowe: % w poniższych dodatkowy warunek: np(mian) niedopuszczalne dla Wf<>os formaczas1( S, bos, A, prze, ozn, _RL, _O, NWym, _K ) --> s(n_cz19), [morf(_,H,imps:As)], { aspekt(As,A), rekcja(H,S,Wym), wykluczpodmiot(Wym,NWym) }. formaczas1( S, bos, A, _C, war, _RL, _O, NWym, _K ) --> s(n_cz20), [morf(_,H,imps:As)], [morf(_,by,qub)], { aspekt(As,A), rekcja(H,S,Wym), wykluczpodmiot(Wym,NWym) }. formaczas1( S, bos, A, _C, war, _RL, _O, NWym, _K ) --> s(n_cz21), [morf(_,by,qub)], [morf(_,H,imps:As)], { aspekt(As,A), rekcja(H,S,Wym), wykluczpodmiot(Wym,NWym) }. formaczas1( n, bos, A, _C, war, _RL, _O, NWym, _K ) --> s(n_cz22), [morf(_,H,imps:As)], [morf(_,'się',qub)], [morf(by,by,qub)], { aspekt(As,A), rekcja(H,s,Wym), wykluczpodmiot(Wym,NWym) }. formaczas1( n, bos, A, _C, war, _RL, _O, NWym, _K ) --> s(n_cz23), [morf(_,by,qub)], [morf(_,'się',qub)], [morf(_,H,imps:As)], { aspekt(As,A), rekcja(H,s,Wym), wykluczpodmiot(Wym,NWym) }. formaczas1( S, bok, A, _C, _T, _RL, _O, NWym, _K ) --> s(n_cz24), [morf(_,H,inf:As)], { aspekt(As,A), rekcja(H,S,Wym), wykluczpodmiot(Wym,NWym) }. formaczas1( S, psu, A, _C, _T, _RL, _O, NWym, _K ) --> s(n_cz25), [morf(_,H,pant:As)], { aspekt(As,A), rekcja(H,S,Wym), wykluczpodmiot(Wym,NWym) }. formaczas1( S, psw, A, _C, _T, _RL, _O, NWym, _K ) --> s(n_cz26), [morf(_,H,pcon:As)], { aspekt(As,A), rekcja(H,S,Wym), wykluczpodmiot(Wym,NWym) }. % Niewłaściwe (predykatywy): formaczas1( S, os, nd, ter, ozn, _RL, _O, Wym, _K ) --> s(n_cz27), [morf(_,H,pred)], { rekcja(H,S,Wym) }. formaczas1( S, os, nd, przy, ozn, _RL, _O, Wym, _K ) --> s(n_cz28), [morf(będzie, być, bedzie:sg:ter:imperf)], [morf(_,H,pred)], { rekcja(H,S,Wym) }. formaczas1( S, os, nd, przy, ozn, _RL, _O, Wym, _K ) --> s(n_cz29), [morf(_,H,pred)], [morf(będzie, być, bedzie:sg:ter:imperf)], { rekcja(H,S,Wym) }. formaczas1( S, os, nd, prze, ozn, _RL, _O, Wym, _K ) --> s(n_cz30), [morf(było, być, praet:sg:_:imperf)], [morf(_,H,pred)], { rekcja(H,S,Wym) }. formaczas1( S, os, nd, prze, ozn, _RL, _O, Wym, _K ) --> s(n_cz31), [morf(_,H,pred)], [morf(było, być, praet:sg:_:imperf)], { rekcja(H,S,Wym) }. formaczas1( S, os, nd, _C, war, _RL, _O, Wym, _K ) --> s(n_cz32), [morf(_,H,pred)], [morf(_,by,qub)], { rekcja(H,S,Wym) }. formaczas1( S, os, nd, _C, war, _RL, _O, Wym, _K ) --> s(n_cz33), [morf(_,by,qub)], [morf(_,H,pred)], { rekcja(H,S,Wym) }. formaczas1( S, bok, nd, _C, _T, _RL, _O, Wym, _K ) --> s(n_cz34), [morf(_, być, inf:imperf)], [morf(_,H,pred)], { rekcja(H,S,Wym) }. % odmienne nietypowo (powinien): formaczas1( S, os, A, ter, ozn, R/L, 3, Wym, _K ) --> s(n_cz35), [morf(_,H,winien:Num:Gend:AsAgl)], { asagl(AsAgl, As, nagl), aspekt(As,A), liczba(Num,L), rodzaj(Gend,R), rekcja(H,S,Wym) }. formaczas1( S, os, A, ter, ozn, R/L, O, Wym, _K ) --> s(n_cz36), [morf(_,H,winien:Num:Gend:AsAgl)], { asagl(AsAgl, As, agl), aspekt(As,A), liczba(Num,L), rodzaj(Gend,R), rekcja(H,S,Wym) }, [morf(_F, 'być', aglt:Num:Per:_:_)], { osoba(Per,O) }.