onceki sorunlardan morfoljik olarak phrase yakalamaya iliskin sorun cozuldu assagidaki kararlar alindi bir propernounun ekleri null, ylA, nHn ve turevi eklerden birisi ise bu propernounun case'i (ki bu handlecase fonksiyonu ile donuyor) nom olur o halde ozelisim atom phrase i icinde normalde tmorp(K,propernoun,Sem) olan satir asagidaki sekilde degistirilmistir tmorp(K,propernoun,Sem,nom) sayet propernounun ekleri de, den, yA eklerinden birisi ise location phrase demektir ve bu durumda case asadakilerden birisidir loc,abl,dat hocam merhabalar; > Selam, > > > gecen carsamba icin ozur dilerim, sikisik bir zamaniniz oldugunu > > Salı değil miydi? ewet hocam saliydi ama bu aralar kafam yerinde degil o yuzden gunleri bile sasirmaya basladim > > > ------------------------------------------------------------------- > > sorun, okulda ali toplantilari goster > > ornegini ele alalim, burda kisi, "okuldaki yada ali ile olan > > toplantilar" da > > diyebilir > > "okuldaki ve ali ile olan toplantilar"da diyebilir > > bunun icin butun phraseler arasina bir mantik baglaci koymak gerekebilir > > ben simdilik ve baglaci varmis gibi dusunuyorum, konulmadigi > > zaman turkcede > > ve baglaci kabul gorur > > konulursa ne yapacagimi ileriye birakiyorum > > ------------------------------------------------------------------- > > Bu syntax-based approach'la güzel çözülür. ok hocam oraya gelince tartisiriz o zaman, > > > > sorun: osman beyde toplanti var > > osman beyle toplanti var > > burdaki iki osman bey nasil ayirt edilir > > Şadi, bu konuda en doğru çözüm Özlem'in zaten yazdığı "parse" yüklemini > kullanmak: > ?- parse([k,a,h,v,a,l,t,ı,y,l,a],A). > A = [type(noun), sem(_G508^breakfast(_G508)), num(sing), relative] > > ?- parse([k,a,h,v,a,l,t,ı,d,a],A). > A = [type(noun), sem(_G490^breakfast(_G490)), num(sing), case(loc)] > > Gördüğün gibi hiç arclarla falan oynamaya gerek yok. Kelimeyi bu yüklemle > parse et, ikinci argüman olan listenin içinde "relative" varsa bir şey, > "case(loc)" varsa başka bir şey yap, olsun bitsin. Birlikte yazılma-ayrı > yazılma detayını boşver, speech dinlerken sen farkı nereden anlıyorsun? İşte > böyle anlıyorsun. Morfolojik analiz yapıyorsun, o analiz sana neyin yer > neyin ise "ile" alabilecek bir şey olduğunu şıp diye söylüyor. > ---- ewet hocam haklisiniz, bunu gorememisim, soylediklerinizi denedim eklere gore outputlari (abl, nom,dat gibi) listeleyip hangi durumlarda(kisi,location gibi) ortaya cikacaklarina dair bir lookup table hazirladim. ancak soyle bir sorun var tmorpda handlecase ile yaptirim uygulayamiyorum (benmi hata yapiyorum diye ozlemin tmorpunu denedim) 8 ?- tmorp('Alide',X,Y,Z,R,P,O,K). X = propernoun Y = _G569^ali(_G569) Z = loc R = sing P = 3 O = _G353 K = _G354 ; bu cok guzel calisiyor ve Z yerine loc donduruyor (case olarak) simdi bunu nom'a force etmek istiyorum diyelim, asagidaki sekilde yaziyorum, bu haldeyken bir sonuc bulamamasi lazim. ?- tmorp('Alide',X,Y,nom,R,P,O,K). X = propernoun Y = _G566^ali(_G566) R = sing P = 3 O = _G365 K = _G366 ; ve nom oldugu halde loc olan birseyi buluyor, parse fonksiyonuna kadar inip inceledim 5 ?- parse([A,l,i,d,e],X),handlecase(propernoun,X,nom). A = 'A' X = [type(propernoun), sem(_G615^ali(_G615)), num(sing), case(loc)] ; seklinde handlecase sacmaliyor, X de de loc olarak gorulen case, nom'a force edilince gayet guzel calisiyor, simdi handlecase yerine icindeki singmember fonksiyonunu denedim, 9 ?- parse([A,l,i,d,e],X),singmember(case(nom),X). No 10 ?- parse([A,l,i,d,e],X),singmember(case(loc),X). A = 'A' X = [type(propernoun), sem(_G592^ali(_G592)), num(sing), case(loc)] ; bu kez 9 da istedigim gibi calismazken 10 da da istedigim gibi calisti, eh o zaman tmorpun icinde handlecase degil singmember koyayim dedim tmorp(Word,Type,Sem,Case):- nonvar(Word), acl(Word,Clist), parse(Clist,Mlist), type(Mlist,Type), %handlecase(Type,Mlist,Case), singmember(case(Case),Mlist), %handlecase yerine bunu yazdim cunki anlamadigim bir sebepten verilen case calisitirmiyodu singmember(sem(Sem),Mlist). yukardaki (kendi eksiltilmis tmorp'um) tmorp fonksiyoununun teorik olarak calisacagini dusundum, ancak 1 ?- tmorp('Ali',X,Y,Z). No yazinca bile calismiyor (Z yerine bir zorlama yok acik bir var halinde koymama ragmen geri deger dondurmuyor) bu sorunu cozemedim --- bunlari yazdiktan sonra singmember fonksiyonunu inceledim, (bunu prolog fonksiyonu saniyordum ama misc.pl icindeymis, genelde misc.pl icindekiler hep gol atiyorlar), sonunda singmember yerine Mlisti dondurup member veya not member kullanmaya karar verdim ve asagidakine benzer birseyler cikti: %propernoun kokunden gelen ozel isimler orn. aliyle ozelisim(Sem) --> [V], { name(V,Asc),Asc=[J|P],T is J - 32,append([T],P,R), name(K,R), write(K),nl, nl,write(tmorp(K,propernoun,Sem)), tmorp(K,propernoun,Sem,Mlist), not(member(case(_),Mlist)), write('ozelisim'),nl,write('Sem:'),write(Sem),nl }. %propernoun kokunden gelen loclar orn. alide loc(Sem) --> [V], { name(V,Asc),Asc=[J|P],T is J - 32,append([T],P,R), name(K,R), write(K),nl, nl,write(tmorp(K,propernoun,Sem)), tmorp(V,propernoun,Sem,Mlist), member(case(_),Mlist), write('ozelisim->yerisim'),nl,write('Sem:'),write(Sem),nl }. tmorp(Word,Type,Sem,Mlist):- nonvar(Word), acl(Word,Clist), parse(Clist,Mlist), type(Mlist,Type), singmember(sem(Sem),Mlist). bu eklentilerden sonra calisti, ve artik aliyle , ali , alinin dedigimde ozelisim , alide, aliden, aliye dedigimde ise location olarak donuyor > > ------------------------------------------------------------------- > > sorun: okul fjsldkfj gorusme goster > > cumlesinde gorusme konu oldugu icin calismiyor, cunki oncesindeki butun > > cumleleri bir sekilde anything olarak goruyor ve okulda yer oldugu halde > > anything. > > bunun sebebi ts den sonra bir sekilde konu aramaya basliyor > > olmasi ve yerden > > once konu aramaya basladigi icin okulu da konudaki anything loopuna koyup > > anything algilamasi. > > > > cozum:sayet yer arayan kismi konudan once koyarsam sorun duzelir, > > once yeri > > bulur sonra anythignleri alip konuyu bulur. > > > > sorun: bu cozum calismaz, cunki butun phraseler bir sekilde > > anythingler ile > > dolu ve sayet yer phrasini one alirsam bu kez konu basta olan bir cumle > > verildiginde konu anything icinde kaynar. > > > > hocam bunu cozemedim. > > Bu tip bir soruyu anlamak hemen hemen imkansız. Bana Prolog'a ne query > girdiğini, ne cevap istediğini ve hakikatte ne cevap çıktığını programının > bu işleri yapan son haliyle birlikte yollarsan belki anlayabilirim. > hocam programi ekte yolluyorum, bir sekilde su input verildiginde okulda fjsldkfj gorusme goster bunu S->YKF (yer konu fiil) olarak gormesini istiyorum, bunu gordugunu cikan debug yazilarindaki semantikten anliyabiliyoruz ancak yaptigimiz anything eklentileri bir sekilde bunu engelliyor, yukardada onceden belirttigim gibi bir recursion soz konusu ve kodun saglikli calismasini engelliyor, K->AK (konu->anything konu) seklinde bir recursion var, simdi once konu mu diye baktiginda konunun basinda yer oldugu halde bunlari anything zannediyor, bunu duzeltmek icin konuya bakmadan once yerlere bak dersem sayet sorun cozulur, ama ilerde yer phrasi icinde anythingler yazdigimda (yani Y->AY gibi bir eklenti geldiginde) bu sefer yerden onceki seyleri bozacak, yani genel kural olarak kabul ettigimiz butun phraseler cumlenin her yerinde yuzebilir (fiil haric) assumptioni burda bozuluyor, yada recursionlara bir cozum bulmak gerekiyor > > > ------------------------------------------------------------------- > > > > sorun. hatali cikiyor bir sebepten bulamadim > > > > hocam size yolladigim kodda bir sekilde dogru calistiginda > > argument expected > > gibi birseyler dedigini goruceksiniz, bu yazdigim anla fonksiyonundan > > kaynaklaniyor, sorunu cozmek icin ugrasiyorum, sizin teriminizle prologsal > > bir sorun :)) > > Önceki yorumum bu sorun için de geçerli. Ne input girince sorun çıkıyor? > Ayrıca zaten gönderdiğin şeyleri yükleyince "veriler" diye bir şeyin eksik > olduğunu söyleyip hata verdi. > hocam hepsini derleyip yeniden yolluyorum (bunlarin icinde yeni yaptigim eklentiler de var) dun size attigim mailden beri yaptigim bir diger yenilikte giris komutunu calistirmak oldu, append, assert ve retract komutlariyla ilkelde olsa birseyler calisiyor, (ornegin giris. yazip konsola geldikten sonra "ali okul var" gibi birseyler yazarsaniz veriler.txt ye (veriler.pl databasein tutuldugu yer, henuz oraya eklemeye cesaret edemedim) ekleme yapiyor) bunun icin takvim id denilen primary keyi otomatik arttirmak gerekti, bunu cozmek icinde id.pl diye bir dosya kullandim bu dosya enson girilen id yi tutuyor ve giris isleminden sonra arttiriyor. Calismalarinizda Basarilar Dilerim SES not: hocam bu mailleri saklayip dosyaliyorum, bunlari birer calisma raporu olarak dusunuyorum, (bir sekilde raporumu yazarken iyi birer kaynak olucaklar diye dusunuyorum, ayrica ilerde birisi bu koda devam ederse o da kullanabilir belki), o yuzden bazan cok uzun yazdigimi dusunuyorum, umarim hata yapmiyorumdur. ------------------------------------------------------------------- kelimelerin kokunden cok morfolojik birer analizden gecmeleri soz konusu, bu analizden sonra orjinalde propernoun olan birseyin location olmasi mumkun, keyword approacda kullandigimiz kelime kokleri dogru fonksiyonlari cagirmamiza engel olabilir, o yuzden semantigimizi degistirip bu keyword approachta anlamaya yarayan fonksiyonlara bu bilgiyi gecirmek gerekiyor bu bilgi gecisi icin kelime semantigi-tipi (yani semantik bilgisi'-' isareti ve kelimenin eklerden sonraki tipi) seklinde bir uygulama dusunuyorum, boylelikle keyword bazli yaklasimda hangi fonksiyonu cagarabilecegime daha iyi karar verebilirim. hep parse etmekte cok zor degil X-Y=Sem dedigim zaman sayet Sem=_G765^okul(_G765)-loc ise X=_G765^okul(_G765) , Y= loc olucaktir, sonra X i anla fonksiyonuna gondereceim, anladan cikan bilgiyi Y ile calistira gonderip Y yi test ettirip anladan donen koku (okul) parametre olarak vercegim. ------------------------------------------------------------------- butun loclar icin abl olmicak loc olucak