Sözcüklere Gelen Eklerin Ses Uyumlarını Sağlama

leumruk

Uzman
Uzman
Katılım
15 Nisan 2007
Mesajlar
3,469
Excel Vers. ve Dili
Office 2010 & 2013 tr
Selamlar,
Kullandığım bir programda dikkatimi çeken sözcük-ek ses uyumsuzluğu için çözüm üretmek amacıyla hazırladığım çalışmayı paylaşıyorum. Daha çok programlarda metinlerde hal ve tamlama ekleri kullanılıyor. Esasen bunlarla ilgili başladığım kodlamayı tüm çekim eklerine genişlettim. Olabilirliğini merak ettiğimden yapım eklerini de çalışmaya dahil ettim. Son şeklinde tüm ekler kodların içine girdi. Dil bilgisinde bulunan bir kaç kural dışında kodlamaya tüm ayrıntıları dahil ettim.
Dikkat edilmesi gerekenler:
1- Denemek için kelimeleri özensiz seçtim. Her ekin her sözcüğe gelemeyeceği göz önünde bulundurulmalı.
2- İsme gelen ekler ile fiile gelen eklerin farklı olduğu unutulmamalı.
3- Ünsüz yumuşaması kuralının kodlamasını ekledim ancak pasif durumda 'sozcuk = ysozcuk satırını aktifleştirerek kullanıma açabilirsiniz. Yumuşama kuralının istisna sözcük sayısı çok fazla olduğundan kuralı dahil etmek istemedim. İstisna sözcükler ayrı bir sayfaya eklenerek buna çözüm bulunabilir.
4- Tüm ekleri denemedim, beklemediğiniz sonuçlarla karşılaşabilirsiniz. Bilgi verirseniz düzenlemeye çalışırım.
5- Ekleri sarı alana yazarken ince ve yumuşak ses biçimiyle yazmanız gerekmektedir. Örnek "di" doğru, dü, du ya da tu, ti yanlış. "ecek"doğru acak yanlış.
C++:
Function Ekler(sozcuk As String, takı As String)
unlu = "aıoueiöüîû"
belirtme = "ııuuiiüüiu"
kalınince = "ııııiiiiiı"
hal = "aaaaeeeeea"
daralma = "ııuuiiüüiu"
genis = "aıaaeieeea"
ysert = "çkpt"
yumusak = "cğbd"
tur = belirtme
If takı = "r" Then tur = genis
tur2 = kalınince
If takı = "nce" Or takı = "ince" Or takı = "dikçe" Then tur2 = belirtme
If InStr(1, unlu, Right(sozcuk, 1)) = 0 And takı = "si" Then takı = "i"
'--------------------------Daralma-----------
tih = Left(takı, 1) 'ekin ilk harfi
If takı = "yor" Then
If Right(sozcuk, 1) = "e" Or Right(sozcuk, 1) = "a" Then
    If Len(sozcuk) > 3 Then
        dharf = Left(sozcuk, 1)
        dsay = InStr(1, unlu, dharf)
        If dsay = 0 Then dsay = InStr(1, unlu, Mid(sozcuk, 2, 1))
        dsozcuk = Left(sozcuk, Len(sozcuk) - 1) & Mid(daralma, dsay, 1)
        sozcuk = dsozcuk
    Else
        sozcuk = Replace(sozcuk, "e", "i")
    End If
End If
ElseIf tih = "i" Or tih = "e" Then  'tih = "m" Or tih = "n" Or
If sozcuk = "de" Or sozcuk = "ye" Then sozcuk = Replace(sozcuk, "e", "i")
End If
'---------------------------------------------
'-----------------------Yumuşama---------------
tih = Left(takı, 1) 'ekin ilk harfi
If tih = "i" Or tih = "m" Or tih = "n" Or tih = "e" Then
ysay = InStr(1, ysert, Right(sozcuk, 1))
If ysay > 0 Then
ysozcuk = Left(sozcuk, Len(sozcuk) - 1) & Mid(yumusak, ysay, 1)
'sozcuk = ysozcuk
End If
End If
'------------------------------------------
tharf = "i"
tharf2 = "i" 'iki heceli eklerde
sert = "çfhkpsşt"
tsay = InStr(1, sert, Right(sozcuk, 1)) 'sözcük sert ünsüzle bitiyorsa
If tsay > 0 Then
    If Len(takı) < 4 And Left(takı, 1) = "c" Then
        takı = Replace(takı, "c", "ç")
        ElseIf Left(takı, 1) = "d" Then
        takı = Replace(takı, "d", "t")
        ElseIf Left(takı, 1) = "g" Then
        takı = Replace(takı, "g", "k")
    End If
End If

isay = InStr(1, takı, "e")
If isay > 0 Then tur = hal: tharf = "e"

say = InStr(1, unlu, Right(sozcuk, 1))

If say > 0 Then 'ünlü ile bitiyorsa
tih = Left(takı, 1)
tsay = InStr(1, unlu, tih)
    If tsay > 0 Then 'ek ünlüyle başlıyorsa
        takı = "y" & takı
    End If
Else 'ünsüzle bitiyorsa
tih = Left(takı, 1) 'ekin ilk harfi
tih2 = Right(Left(takı, 2), 1) 'ekin ikinci harfi
tsay = InStr(1, unlu, tih)
tsay2 = InStr(1, unlu, tih2)
        If tsay + tsay2 = 0 Or takı = "m" Or tih = "n" Or takı = "miz" Or tih = "y" Then 'ek tek ünsüzse yada iki ünsüzle başlıyorsa
            takı = "i" & takı
        End If
harf = Left(Right(sozcuk, 2), 1)
say = InStr(1, unlu, harf)
End If

takı = Replace(Replace(takı, tharf, Mid(tur, say, 1)), tharf2, Mid(tur2, say, 1))
sonuc = sozcuk & takı
Ekler = sonuc
End Function
 

Ekli dosyalar

Son düzenleme:

seckinb

Altın Üye
Katılım
9 Aralık 2018
Mesajlar
363
Excel Vers. ve Dili
Excel 2019 - 32 bit TR
Çok beğendim. Ellerinize sağlık.
 

klop01

Altın Üye
Katılım
19 Aralık 2016
Mesajlar
624
Excel Vers. ve Dili
2021 Türkçe 64 Bit
leumruk,
Teşekkürler, güzel bir dosya olmuş.

GÖRDÜĞÜM SORUNLAR
1. Uzun a (â) il biten sözcükler sorunlu. Örneğin "Bâlâ" hatalı yazılıyor. Galiba uzun a (â) tanıtılmamış.
2. sozcuk = ysozcuk satırı kullanuma açılınca "atmak" fiilini adınca yazıyor.
 
Üst