+ Yanıtla
Sayfa Düzeni: 1 / 2
1 2 SonSon
Toplam 15 sonuçtan 1 ile 10 arası olanlar

Konu Başlığı: Türkçe Hâl Eklerini Programatik Olarak Eklemek

  1. #1

    Türkçe Hâl Eklerini Programatik Olarak Eklemek

    Parametrik gelen Türkçe bir ifadeye, ismin hâl eklerini programatik olarak uygulamak çok basit bir iş değil. Çünkü Türkçe'deki sesli uyumları, sessiz benzeşmeleri vs. gelecek ekin yapısını, hatta parametrik ifadenin son harfini bile değiştiriyor.

    Sitelerde "mucit adlı kullanıcının profili" lafını "mucit'in profili" diye gördüğümüz pek vaki değildir.

    Bu zorluğu .NET ortamında bir nebze olsun çözecek ufak bir kod yazdım. http://code.google.com/p/turkcehaller/ adresinden isteyen indirip kullanabilir.

    Kod, performans kaygısıyla yazıldığı için veritabanı veya sözlük kullanmıyor. Durumu tamamen kurallı bir ilişki arayarak çözmeye çalışıyor.

    Kullanımı:
    Kod:
    string result = TurkceHaller.Uygula("Ahmet", TurkceHaller.IsminHali.Yonelme);
    Örnek işleri:
    Kod:
    # Ahmet > Ahmet'e
    # Şeftali > Şeftali'ye
    Kolay gelsin.
    evcil.net yeniden!

  2. #2

    Re: Türkçe Hâl Eklerini Programatik Olarak Eklemek

    Tebrikler, bildiğim kadarı ile çok daha kapsamlı benzer bir çalışma (JAVA ile) mevcut ancak genede devam etmenizi dilerim, size de kolay gelsin.

  3. #3

    Re: Türkçe Hâl Eklerini Programatik Olarak Eklemek

    harika.

    bunun PHP versiyonunu yazayım ben de.
    l.bali.

  4. #4

    Re: Türkçe Hâl Eklerini Programatik Olarak Eklemek

    Selamlar,

    Böyle bir programı bağımsız bir uygulama olarak yazan var mı, biliyor musunuz? Benim istediğim şey herhangi bir ismi verince o ismin beş temel halini, çoğul ekini, genitive halini, isim cümlelerinde geçmiş zaman halini (-di, -miş) koşul halini vb. gösterecek bir program. Böyle bir program bilen var mı? Aynı zamanda bu çekimlerin İngilizce çevirisini de yapsa iyi olurdu.

    Örnek vermek gerekirse, diyelim ki 'öğrenci' yazdığımızda bana şunları versin istiyorum:

    öğrenci
    öğrenciye
    öğrencide
    öğrenciden
    öğrenciyi
    öğrencinin
    öğrenciler
    öğrenciydi
    öğrenciymiş
    öğrenciyse

    Türkçeyi yabancı dil olarak öğrenenler için böyle bir programa ihtiyaç var. Fiil çekimleri için bu şekilde bir program var ancak isimler için benim bildiğim bir program yok.

  5. #5

    Re: Türkçe Hâl Eklerini Programatik Olarak Eklemek

    Mucit,
    Konuyu biraz yakından baktım. Bazı ayrıntılar dikkatimi çekti:

    1. Kesme işareti özel isimler dışında kullanılmaz.Dolayısıyla "Masa > Masa'ya" değil "masa > masaya" olması gerekiyor. Ayrıca özel isimlerin bazılarında, örneğin kurum isimlerinde veya başka özel isimlerden türetişmiş özel isimlerde kesme işareti kullanılmaz.
    2. Sert ünsüzler dört tane değil sekiz tane olmalı. Kodlardan anladığım kadarıyla bulunma ve çıkma durumlarında -de ve -den yerine -te ve -ten kullanmak için p, ç, t, k ünsüzlerini tanımlamışsın. Ançak p,ç,t,k'nin dışında bir de h,s,ş,f var. Bunlarla biten isimlerde de sert ünsüzle devam edilir.

    Tamlamalarla ilgili durum kuralsız bir durum veya formüle edilemeyen bir durum değil. Bu konuda kesin kurallar var. Ancak bunları tanımlayabilmek için önce possessive suffix (iyelik eki) konusunu tanımlaman lazım. Örneğin "Ali'nin evi" veya "Ali'nin kedisi" derken 'evi' ve 'kedisi' iyelik eki kullanıyor. İyelik eki her zaman s kaynaştırma harfi (buffer) alır. İyelik eki önemli çünkü compound noun dediğimiz birleşik isimlerde ve belirtili isim tamlamalarında aynı ek kullanılıyor.

    Kural: İyelik ekinden gelen bütün hal ekleri "n" kaynaştırma harfini kullanır. Bu durum iyelik ekinin sıradan kullanımı için geçerli olduğu gibi aynı zamanla tamlamalardaki ve bileşik isimlerdeki kullanımı için geçerlidir.

    Örnek:
    Ali'nin evi : evi burada iyelik eki almış. Bundan sonraki bütün hal eklerinde n kaynaştırıcısı kullanılmalı.
    Ali'nin evine
    Ali'nin evinde
    Ali'nin evinden
    Ali'nin evini
    Ali'nin evinin

    Alinin kedisi : kedisi burada -i iyelik ekini almış. İyelik ekiyle ile her zaman s kaynaştırma harfi kullanılır.
    Ali'nin kedisine
    Ali'nin kedisinde
    Ali'nin kedisinden
    Ali'nin kedisini
    Ali'nin kedisinin

    İyelik eki ile ilgili bu kural (yani iyelik ekinden sonra gelen hal eklerinin hepsinde n kaynaştırma harfi kullanma zorunluluğu) belirtili isim tamlamalarında ve bileşik isimlerde de geçerlidir. Çünkü bularda da iyelik eki kullanılır.

    Örnek:
    iş gezisi, Ankara Üniversitesi, kapı kolu, el arabası, vb.
    Bunlardan sonra hangi hal eki gelirse gelsin n kaynaştırıcısı kullanılır. Bu açıdan sıradan iyelik ekiyle (örneğin yukarıdaki kedisi örneğinde oduğu gibi) belirtili isim tamlamaları veya bileşik isimlerin hiç bir farkı yok.

    Belirtisiz isim tamlamalarına eklenen hal eklerinde n kaynaştırma harfini görmüyoruz çünkü onlar zaten iyelik eki almıyor. Oysa iyelik eki almış sıradan isimler, iyelik eki almış belirtili isim tamlamaları ve iyelik eki almış bileşik isimlerin hepsinde eğer sona bir hal eki ekleyeceksek n kaynaştırma harfi kullanılır.

    Ayrıca senin listende eksik olan bir diğer konu isim cümleleriyle ilgili çekimler. Örneğin -di, -miş, -se ve -dir çekimleri (öğrenciydi, öğrenciymiş, öğrencidir) eklenmeli.

    İsimlerle ilgili kuralları formüle etmeyi biliyorum ancak programcılıktan hiç anlamadığım için bir işe yaramıyor.
    Mesaj erdinç tarafından 10.09.2008 (21:57) yeniden düzenlendi.

  6. #6

    Re: Türkçe Hâl Eklerini Programatik Olarak Eklemek

    Erdinç,

    Detaylı mesajın için teşekkürler. Hayli işime yarar bilgiler olmuş. Belirttiğin eksiklikler için bir gözden geçirme yapacağım.

    Türkçe bilgim çok derin değil. Ama madde madde mesajına ilişkin görüşlerimi belirteyim:

    1. Kesme işaretini bilinçli olarak kullandım. Çünkü senin de belirttiğin gibi ağaç > ağaca şekline geliyor ki bu da orijinal kelimede harf değişikliği anlamına geliyor. Kütüphanenin ilk sürümünde bu detaya vakit harcamadım. Her şeyi kesme işaretiyle ayrılacak özel isim olarak varsaydım. Yani "known issues" kabilinden bir eksiklik. Teşekkürler.
    2. Sert ünsüzlerde eksiğim olabilir. Kontrol edeceğim.
    3. Tamlamalarla ilgili kural var demene rağmen, ben düşündüğüm bazı örneklerde bu kuralı bulamadım. Yani yazılımın anlayabileceği bir kural düşünemedim.

    Mesela: "Van Kedisi" ile "Özgür Bürokrasi" aynı şekilde bitiyor. İkisini birden çekimleyelim:
    Van KedisiNi - Özgür BürokrasiYi. İşte bu noktada iflas ettim. Bunu dedim ancak bir sözlük vasıtasıyla anlayabilirim. Çünkü kedisi kelimesini bürokrasi kelimesinden ayıracak, yani kedisi'nin iyelik eki aldığını ama bürokrasi'nin almadığını gösterebilecek herhangi bir imkanım yok.

    Belki bu soru işaretini ortadan kaldırabilecek formül önerebilirsen, kodunu gerçekleyebilirim.

    Not olarak söyleyebilirim ki bu kod 2 saatlik emeğin ürünüdür. Kapsamlı bir uygulama olmadı maksadım. En hızlı şekilde, gerektiği noktaya hâl eki verebilelim diye.

    4. Listemde ismin sadece 5 hâlinin olması, basit bir kütüphane olması ile fazlasıyla alakalı

    Teşekkür ederim diğer arkadaşlara da.
    evcil.net yeniden!

  7. #7

    Re: Türkçe Hâl Eklerini Programatik Olarak Eklemek

    Alıntı mucit tarafından gönderilen mesaj: Mesajı Göster
    Mesela: "Van Kedisi" ile "Özgür Bürokrasi" aynı şekilde bitiyor. İkisini birden çekimleyelim:
    Van KedisiNi - Özgür BürokrasiYi. İşte bu noktada iflas ettim. Bunu dedim ancak bir sözlük vasıtasıyla anlayabilirim. Çünkü kedisi kelimesini bürokrasi kelimesinden ayıracak, yani kedisi'nin iyelik eki aldığını ama bürokrasi'nin almadığını gösterebilecek herhangi bir imkanım yok.
    Evet, bu konuda haklısın. Dediğin gibi bu konuyu formülle çözme imkanı yok. Bunun için bütün Türkçe isimlerin yalın halini içeren bir veritabanı gerekiyor.

    Evcil.net'te, "Ahmet'in profiline göz atın" ve "Ahmet adlı kullanıcının profiline göz atın" örnekleriyle karşılaşınca konuyu daha iyi anladım. Aslında yukarıda kesme işareti konusunda söylediklerimi bu durumda geri alıyorum çünkü kullanıcı isimleri söz konusu olduğunda kesme işareti kullanılması gerekir. Örneğin "mucit'in profiline göz atın" şeklinde kesme işaretiyle yazılması gerekiyor.
    Mesaj erdinç tarafından 11.09.2008 (00:24) yeniden düzenlendi.

  8. #8

    Re: Türkçe Hâl Eklerini Programatik Olarak Eklemek

    Kesme işaretini, sadece eki geri göndererek halledebilirsiniz, isteyen kesme işaretini eliyle koyup keser istemeyen kesmez. ($isim'$ek veya $nesne.$ek gibi).

    Tamlama konusunda takılmanızın nedeni Türkçe dilbilgisi bilginizin yetersiz olması olabilir. Çünkü "gösterme" diye bir ek yok bildiğim kadarı ile (yön gösterme var o da içeri-ye dışarı-ya şeklinde) sizin "yı" ile "nı" yı karıştırmanızın sebebi de bu. Fonksiyonda tanımladığınız diğer ek çeşitlerinden bazıları da gene bu durum gibi karışık. Ek olarak Türkçe'de ekler üçe ayrılır kodunuza verdiğiniz "hal ekleri" ismi bu üç ek tipinden "isim çekim eklerinin" altı alt kolundan sadece birisidir. Fakat yaptığınız fonksiyon bundan fazlasını (karışıkta olsa) barındırıyor.

    Düzenleme: tamlama ile ilgili sıkıntıyı anlayamadığım için başkaca birşeylerde karalamıştım sildim onları sonra.
    Mesaj mow tarafından 11.09.2008 (01:16) yeniden düzenlendi.

  9. #9

    Re: Türkçe Hâl Eklerini Programatik Olarak Eklemek

    Selamlar mow,

    Aslında arkadaş çok iyi anlamış konuyu. Hal eklerinin nasıl isimlendirildiği o kadar önemli değil. Accusative yerine yükleme hali veya belirtme hali de deniliyor. Onun yerine burada gösterme hali kullanılmış. Zaten yazılardan da anlaşıldığı gibi accusative kastediliyor.

    Diğer bahsettiğin konuya gelince, Türkçede 3 tane kaynaştırma harfi var: n,s ve y
    y durum ekleriyle kullanılıyor (-e yönelme, -de kalma, -den çıkma).
    s iyelik ekiyle kullanılıyor (örneğin kedisi, arabası, vb.)
    n genitive halde kullanılıyor ve iyelik ekinden sonra gelen bütün hal eklerinde kullanılıyor.

    Örneğin, -e yönelme haliyle ilgili birkaç örnek yapalım. Eve, okula, denize, Ankara'ya, Türkiye'ye, odaya gidiyorum, diyoruz. Gördüğün gibi yönelme halinde normalde -y kaynaştırma eki kullanılır.

    Oysa Kuşadası'na, havalanına, otobüs durağına, Ayşe'nin evine diyoruz. Bu sefer -y kaynaştırma harfi yerine -n kaynaştırma harfi kullandık. Oysa yine yönelme hali için çekim yapmıştık. Peki bu neden böyle oldu? Bunun nedeni şu ki eğer yönelme, kalma veya çıkma hal eklerinden önce gelen 3.tekil kişi iyelik eki veya tamlama eki varsa o zaman -n kaynaştırma harfi kullanılır.

    sorun sadece bu kadar da değil. Kalma hali için örnek verirsek, "Ankara'da yaşıyorum" diyoruz. Oysa Kuşadası'nda yaşıyorum" diyoruz.

  10. #10

    Re: Türkçe Hâl Eklerini Programatik Olarak Eklemek

    yönelme durumu için uydurma kurallar

    genelde geniş ünlü ile biten kelimeler için "-y" dar ünlü ile bitenler için "-n" kaynaştırma harfi uygundur, istisna kurallar;

    - son ünlüsü(ü1) dar olmasına rağmen ondan önceki ünlüsü(ü2) geniş olan kelimlerde, (ü2) nin önünde sessiz bir harf varsa "-y" alırlar (peri-ye,revü-ye,karı-ya )

    - ilk harfi ünlü son harfi ünlü olmak şartı ile darla başlayıp darla bitiyorsa ortada ne olursa olsun "-n" ilk geniş son geniş ise ne olursa olsun "-y" alır (astalavista-ya)

    - bu kurallara uymayan (özellikle Türkçe'de bir anlamı olmayan) diğer kelimelerde "-y" veya "-n" den herhangi biri kullanılabilir. (pevi-ye veya pevi-ne)

    Geniş ünlüler: a, e, o, ö -> ankara-ya, kaya-ya, germe-ye, hebele-ye
    Dar ünlüler: ı, i, u, ü -> kuşadası-na,evi-ne

    -----------------------------------------------
    Bu kuralları az önce uydurup üstün körü kontrol ettim ama bir de siz bakın. Kurallar bir biri ile çelişiyor mu ona da bakmak lazım.
    Mesaj mow tarafından 11.09.2008 (04:53) yeniden düzenlendi.

+ Yanıtla
Sayfa Düzeni: 1 / 2
1 2 SonSon

Bu konu başlığı için etiketler

Mesaj Seçenekleri

  • Yeni başlık açamazsınız
  • Cevap yazabilirsiniz
  • Dosya ekleyemezsiniz
  • Mesajlarınızı değiştiremezsiniz