21 Mart 2016 Pazartesi

İngilizce Altyazıdan Kelimelerin Türkçe Anlamlı Listesini Çıkaran Program ve Kodları

Boş zamanlarında dizi/film izlerken bir yandan da İngilizce öğrenmeyi kim istemez ki. Yazdığım bu program sayesinde işi bir adım ileri taşımış ve dizi/film izlerken İngilizce kelime haznemizi geliştirmenin daha kolay bir yolunu bulmuş oldum. Program, altyazıda geçen kelimeleri, bildiğiniz kelimelerin olduğu liste ile karşılaştırıp; bilmediklerinizin anlamlarını sözlükten alıp, bunları dizideki tekrar miktarlarıyla birlikte bir dosyaya yazıyor. Size de dizi/film izlemeden önce bunlara kısaca bir göz atmak; bu kelimelerin belli bir miktarına çalışmak kalıyor. 

Programa ve kodlarına buradan ulaşabilirsiniz: Altyazıdan Kelime Anlamlarına v1.0
Github: Altyazıdan Kelime Anlamlarına v1.0



(Programı geliştirip, bir web sitesi oluşturarak yayınlamayı düşünüyordum ki yapmak istediğim birçok şeyi bünyesinde barındıran bir site oluşturulmuş zaten. Kullanmanızı tavsiye ederim: https://www.wordtaboo.com/ )






Üniversite eğitimimin ilk senesinde boş zamanlarımda yabancı film ve dizi izliyor; bir yandan da İngilizce konusunda kendimi geliştirmek için İngilizce altyazıyla izlemeyi tercih ediyordum. Yeri geldiğinde anahtar kelimeler için ya da sıkça tekrar eden kelimeler için filmi / diziyi durdurup kelimelerin anlamlarına bakıyordum. Bu da dizinin eğlencesini azaltıyordu doğal olarak. Ben de internette altyazı metnindeki kelimelerin tekrar sayısına göre sıralı listesini çıkaran bir program var mı diye araştırmıştım. Böyle bir program sayesinde altyazıda en çok tekrar eden ve önemli kelimelere diziyi izlemeden önce hızlıca çalışır ve bu sayede dizide karşılaştığımda sözlüğe bakmam gerekmezdi. Bununla birlikte daha önce çalıştığım kelimeyi dizi izlerken aktif olarak tekrar etmiş olur ve kelimenin daha iyi bir şekilde ezberlenmesini sağlarım diye düşünüyordum. Ama doğru düzgün bir şey bulamamıştım.


3 dönem önce okulda C dersini alıp programlamaya giriş yaptım. Bu dönem de C++ ile veri yapıları ve C# ile nesne tabanlı programlama derslerini alıyorum. Programlama alanında kendimi geliştirmek istiyorum ve bunun da ufak tefek projeler yapmakla, yeni programlar yazmakla daha kolay olacağının farkındayım. Hem dizi film izlerken İngilizce öğrenmeme yardımcı olması, hem programlama konusunda kendimi geliştirmeme yardımcı olması hem de bu ihtiyaçlara sahip diğer kişilerin de faydalanması için bir süredir, yukarıda bahsettiğim bu programı kendim yazmayı düşünüyordum ve sonunda yaptım.


Program için herhangi bir isim bulamadım. Çalışması ise şöyle: Program sizden altyazı.srt dosyasını alır, içerisinden kelimeleri çeker ve tekrar sayısıyla birlikte sıralı bir liste haline getirir. Bir de sizden "bildiklerim.txt" isminde anlamını bildiğiniz kelimelerin içinde bulunduğu bir nevi sizin İngilizce kelime haznenizi yansıtan bir dosyayı alıyor aynı işlemleri buna da uyguluyor. Daha sonra bu iki dosyadaki kelimeleri karşılaştırıyor. İki listedeki kelimeleri fark, kesişim ve birleşim kümesi olarak farklı belgelere yazıyor. Sonrasında altyazıda bulunan ama anlamını bilmediğiniz kelimeleri teker teker herhangi bir çekim eki aldıysa yalın hale çeviriyor (bunu hem veritabanı kullanarak hem de grammer kurallarını kullanarak yapıyor) ve bu kelimelerin anlamlarını sözlük veritabanından kontrol edip yeni bir liste oluşturuyor. Son haldeki listemiz dizide geçen anlamını bilmediğimiz kelimelerini, bu kelimelerin yalın hallerini, dizide tekrar etme miktarını ve sözlükteki anlamlarını içeriyor. Bu programı diziye başlamadan önce çalıştırıp, anlamını bilmediğiniz kelimelerin bir kısmına çalıştıktan sonra çalıştırarak İngilizcemizi, en azından İngilizce kelime bilgimizi rahatça geliştirebiliriz. Bu programın hedefi dizi film ve altyazı ile kısıtlı değil farklı amaçlar için de kullanılabilir. Mesela iki farklı İngilizce metni karşılaştırmak, kelimelerin tekrarlı listesini çıkarıp anlamlarına ulaşmak için de rahatça kullanılabilir.



Bu programı geliştirirken DevC++ kullandım ve programı C++ dilinde yazdım. Tabii ki aynı işleve sahip ve daha verimli program yazmak mümkün. Ancak bu konularda pek tecrübeli değilim; zamanla daha iyi programlar yazacağımı düşünüyorum. C# ile de bu program yazılabilir ve aynı zamanda rahatlıkla bir kullanıcı arayüzü eklenebilirdi. Ancak ileride gömülü sistem programlama alanında çalışacağım inşallah; bu nedenle C ve C++’da tecrübe kazanmam daha önemli gözüküyordu. Tabi bir de veri yapıları dersi C++ üzerinden anlatılınca bu kararımdan şaşmadım. Aynı algoritma C# üzerine de zorlanmadan taşınabilir aslında. Bunun yanında program genel olarak vektörler dinamiği üzerinde kuruludur. Vektörler C++’da dinamik bir dizi gerçeklemesidir ve farklı veri tipi ve nesneleri tutan bir dizi oluşturmak için rahatlıkla kullanılabilir.


Program Nasıl Kullanılır?

Program Windows 8 ve 10 olan bilgisayarlarda denendi çalışıyor. Windows 7’de çalışmazsa uyumluluk ayarlarından Windows server 2008 seçilerek çalıştırılabileceğini düşünüyorum. Programı öncelikle arşivden çıkarıp yeni bir klasör içine taşıyın. Sonrasında izleyeceğiniz dizinin “.srt” uzantılı altyazı dosyasını bu klasör içine atın ve adını “altyazı.srt” olarak değiştirin (Eğer bilgisayar ayarlarında dosya adının uzantısı gözükmemek üzere ayarlanmış ise altyazı dosyasının adını sadece "altyazı" olarak değiştirmeniz yeterli olacaktır). Eğer altyazıdaki bütün kelimelerin anlamını öğrenmek istiyorsanız “bildiklerim.txt” belgesini açıp içindeki her şeyi silin (dosya başlangıçta boş olacaktır zaten). (Düzeltme: bildiklerim dosyasını boş bırakınca program çalışmıyor. Sorunu çözüp güncelleme yapacağım. Şimdilik içine en azından 3-5 kelime yazıp o şekilde deneyiniz.) Sadece bilmediklerinizin anlamları olsun istiyorsanız bildiğiniz kelimeleri “bildiklerim.txt” belgesine not defteri ile açıp ekleyin. İlk sefer için tek tek elle yazmak istemiyorsanız internetten İngilizcede en çok kullanılan 500, 1000, 3000 kelime diye aratıp buradaki listelerdeki kelimeleri de ekleyebilirsiniz. Sonrasında “altyazıdan kelimelere.exe” programını çalıştırınız. Program listeleri hazırladıktan sonra bilmediğiniz kelimelerin anlamlı listesine alfabetik sıralı olarak “afb_anlamlar_alf.txt” tekrara dayalı sıralı olarak “afb_anlamlar_tek.txt” dosyalarından ulaşabilirsiniz. Bu kelimelere çalıştıktan sonra öğrendiğinizi düşündüğünüz kelimeleri “bildiklerim.txt” dosyasına ekleyerek programın sonraki çalışmalarında sadece bilmediğiniz kelimeleri göstermesini sağlayabilirsiniz. Bunu tek tek manuel olarak yapmak istemezseniz, sadece anlamını bilmediğiniz açıklamasız kelimelerin listesini içeren “afb.txt” dosyası içerisindeki kelimeleri kopyalayıp “bildiklerim.txt” içerisine ekleyebilirsiniz. Rakam ve harf harici diğer işaretleri eklemeniz programın çalışmasını engellemez ama programı yavaşlatır. Program sadece İngilizce kelimeler için hazırlanmıştır, diğer dillerdeki altyazılar için çalışmayacaktır. Bildiklerim, çekimli kelimeler, sözlük belgelerini yanlışlıkla silmemeye çalışın lütfen. (Örnek olması açısından Ip Man 3 filmine ait altyazı.srt dosyasını rar içine ekledim, aynı şekilde bildiklerim.txt dosyası içine de İngilizce'de en çok kullanılan 500 kelimeyi ekledim. )



Program herhangi bir deneme sürecinden geçmedi; ben de yeni yeni kullanmaya başlıyorum. Zaman geçtikçe üzerinde eklemeler, güncellemeler yapıp burada paylaşmayı düşünüyorum. Bu konuda programı kullandıktan sonra önerilerinizi ve sorularınızı iletirseniz sevinirim. Aynı şekilde paylaşacağım kodları inceleyip alternatif önerecek olursanız ya da farklı bir özelliğin programa dahil edilmesini düşünürseniz lütfen alttaki yorumlar kısmına yazınız yada bana facebook ve email üzerinden ulaşınız. 
(abdullah.varici@gmail.com – https://www.facebook.com/abdullah.varici)
------------------------------------------------------
Programa ve kodlarına buradan ulaşabilirsiniz: Altyazıdan Kelime Anlamlarına v1.0
Github: Altyazıdan Kelime Anlamlarına v1.0
------------------------------------------------------
Ekleme 1: Programı çalıştırdıktan sonra oluşan dosyalar ve içerikleri hakkında yukarıda kısmen değinmiş olsam da bunları tek tek açıklamam daha iyi olacak gibi. Bu dosyaların birçoğu kullanıcılar tarafından pek ihtiyaç duyulmayan dosyalar. Bu nedenle program sonraki versiyonlarda ya bu dosyaları hiç oluşturmayacak şekilde ya da kullanıcının tercihine göre oluşturacak şekilde düzenlenecektir.
a_alf.txt : Altyazı dosyasındaki kelimelerin alfabetik sıraya göre sıralandığı ve tekrar miktarıyla yazıldığı dosyadır.
b_alf.txt : Bildiklerim dosyasındaki kelimelerin alfabetik sıraya göre sıralandığı ve tekrar miktarıyla yazıldığı dosyadır.
a_tek.txt : Altyazı dosyasındaki kelimelerin tekrar etme miktarına göre sıralandığı ve tekrar miktarıyla yazıldığı dosyadır.
b_tek.txt : Bildiklerim dosyasındaki kelimelerin tekrar etme miktarına göre sıralandığı ve tekrar miktarıyla yazıldığı dosyadır.
afb.txt : Altyazı dosyasında bulunan ama bildiklerim dosyasında bulunmayan (a fark b) kelimelerin alfabetik sıraya göre sıralandığı ve altyazıdaki tekrar miktarlarıyla yazıldığı dosyadır.
bfa.txt : Bildiklerim dosyasında bulunan ama altyazı dosyasında bulunmayan (b fark a) kelimelerin alfabetik sıraya göre sıralandığı ve bildiklerim dosyasındaki tekrar miktarlarıyla yazıldığı dosyadır.
anb.txt : Hem altyazı hem de bildiklerim dosyasındaki ortak olarak bulunan (a kesişim b) kelimelerin alfabetik sıraya göre sıralandığı ve toplam tekrar miktarlarıyla yazıldığı dosyadır.
aub.txt : Altyazıda ve bildiklerimde geçen kelimelerin (a birleşim b) alfabetik sıraya göre sıralandığı ve toplam tekrar miktarlarıyla yazıldığı dosyadır.
afb_anlamlar_alf.txt : Altyazı dosyasında bulunan ama bildiklerim dosyasında bulunmayan (a fark b) kelimelerin alfabetik sıraya göre sıralandığı, altyazıdaki tekrar miktarları ve sözlükteki anlamlarıyla yazıldığı dosyadır.
afb_anlamlar_tek.txt : Altyazı dosyasında bulunan ama bildiklerim dosyasında bulunmayan (a fark b) kelimelerin tekrar miktarına göre sıralandığı, altyazıdaki tekrar miktarları ve sözlükteki anlamlarıyla yazıldığı dosyadır.
Bu dosyalar içinden en önemlileri afb_anlamlar_tek.txt ve afb.txt dosyalarıdır. Programı çalıştırdıktan sonra afb_anlamlar_tek.txt'deki anlamlı listeden kelimelere çalışılıp; afb.txt'deki kelimeleri bildiklerim.txt'ye ekleyerek sürekli bildiklerim dosyasının güncelliğini sağlamış oluruz.

18 yorum:

  1. Selam Abdullah,

    Cok guzel ve kullanisli bir program. Tebrik ederim. Bircok insan kullanirsa pratik olarak ingilizcelerini gelistirebilir. Cok iyi fikir.

    Koda soyle bir baktim bir cok tekrar kelimelerle ugrasiyorsun acaba hashmap ya da c++ da map diye geciyor sanirim bu data structure'i kullanmak daha faydali olur mu acaba? sozlukte bulunan kelimeleri key yapip tekrar karsilastiginda count'i artirmak kolay bir yontem olabilir mi?

    Ayrica github acsana. Ordan butun projelerini paylasirsin. Bircok programci oyle yapiyor seni de bekleriz. (github.com/tameravci)

    selamlar

    YanıtlaSil
    Yanıtlar
    1. Merhaba Tamer,

      Yorum ve fikirler için teşekkürler. Map yapısına kısaca bir göz atmıştım ama vector'lerde içerisindeki elemana direkt ulaşma imkanı cezbetti diyebilirim. Ama detaylı bakmamıştım. Biraz daha araştırılıp; avantaj ve dezavantajlarına bakılıp gerekirse programın sonraki versiyonları o yapı üzerine kurulabilir aslında.

      Github fena fikir değil :)

      Sil
  2. Tebrikler Abdullah, çok iyi fikir. Benim de ihtiyacım olan bir şeydi aslında. Deneyeceğim. Github için çok düşünme hemen edinmen gereken bir yetenek. Windows kullanıyorsan sourcetree gibi bir git arayüzü kullanmanı tavsiye ederim. Git kullanmak daha derli toplu çalışman için imkan yaratacaktır bunun yanında yazdığın kodların diğer insanlar tarafından ulaşılması için en uygun kaynaktır.

    YanıtlaSil
    Yanıtlar
    1. Teşekkürler Yasin,

      Github hesabını bugün açtım. Programcılar için bir gereklilik gibi gözüküyor anladığım kadarıyla. Sourcetree arayüzünü de araştıracağım.

      Sil
  3. Tek tek dosyaların anlamlarını söyleyebilir misin?
    a_alf:
    a_tek:
    afb:
    afb_anlamlar_alf:
    afb_anlamlar_tek:
    anb:
    aub:
    b_alf:
    b_tek:
    bfa:

    YanıtlaSil
    Yanıtlar
    1. Yukarıda yazının sonuna ekleme yapıp açıklamaya çalıştım.

      Sil
  4. Elinize sağlık ama daha kısa bir açıklama ekleseniz daha iyi olur. Son kullanıcı olarak programı neyle yazdığınızı bilmektense nasıl kullanacağımı okumayı yeğlerim.

    YanıtlaSil
    Yanıtlar
    1. Teşekkürler, haklısınız kısmen. Fırsat bulduğumda yada sonraki versiyonlarda program kullanıcılarına yönelik açıklama kısa ve net olacaktır. Ama bu sayfa sadece bu programı kullanacak olanlara değil buna benzer fikirleri olup bunları pratiğe dökmek isteyenlere de hitap ettiği için sadece programın kullanımı değil aynı zamanda geliştirilmesi hakkında bilgi içermekte.

      Sil
  5. çok uzun şu en başa sadece kullanacaklar için iki satırlık yer koyar mısın kardeşim. Kıbrısdan selamlar

    YanıtlaSil
    Yanıtlar
    1. "Program Nasıl Kullanılır?" başlığından sonra anlattım. Maalesef bunu kısaltıp başa eklemeyi şuan için düşünmüyorum. Programın yeni versiyonu üzerinde çalışıyorum. Çok daha kullanışlı bir arayüze sahip olacak. Sayfadaki sağ üst taraftaki e-posta aboneliği ile yeni versiyonu paylaştığımda bilgi sahibi olabilirsin.

      Sil
  6. Merhaba,

    Yeni versiyon için dikkat edilebilecek bir kaç nokta, isterseniz dikkate alabilirsiniz.

    -Dosyalarla ilgili işlemlerde C++'ın fonksiyonları kullanılabilir.
    -Standart kütüphanenin fonksiyonları daha çok kullanılabilir.(sort, karakter test fonksiyonları vs.)
    -Bir sınıf oluşturup sınıfla ilgili fonksiyonları üye fonksiyon yapmak.
    -Vectorleri fonksiyonlara değer ile geçmek boş yere allocation'a ve kopyalamaya sebep olur. Bu durumda referans semantiği, gereken yerlerde de const anahtar sözcüğü kullanılabilir. Aslında kodun çoğu yerinde const anahtar sözcüğü eksik. Adresini geçmek yerine yine referans kullanılabilir.
    -Hata mesajlarını cout'a değil de cerr'e yazdırmak düşünülebilir.
    -char diziler yerine string sınıfına daha çok kullanmak.
    -cout << endl; yerine cout << "\n" kullanılabilir. Her cout << endl'de buffer flush ediliyor.
    -C++ çok büyük ve güçlü bir dil dilin kurallarına ve araçlarına bir göz atmakta fayda var.

    YanıtlaSil
    Yanıtlar
    1. Tavsiyeler için çok teşekkür ediyorum. C++'da yazacağım bu ve sonraki projelerde söylediklerinizi göz önünde bulunduracağım. Gerçi programın yeni versiyonunu C# ile yazıyorum daha iyi bir arayüze sahip olması açısından ama genel olarak C++ diline hakim olmak istiyorum.

      Sil
  7. kardeşim eline sağlık hiç bir işime yaramadı

    YanıtlaSil
  8. Abdullah kardeş, Windows 7 Professional Service Pack 1 kullanıyorum ancak uyumluluk modunu Windows server 2008, windows vista, vista Service Pack 1 ve vista Service Pack 2 modlarına çevirmeme rağmen programını kullanamadım yardımcı olur musun? kasatura84@gmail.com

    YanıtlaSil
    Yanıtlar
    1. Eğer bilgisayarınız 32-bit sisteme sahipse program çalışmıyor olabilir. Daha sonradan yazıya eklediğim web sitesini kullanabilir yada kodları kendi bilgisayarınızda derleyip çalıştırabilirsiniz.

      Sil
  9. Merhaba, www.wordiam.com'u kullanarak dizi alt yazilarindan Ingilizce ogrenebilirsiniz. Ek olarak gelistirdigimiz ozellikler, otomatik altyazi destegi, gelismis Ingilizce sozluk, cumle ceviri destegi. Yazinizda bizden de bahsedebilirseniz sevinirim.

    YanıtlaSil