Merhaba. Son zamanlarda Rusça öğrenmeye çalışıyorum. Kendime iki defter aldım. Birine karşılaştığım Rusça kelimeleri, diğerine cümleleri yazıyorum. Fakat gün geçtikçe işler iyice karışmaya başladı. Bulmak istediğim bir cümleyi onlarca sayfası dolu olan bir defterde aramak gerçekten zor. Ben de “bunu neden Python ile çözmeyeyim ki?” dedim ve ortaya böyle bir şey çıktı.
İlk olarak karşılaştığım sorun komut satırında Python’un Kiril Alfabesindeki harfleri soru işareti olarak çıkartmasıydı. Aynı şekilde Python’da dosya işlemleri ile bir dosyaya Kiril Alfabesi ile bir şey yazınca soru işareti çıkıyordu sadece. Ufak bir çalışma sonucu Python dizinde her ülkeye göre farklı kodlama türü olduğunu anladım. Ben de “cp1254” adlı dosyanın içeriğini “mac-cyrillic” adlı dosyayla değiştirerek çözdüm. Şimdi de Türkçe karakter sorunu olmaya başladı fakat benim için problem değil. Her neyse.
Program şu şekilde çalışıyor. İlk olarak ekleme.py
dosyasını açınca bize bir kelime girmemizi söylüyor -cümle de girebiliyoruz tabi- eğer girilen kelimenin sonu “-ать, -ять, -ить veya -еть” ile bitiyorsa bu bir fiil demektir. Yani fiil çekimlerini de girmemiz gerekiyor kolaylık olması açısından. Eğer onlar yoksa girilen kelimenin kaç adet çevirisi/anlamı olduğunu soruyor. Kodları uzatmamak için maksimum 3 yaptım ben. Bunu da girdikten sonra eğer 2 girilmişse birinci ve ikinci anlamını soruyor. Başka bir sayı girilmişse ona göre işleniyor. Girdiğimiz bu kelime “Havuz” adındaki klasöre ekleniyor. Adı da “kelime.tran” şeklinde oluyor. Bu .tran dosyalarının içinde ise kelimenin anlamı ve belli açıklamalar var. Eğer bir kelimenin karşılığını bulmak istersek programa kelimeyi yazıyoruz, eğer “Havuz” klasöründe bu kelime varsa onun dosyasını açıyor ve içindeki bilgiler ekrana yazılıyor. İşleyiş tam olarak bu.
ekleme.py
dosyası için kodlar:
#!/usr/bin/python3.6
#-*- coding: mac-cyrillic -*-
kelime = input("Girilecek kelime: ")
if(kelime[-3:] == "ать" or kelime[-3:] == "ять" or kelime[-3:] == "ить" or kelime[-3:] == "еть"):
print("Fiil cekimleri:")
ben = input("Я ")
sen = input("Ты ")
o = input("Он ")
biz = input("Мы ")
siz = input("Вы ")
onlar = input("Они ")
anlam_adet = int(input("Anlam sayisi: "))
if(anlam_adet == 1):
anlam_1 = input("Kelimenin anlami: ")
elif(anlam_adet == 2):
anlam_1 = input("1. anlami: ")
anlam_2 = input("2. anlami: ")
elif(anlam_adet == 3):
anlam_1 = input("1. anlami: ")
anlam_2 = input("2. anlami: ")
anlam_3 = input("3. anlami: ")
ornek = input("Kelimenin cumle icinde ornegi(opsiyonel): ")
dosya = open("Havuz\\"+kelime+".tran", "w+")
if(anlam_adet == 1):
if(kelime[-3:] == "ать" or kelime[-3:] == "ять" or kelime[-3:] == "ить" or kelime[-3:] == "еть"):
dosya.write("""
1 - {0}
Fiil cekimleri:
Я {1}
Ты {2}
Он {3}
Мы {4}
Вы {5}
Оны {6}
Orn: {7}
""".format(anlam_1, ben, sen, o, biz, siz, onlar, ornek))
dosya.close()
else:
dosya.write("""
1 - {0}
Orn: {1}
""".format(anlam_1, ornek))
dosya.close()
elif(anlam_adet == 2):
if(kelime[-3:] == "ать" or kelime[-3:] == "ять" or kelime[-3:] == "ить" or kelime[-3:] == "еть"):
dosya.write("""
1 - {0}, {8}
Fiil cekimleri:
Я {1}
Ты {2}
Он {3}
Мы {4}
Вы {5}
Оны {6}
Orn: {7}
""".format(anlam_1, ben, sen, o, biz, siz, onlar, ornek, anlam_2))
dosya.close()
else:
dosya.write("""
1 - {0}, {1}
Orn: {2}
""".format(anlam_1, anlam_2, ornek))
dosya.close()
elif(anlam_adet == 3):
if(kelime[-3:] == "ать" or kelime[-3:] == "ять" or kelime[-3:] == "ить" or kelime[-3:] == "еть"):
dosya.write("""
1 - {0}, {8}, {9}
Fiil cekimleri:
Я {1}
Ты {2}
Он {3}
Мы {4}
Вы {5}
Оны {6}
Orn: {7}
""".format(anlam_1, ben, sen, o, biz, siz, onlar, ornek, anlam_2, anlam_3))
dosya.close()
else:
dosya.write("""
1 - {0}, {1}, {2}
Orn: {3}
""".format(anlam_1, anlam_2, anlam_3, ornek))
dosya.close()
sozluk.py
dosyası için kodlar:
import os
def bir_iki():
global kelime
dosyalar = [i.lower().replace(".tran", "") for i in os.listdir("Havuz\\") if i.endswith(".tran")]
ayikla = set()
d = 1
while d == 1:
for i in kelime.split():
for j in dosyalar:
if i.lower() in j.split():
ayikla.add(i.lower())
if len(ayikla) >= 1:
for i in dosyalar:
if ayikla.issubset(set(i.split())):
if((len(i) == len(kelime))):
dosya = open("Havuz\\" + i + ".tran", "r")
cevir = dosya.readlines()
dosya.close()
for i in cevir:
print(i.replace("\n", ""))
else:
d = 0
kelime = input("> ")
if(kelime == "!"):
quit()
elif(kelime):
bir_iki()
Başka bir konuda @dildeolupbiten bana yardımcı olmuştu dosya bulma kodlarında. O kodlardan da yararlandım. Yani sozluk.py
'deki def fonksiyonu onun eseridir.
Konuyu açmamdaki amaç hep beraber bunu geliştirmemizi istemem. Mesela en basiti beş harfli bir kelime girildiğinde eğer bir veya iki harf yanlış yazılmışsa yine de “bunu mu demek istediniz” şeklinde sonuç çıkartmasını sağlamak gibi katkılarda bulunabilirsiniz. Hem siz yararlanmış olursunuz hem ben.