Offline Türkçe-Rusça, Rusça-Türkçe Sözlük

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. :slight_smile:

2 Beğeni

Merhaba.

Python 2’de unicode desteği öntanımlı değildir. Bunun için kod dosyanızın başına şöyle bir satır eklemeniz gerekir:

# -*- coding: utf-8 -*-

Dosya işlemlerinde de bahsettiğiniz gibi bazı işlemler yapmak gerek.

Ancak Python 3’te unicode desteği öntanımlı olarak geliyor. Yani uygulamanızı Python 3 ile geliştirirseniz Rusça karakterler açısından daha az sorun yaşarsınız.

İyi çalışmalar.

Aslında Python 3 ile yazıyorum. Ama Windows ile alakalı olduğunu düşünüyorum. Çünkü direkt olarak komut satırına Python yazıp etkileşimli kabukta çalıştığımda herhangi bir sorun olmuyor Rusça harflerde. Ama bir not defterine veya başka bir dosyaya Rusça bir şey eklemek istediğimde ? ? ? olarak çıkıyor harfler. Sorun değil o kısmı zaten çözdüm. Dediğim gibi Windows’un sorunu olabilir.

Bir konuda yardımınızı isteyeceğim. Mesela “Я живу в России” yani “Ben Rusya’da yaşıyorum” cümlesini tanımladım (Ülke ismi tabi girilene göre değişiyor) bunu tanımlamamış olsam ama “Я, Живуй” kelimeleri ayrı ayrı tanımlanmış olsa, Я живуй yazdığımda “Ben yaşıyorum” olarak iki sonucu da yan yana yazdırabilir miyim? Yani “Ben” için ayrı bir arama yapacak bulup Я yazacak, “yaşıyorum” için ayrı arama yapacak bulup “живуй” yazacak. Bunu nasıl yapabilirim?

Düzenleme: Belirtmeyi unutmuşum. Türkçe karakter sorunu sadece dosya işlemleri uygulayarak metin belgesine veri girerken oluşuyor. Onun dışında hiç bir sorun yok. İlk mesajımda belirttiğim mac_cyrillic dosyası ile cp1254 doyasını yapmadan önce tam tersiydi. Türkçe karakterde sorun yoktu fakat Kiril Alfabesini dosyaya soru işareti olarak çıkartıyordu. Kısaca pek sorun değil.

str#split metodu ile karakter dizilerini boşluklarından ayırabilirsiniz. Böylece her sözcüğü ayrı ayrı aratabilirsiniz. Bir örnek:

>>> sözcükler = 'Ben yaşıyorum'.split(' ')
>>> sözcükler[0]
'Ben'
>>> sözcükler[1]
'yaşıyorum'
>>>

İyi çalışmalar.

1 Beğeni