Sunteți pe pagina 1din 13

Universitatea Liber Internaional din Moldova Departamentul Inginerie i Informatic Facultatea Informatic i Limbi moderne aplicate Catedra Tehnologii

Informationale

Lucrare de laborator nr. 2


Disciplina: Programarea logic Tema: Gramatici libere si dependente de context.

A executat: Roman Alexandreanu, TI-4.1 Verificat: Nicolae Pelin.

Chiinu 2012

Tema: Gramatici libere de context (Context Free Grammar). Scopul lucrrii: De a cerceta metode de procesare si generare a unor propozitii in mediul prolog utilizind algoritmi ai gramaticilor dependente si independente de context. Sarcini: 1. De a cerceta principiile fundamentale pe care se bazeaza gramaticile libere si dependente de context 2. De a analiza, conspecta si lansa literatura ce tine de materie in aspecte teoretice. 3. De a elabora in T. Prolog un program care ar asigura generarea propozitiilor din limba romana , folosind gramatica libera de context. De a analiza atent propozitiile generate si de a face concluziile sale referitor la posibilitatile metodei date. 4. De a scrie in prolog un program care ar asigura generarea propozitiilor din setul de cuvinte in limba engleza, cu utilizarea gramaticilor dependente de context. De a analiza detailat propozitiile generate si a face concluziile sale ce tin de posibilitatile acestei gramatici. 5. De a perfecta programul primit in punctual trei pina la un system de instruire pentru a studia citeva reguli a limbii engleze in baza propozitiilor generate si setul de cuvinte introdus si inregistrat prin intermediul bazei dinamice 6. De a face nishte concluzii generale si notifica toate sursele bibliografice . Aspecte teoretice:

Introducere - prelucrarea limbajului natural

Este deja bine cunoscut faptul c cea mai important proprietate a interfetei unui sistem computational este calitatea acesteia de a fi prietenoas fat de utilizator. Ce este mai natural ntr-o interfat omcalculator dect o comunicare realizat ntr-un limbaj ct mai apropiat de limbajul natural? Domeniul inteligentei artificiale care se preocup de acest aspect ar fi prelucrarea limbajului natural, situat undeva la granita ntre lingvistic i tiintele cognitive. Principalul scop al Inteligentei Artificiale n ceea ce privete limbajul natural este permiterea comunicrii ntre calculator i om fr a fi necesar memorarea unor comenzi sau proceduri complexe, comunicarea urmnd a se face prin comenzi simple, formulate n limbajul de zi cu zi. Un alt scop important ar fi traducerea automat, aceasta urmnd s permit oamenilor de tiint, oamenilor de afaceri sau populatiei de rnd s comunice liber intre ei indiferent de nationalitate i limb vorbit. Toate acestea reprezint doar o parte din aria vast a inteligentei artificiale i a limbajului natural, ce include i tiintele cognitive n ncercarea de a explica modul n care oamenii nteleg de fapt limbajul (ntelegerea limbajului uman). Printele prelucrrii limbajului natural este considerat omul de tiint Naom Chomsky, studiile sale ncepnd cu 1950, influentnd dezvoltarea ulterioar a limbajelor de programare prin intermediul limbajelor formale. Este memorabil teza acestuia potrivit creia ne cunoatem cunoscnd limbajul. Plecnd de la aceast tez, Alan Turing, tot n 1950, propune ca una dintre cerintele pe care un calculator trebuie s le ndeplineasc pentru a fi considerat inteligent, s fie aceea de a fi capabil s nteleag si s rspund ntr-un limbaj natural. Limbajul natural este o modalitate de comunicare om-main care prezint cteva avantaje majore de partea utilizatorului: -Nu necesit instruire pentru folosirea lui; -Scutete utilizatorul de familiarizarea cu limbajele formale; -Este un mijloc direct de accesare a informatiei, independent de structura i codificarea acestuia. O aplicatie de prelucrare a limbajului natural poate prezenta urmtoarele trei componente: 1. scanner-ul Care realizeaz descompunerea unei propozitii/fraze ntr-o list a cuvintelor sale componente

2. parser-ul care realizeaz analiza propozitiilor/frazelor conform regulilor specificate de gramatica adoptat precum i obtinerea semanticii aferente acestora. Pentru aceasta, se apeleaz la analiza sintactic i morfologic, la analiza semantic i la analiza pragmatic; 3. executivul care preia semantica obtinut n pasul anterior, transformndu-o n comenzi sau cunotinte. Noi ntelegem texte mari combinnd forta noastr de ntelegere pentru textele mai mici. Principalul scop al teoriei lingvistice este acela de a arta cum prtile mari de text sunt formate din mai multe prti mici. Acestea sunt modelate de gramatic. Lingvistica computational ncearc s implementeze acest proces de recunoatere ntr-un mod ct mai eficient. Este traditional s subdivizm acest task n sintactic i semantic, unde sintactica descrie cum diferite elemente formale a unui text, de cele mai multe ori propozitii, pot fi combinate, iar semantica descrie cum este calculat interpretarea. Analiza sintactic ne ajut s ntelegem modalitatea prin care cuvintele se grupeaz n vederea construirii unei propozitii sau fraze. n acest sens, o propozitie este format din constituenti sintactici, unii dintre ei fiind, la rndul lor, compui din constituenti. Constituentii care la rndul lor sunt formati din constituenti se numesc non-lexicali n timp ce toti ceilalti se numesc lexicali. Constituentii lexicali (cuvintele vocabularului) mpreun cu caracteristicile lor morfologice (numr, timp, caz etc.) formeaz lexiconul. Constituentii lexicali pot fi: substantive, adjective, adverbe, verbe, aa numitii determinanti n care intr articolele, adjectivele demonstrative, adjectivele relative, adjectivele posesive etc., apoi conjunctiile, prepozitiile i pronumele. De regula, determinantii, pronumele, conjunctiile i prepozitiile se cunosc i sunt fixate formnd o clasa nchis de cuvinte. n schimb, restul constituentilor lexicali formeaz o clas de cuvinte deschis, deoarece se pot aduga mereu noi elemente. Constituentii non-lexicali pot fi centrati n jurul unui anumit tip de constituent. Astfel putem distinge: -NP (noun phrase) sunt centrati n jurul unui substantiv; sunt formati dintr-un substantiv sau pronume plus elementele care l modific (determinant, adjectiv, alt substantiv etc); -VP (verb phrase) sunt centrati n jurul unui verb; sunt formati dintr-un verb i complementele sale directe i indirecte; -AP (adjectival phrase) sunt centrati njurul unui adjectiv; sunt formati dintr-un adjectiv i modificatori; -AvP (adverbial phrase) sunt centrati n jurul unui adverb; sunt formati dintr-un adverb i modificatori.; -PP (prepositional phrase) sunt centrati n jurul unei prepozitii; sunt formati dintr-o prepozitie i un NP; -RelClause (relative clause) sunt centrati n jurul unui pronume relativ; sunt formati dintr-un pronume relativ(care, ca) i unVP sau chiar o alt propozitie; -S (sentence) este format din constituentii de mai sus, n principal un NP i un VP. Regulile de sintax care specific organizarea posibil a cuvintelor ntr-o propozitie poart denumirea de gramatic. Aceasta ncearc s specifice ct mai multe posibilitti de structurare a propozitiilor. Ea se definete ntr-o maniera similar cu cea din cadrul limbajelor de programare. Totui, n contextul limbajului natural, aceasta este mult mai complexa. Din acest motiv, este putin probabil ca o gramatic s acopere toate cazurile posibile de structurare a propozitiilor. Unul din limbajele cele mai vechi i mai eficiente, folosite n prelucrarea limbajului natural este Prolog-ul. Deoarece inventatorul su, Alain Colmerauer, facea parte din rndul lingvitilor, Prolog ofer o serie de instrumente care fac viata mai uoar lingvitilor.

Gramaticile CFG (context free grammars) O gramatic CFG este o specificare formal a structurilor admise ntr-un limbaj, sub forma unor reguli de descriere. Chiar dac nu este suficient de puternic s acopere structura

sintactic a tuturor limbajelor naturale, formalismul acesteia este cu sigurant suficient de puternic pentru a descrie cea mai mare parte a structurilor unui limbaj natural (ex. Englez, German, Francez), cptnd astfel o utilizare larg. Dup cum se observ chiar din denumire, aceasta este o gramatic ce nu tine cont de contextul n care este folosit acel limbaj. n esent, o gramatic CFG este o colectie finit de reguli, care determin dac anumite propozitii sunt corecte din punct de vedere sintactic i care este de fapt structura lor gramatical. Iat cum ar arta un exemplu de gramatic CFG pentru aceste dou fragmente: a) Ion mnnc un biscuit. b) Acest leu mnnc o cprioar.

sentence -> noun_phrase, verb_phrase. noun_phrase -> proper_noun. noun_phrase -> determiner, noun. verb_phrase -> verb, noun_phrase. proper_noun -> [ion]. noun -> [caprioara]. noun -> [biscuit]. noun -> [leu]. verb -> [mananca]. determiner ->[un,o, acest].

Se observ cum o propozitie satisface gramatica enuntat dac este format dintr-un noun_phrase i un verb_phrase. La rndul su, un noun_phrase poate avea dou structuri, una dat de un substantiv propriu, i una dat de un determinant plus un substantiv comun. n fine, un verb_phrase este format dintr-un verb i un noun_phrase, apelndu-se n mod recursiv definiTiile enunTate mai sus. Rolul parser-ului este de a identifica regulile gramaticii care se potrivesc cu structura propozitiei analizate. Actiunea lui se concretizeaz ntr-un proces de cutare n toate structurile sintactice posibile, identificndu-le pe cele care se potrivesc cu propozitia de analizat. Dup cum tim, exist mai multe strategii de cutare (depth first, breath first), dar cea mai la ndemn este depth first (cutarea n adncime cu revenire prin backtracking) care este implementat direct n Prolog. Rezultatul oferit de parser ne confirm sau ne infirm corectitudinea unei propozitii n raport cu gramatica enuntat n prealabil. Traseul rezolutiv al unui algoritm de analiz sintactic (sau al parserului) al unei propozitii poate fi reprezentat sub forma unui arbore (parser tree). De exemplu, pentru propoziTia Ion mnnc un biscuit. obtinem urmtoarea reprezentare: Primul nod al arborelui (sentence) are doi fii: noun_phrase i verb_phrase. Aceast parte din diagram se supune primei reguli a gramaticii care spune ca sentence poate fi format din noun_phrase i verb_phrase. Se poate verifica in continuare ca fiecare parte a arborelui se supune uneia din regulile gramaticii: de exemplu noun_phrase poate contine un nod determiner urmat de un nod noun. Se observ c simbolurile terminale apar pe frontiera arborelui, n timp ce neterminalii se situeaz pe pozitii superioare n arbore. Un asemenea arbore este numit arbore de parsare i ne ofer dou tipuri de informatii: informatii despre text n sine i informatii despre structur. Dac ni se d un ir de cuvinte i o gramatic i dac reuim s construim un astfel de arbore de parsare (un arbore care are ca i rdcin sentence noun_phrase verb_phrase proper_noun verb noun_phrase ion mananca determiner

noun un biscuit

sentence, fiecare nod din arbore respect regulile gramaticii, iar irul de cuvinte apare n ordinea corect

pe nodurile terminale) atunci putem spune c sirul respectiv este gramatical (relativ la gramatica dat). Totui, analiznd gramatica de mai sus, observm c ea este incomplet. De exemplu, forma verbului este aceeai pentru toate formele subiectului, indiferent de numr sau persoan. n realitate, situatia este alta, forma verbului depinznd de numrul subiectului. De aceea se impune introducerea unor parametrii care s permit i evidentierea acestor aspecte ale gramaticii. n plus, tot gramatica de mai sus sufer de aa numitul fenomen de supragenerare, care permite validarea unor propozitii eronate semantic. De exemplu, propoziiia un biscuit mnnc Ion este corect din punct de vedere al sintacticii gramaticii enuntate dar incorect din punct de vedere semantic. De aceea, se impune introducerea aa numitelor constrngeri semantice.

Gramaticile CSG (Context-sensitive grammar)

Mircea Marin O gramatic sensibile la context (CSG), este o gramatic formal , n care prile stng i dreapt laturile de orice norme de producie, poate fi nconjurat de un context de terminale i simboluri neterminal . Sensibile la context gramatici sunt mult mai general dect context-free gramatici , dar nc suficient de buna pentru a fi analizat de ctre un automat liniar marginit . Conceptul de context-sensibile din punct de gramatica a fost introdus de ctre Noam Chomsky , n anii 1950 ca o modalitate de a descrie sintaxa a limbajului natural n cazul n care acesta este ntr-adevr, de multe ori cazul n care un cuvnt poate sau nu poate fi adecvat ntr-un anumit loc, n funcie de context. Un limbaj formal care poate fi descris printr-o gramatic context-sensibile se numete limbaj contextsensibile . definiie oficial In oficial gramatica G = (N, , P, S) (acest lucru este acelai ca G = (V, T, P, S), doar ca non-Terminal V (ariable) se nlocuiete cu N i T (erminal ) se nlocuiete cu ) este sensibil la context n cazul n care toate regulile din P sunt de forma O unde A N (de exemplu, A este un singur neterminal ), , (N U ) * (de exemplu, i sunt iruri de nonterminals i terminale ) i (N U ) + (de exemplu, este un ir vid de nonterminals i terminale). Unele definiii aduga, de asemenea, c pentru orice norm de producie de forma U V a unei gramatici sensibile la context, aceasta trebuie s fie adevrat c | u | | V |. Aici, | u | i | V | indica lungimea siruri de caractere, respectiv,. n plus, o regul de forma S S cu condiia s nu apar pe partea dreapt a oricrei norme n cazul n care reprezint un ir gol este permis. Plus de ir gol permite afirmaia c limbile sensibile la context sunt un superset corespunztoare a limbilor context libere, mai degrab dect s fac declaraie mai slab ca toate gramaticile context gratuite cu nici producii sunt, de asemenea, gramatici sensibile la context.

Numele sensibile la context se explic prin i , care formeaza contextul A i a stabili dac o poate fi nlocuit cu sau nu. Acest lucru este diferit de la o gramatic context-free n cazul n care contextul unei neterminal nu este luat n considerare. (ntr-adevr, fiecare de producie a unei gramatici contextul gratuit este de forma V W, unde V este un singur simbol neterminal, iar w este un ir de terminale i / sau nonterminals (W poate fi gol)). n cazul n care posibilitatea de a aduga ir gol ntr-o limb se adaug la siruri de caractere recunoscute de gramaticile noncontracting (care nu pot include ir gol), apoi limbile n aceste dou definiii sunt identice. Exemplu de gramatica dependent de context :

Mersul lucrrii: Trasarea programului Alt-P : pentru redirectarea mesajelor din fereastra de trace catre imprimanta sau intr-un fisier numit PROLOG.LOG Tipuri de trasare: 1) pas cu pas: trace+(F10) - prin directiva trace (scrisa la inceputul programului); - prin setarea pe On a optiunii Trace din meniul Options/CompilerDirectives Semnificatia mesajelor din fereastra de Trace: - Variabilele nelegate se reprezinta _; - CALL: apelul predicatului cu valorile parametrilor; - RETURN: Cand o clauza este satisfacuta; - daca predicatul este nedeterminist se marcheaza punct de backtracking (*); - FAIL: Cand un predicat esueaza; - REDO: Indica faptul ca s-a facut backtracking; 2) trasare optimizata: directiva shorttrace 3) trasarea unor predicate specificate trace p1, p2... sau shorttrace p1, p2... 4) folosind predicatul trace, care reuseste intotdeauna si activeaza trasarea trace(on) sau o dezactiveaza trace(off)

Alt-T : pentru modificarea trasarii Controlul solutiilor Sistemul Prolog intra automat ntr-un proces de backtraking daca acest lucru este necesar pentru satisfacerea unui scop. Acest comportament poate fi n unele situatii deosebit de util, dar poate deveni foarte ineficient n alte situatii. Pentru a controla cautarea solutiilor, avem la dispozitie 2 predicate: fail, cut. Predicatul fail esueaza intotdeauna si are ca efect fortarea backtrackingului. Se foloseste atunci cand se doreste gasirea tuturor solutiilor. (Obs: orice alt predicat plasat intr-o conjunctie dupa fail nu va fi niciodata evaluat!) Predicatul cut reuseste intotdeauna (intoarce intotdeauna TRUE) si are ca efect prevenirea backtrackingului. Odata trecut peste un cut, nu se mai poate reveni la punctele de backtracking dinaintea lui (si deci nici la alte definitii ale predicatului ce-l contine). Efecte secundare: inlatura toate punctele de backtracking cuprinse intre clauza parinte (cea care are ! in corpul ei) si pana in momentul in care apare !. Predicatul cut are urmatoarele efecte laterale: - La ntalnirea predicatului cut toate selectiile facute ntre scopul antet de regula si cut sunt "nghetate", deci marcajele de satisfacere a scopurilor sunt eliminate, ceea ce duce la eliminarea oricaror altor solutii alternative pe aceasta portiune. O ncercare de resatisfacere a unui scop ntre scopul antet de regula si scopul curent va esua. - Daca clauza n care s-a introdus predicatul cut reuseste, toate clauzele cu acelasi antet cu aceasta, care urmeaza clauzei n care a aparut cut vor fi ignorate. Ele nu se mai folosesc n ncercarea de resatisfacere a scopului din antetul clauzei care contine cut. - Pe scurt, comportarea predicatului cut este urmatoarea: (C1) H :- D1 , D2, ..., Dm, !, Dm+1 , ..., Dn. (C2) H :- A1 , ..., Ap. (C3) H. Daca D1, D2, ..., Dm sunt satisfacute, ele nu mai pot fi resatisfacute datorita lui cut. Daca D1, ..., Dm sunt satisfacute, C2 si C3 nu vor mai fi utilizate pentru resatisfacerea lui H. Resatisfacerea lui H se poate face numai prin resatisfacerea unuia din scopurile Dm+1, ..., Dn, daca acestea au mai multe solutii. Utilizand predicatul cut, definitia functiei f(X, Y) poate fi rescrisa mult mai eficient astfel: f(X, 0) :- X < 3, !. f(X, 2) :- 3 =< X, X < 6, !. f(X, 4) :- 6 =< X. Predicatul cut poate fi util n cazul n care se doreste eliminarea unor pasi din deductie care nu contin solutii sau eliminarea unor cai de cautare care nu contin solutii. Se observa nsa ca exista doua contexte diferite n care se poate utiliza predicatul cut: ntr-un context predicatul cut se introduce numai pentru cresterea eficientei programului, caz n care el se numeste cut verde; n alt context utilizarea lui cut modifica semnificatia procedurala a programului, caz n care el se numeste cut rosu.

Listingul 1
DOMAINS line=string list=string* PREDICATES noun_phrase(list) sentence(list) verb(line) adjective(line) article(line) noun(line) genereaza. CLAUSES sentence([V|NP]):verb(V),noun_phrase(NP). noun_phrase([ART,N,ADJ]):article(ART), noun(N), adjective(ADJ). verb(rezolva). article(o). article(un). noun(problema). noun(rebus). adjective(usoara). adjective(interesant). genereaza :sentence(X), readln(_), nl, write(X),fail. Goal makewindow(1,15,10,"TASTATI ORICE TASTA PENTR GENERARE PROPOZITII CFG",0,0,25,80),nl, genereaza, write("Mai mult variante nu sunt.").

Comentariu! In acest caz apar tot felul de solutii atit corecte cit si incorecte. Facind studiul asupra utilizarii acestui predicat fail am observat ca sunt destul de multe solutii corecte atit din punct de vedere semantic cit si sintactic dar nu satisfac conditia de baza adica afisarea unei singure solutii, care in cazul de fata am obtinut-o totusi pe pozitia a 16-a in timpul ciclului(Vezi fig.2). Si mai apare un dezavantaj la utilzarea acestui predicat si anume, daca sofisticam gramatica prea tare, programul poate intra in ciclu, fapt care ne impiedica sa iesim din acesta.

Listingul 2
DOMAINS s=string text=string* i=integer PREDICATES start meniu(i) fraza(text) verb(s,s,s) pronume(s,s,s) numar(s,s) atribut(s,s) CLAUSES fraza([P,V,N,A]):-pronume(X,Y,P),verb(X,Y,V),numar(X,N), atribut(X,A). pronume(singular, p1 ,"Eu"). pronume(singular, p2 ,"Tu"). pronume(singular, p3 ,"El"). pronume(singularf, p3 ,"Ea"). pronume(plural, p4 ,"Noi"). pronume(plural, p5 ,"Voi"). pronume(plural, p6 ,"Ei"). pronume(pluralf, p6 ,"Ele"). verb(singular,p1,sunt). verb(singular,p2,esti). verb(singular,p3,este). verb(singularf,p3,este). verb(plural,p4,suntem). verb(plural,p5,sunteti). verb(plural,p6,sunt). verb(pluralf,p6,sunt). numar(singular,student). numar(singularf,studenta). numar(plural,studenti). numar(pluralf,studente). atribut(singular,bun). atribut(singularf,buna). atribut(plural,buni). atribut(pluralf,bune). start:-makewindow(1,15,10,"GENERARE PROPOZITII CSG",0,0,25,80),nl, clearwindow, write("Alegeti optiunea :"),nl,nl,

write("1 write("2 write("3 write("0 readint(X),meniu(X).

crearea consecutiva a propozitiilor"),nl, Introducem un caz"),nl, afisarea propozitiilor"),nl,nl, iesire din program"),nl,

meniu(1):-makewindow(1,15,10,"GENERARE PROPOZITII CSG",0,0,25,80),nl, clearwindow, fraza(X), nl, write(X),nl, write("\nENTER - urmatoarea fraza"),nl, write("1 - crearea consecutiva a propozitiilor"),nl, write("2 - Introducem un caz"),nl, write("3 - afisarea propozitiilor"),nl,nl, write("0 - iesire din program"),nl, readint(Y), meniu(Y). meniu(2):-makewindow(1,15,10,"Introduceti persoana(Eu,Tu,El,Ea,Noi,Voi,Ei,Ele) pentru a forma propozitia dorita",0,0,25,80),nl, readln(X), fraza([X,A,B,C]),nl,write(X," ",A," ",B," ",C),nl,nl, write("1 - crearea consecutiva a propozitiilor"),nl, write("2 - Introducem un caz"),nl, write("3 - afisarea propozitiilor"),nl,nl, write("0 - iesire din program"),nl, readint(Z),meniu(Z). meniu(3):-makewindow(1,15,10,"GENERARE PROPOZITII CSG",0,0,25,80),nl, clearwindow, fraza([A,B,C,D]), nl, write(A," ",B," ",C," ",D),nl, fail, write("1 - crearea consecutiva a propozitiilor"),nl, write("2 - Introducem un caz"),nl,nl, write("0 - iesire din program"),nl, readint(Y), meniu(Y). meniu(0):-clearwindow, exit. Goal start.

Comentariu! In cazul unei gramatici cu context definit, probabilitatea generarii unor constructii nelogice este mult mai mica. Asemenea situatii pot fi cauzate doar din cauza unor erori elimentare ale programatorului, si nicidecum din cauza unor probleme globale. Pentru solutionarea problemelor ce tin de gramatici cu context, cel mai flexibil tip de date este *symbol, sau cu alte cuvinte listele.

Listingul 3
DOMAINS s=string list=string* i=integer PREDICATES start meniu(i) fraza(list) sentence(list) verb(s,s,s) pronume(s,s,s) complement(s,s) atribut(s,s) pron(s,s,s) verbs(s,s,s) article(s,s) noun(s,s) adjective(s) CLAUSES fraza([P,V,N,A]):-pronume(X,Y,P),verb(X,Y,V),complement(X,N), atribut(X,A). sentence([P,V,At,Ad,N]):-pron(X,Y,P),verbs(X,Y,V),article(X,At),adjective(Ad), noun(X,N). pron(sing,"1p","I"). pron(sing,"2p","You"). pron(sing,"3p","He"). pron(sing,"3p","She"). pron(pl,"1p","We"). pron(pl,"2p","You"). pron(pl,"3p","They"). verbs(sing,"1p",am). verbs(sing,"2p",are). verbs(sing,"3p",is). verbs(pl,_,are). article(sing,a). article(pl,""). adjective(good). noun(sing,student). noun(pl,students). pronume(singular, p1 ,"Eu"). pronume(singular, p2 ,"Tu"). pronume(singular, p3 ,"El"). pronume(singularf, p3 ,"Ea"). pronume(plural, p4 ,"Noi"). pronume(plural, p5 ,"Voi"). pronume(plural, p6 ,"Ei"). pronume(pluralf, p6 ,"Ele").

verb(singular,p1,sunt). verb(singular,p2,esti). verb(singular,p3,este). verb(singularf,p3,este). verb(plural,p4,suntem). verb(plural,p5,sunteti). verb(plural,p6,sunt). verb(pluralf,p6,sunt). complement(singular,student). complement(singularf,studenta). complement(plural,studenti). complement(pluralf,studente). atribut(singular,bun). atribut(singularf,buna). atribut(plural,buni). atribut(pluralf,bune). start:-makewindow(1,15,10,"GENERARE PROPOZITII CSG - Prezentul simplu",0,0,25,80),nl, clearwindow, write("Alegeti optiunea :"),nl,nl, write("1 - crearea consecutiva a propozitiilor"),nl, write("2 - generarea tuturor propozitiilor posibile"),nl, write("3 - generarea tuturor propozitiilor posibile in ROMANA"),nl, write("4 - generarea tuturor propozitiilor posibile IN ENGLEZA"),nl, write("0 - iesire din program"),nl, readint(X),meniu(X). meniu(1):-makewindow(1,15,10,"GENERARE PROPOZITII CSG",0,0,25,80),nl, clearwindow, fraza(X), sentence(P),nl, write(X),nl, write(P),nl,nl, write("\nENTER - urmatoarea fraza"),nl, write("1 - crearea consecutiva a propozitiilor"),nl, write("0 - iesire din program"),nl, readint(Y), meniu(Y). meniu(2):-makewindow(1,15,10,"GENERARE PROPOZITII CSG",0,0,25,80),nl, clearwindow, fraza([A,B,C,D]), nl, write(A," ",B," ",C," ",D),nl, sentence([P,V,At,Ad,N]), write(P," ",V," ",At," ",Ad," ",N),nl,fail, write("1 - crearea consecutiva a propozitiilor"),nl, write("0 - iesire din program"),nl, readint(Y), meniu(Y). meniu(3):-makewindow(1,15,10,"GENERARE PROPOZITII IN ROMANA CSG",0,0,25,80),nl, clearwindow, fraza([A,B,C,D]), nl, write(A," ",B," ",C," ",D),nl,fail, write("1 - crearea consecutiva a propozitiilor"),nl, write("0 - iesire din program"),nl, readint(Y), meniu(Y).

meniu(4):-makewindow(1,15,10,"GENERARE PROPOZITII IN ENGLEZA CSG",0,0,25,80),nl, clearwindow, sentence([P,V,At,Ad,N]), write(P," ",V," ",At," ",Ad," ",N),nl,nl,fail, write("1 - crearea consecutiva a propozitiilor"),nl, write("0 - iesire din program"),nl, readint(Y), meniu(Y). meniu(0):-clearwindow, exit. Goal start.

Comentariu! Sarcina data s-a dovedit a fi cea mai interesanta si complexa. Realizarea unui system intelligent de instruire bilingva, fie si programat algorithmic, este o sarcina dificila. Au fost facute 2 incercari de a obtine o generare sincrona a propozitiilor cu sens unic in ambele limbi, insa ambele incercari au esuat. Nu a fost gasita gasita solutia in limitele sistemului Prolog.

Concluzie: Efectuind aceasta lucrare de laborator am sesizat ca desi este mult timp de cind oamenii de stiinta incearca sa faca ca limbajele automatizate sa fie cit mai aproape de limbajele naturale sunt totusi multe impedimente! Este destul de complicat sa faci un program , generator de limbaj in baza unor gramatici, lipsita de erori logice. Am incercat mai multe metode de indeplinire a conditiei problemei sus puse si nici o metoda nu a adus rezultatul mult asteptat.

Referinte: 1.Tatar D.,Inteligenta artficiala, Editura Albastra, Cluj Napoca 2001,pag.74-75. 2. Utilizarea predicatuli cut si fail in PROLOG: http://thor.info.uaic.ro/~georgie/prolog/lab3.html 3. Gramatici sensibile la context (Wikipedia) : http://translate.google.md/translate?hl=ro&langpair=en%7Cro&u=http://en.wikipedia.org/wiki/Contextsensitive_grammar

S-ar putea să vă placă și