Tekrardan selamlar. Bu yazımda geliştirmekte olduğum ufak bir kişisel çalışmamdan bahsedeceğim. Biliyorsanız, Apple şirketinin telefon markalarından olan “iphone” telefonlarında SIRI adında bir uygulama mevcut ve bunu yapan ve geliştiren firma hiç kuşkusuz ki alanında dünyada en önemli firmalardan birisi. Peki bu uygulama ne yapıyor diyen ve bilmeyenler olabilir kısaca ondan bahsedeyim. Bu uygulama sizin telefonunuzda size asistanlık yapıyor. Sesli olarak uygulamaya bir şeyler söylüyorsunuz. Kendi algoritmasından geçirip belirli sonuçlara yönlendiriyor.
Örnek verecek olursam eğer, “Hey Siri” diyerek uygulmayı çağırıyorsunuz. Ardından yapmak istediğiniz şeyi sesli olarak söylüyorsunuz. “Call at home” o da sizin için evi arama işlemini gerçekleştiriyor ve ya sohbet edebiliyorsunuz. Bu sohbetler genelde goygoy bir havada geçiyor. Önceden tanımlı sözcük ve kelime havuzu var buradan kullanıcıya durum dahilindeki gerekli cevapları dönüyor. Uygulama da bu cevapları kullanıcıya iletiyor.
Şimdi gelelim kendi konumuza. Benzer bir başka uygulama da Google’ın sesli arama özelliği onda da benzer bir özellik var fakat Google’ın kullanım amacı daha çok telefonun kullanımını ve arama özelliklerini desteklemek gibi görünüyor.
Peki bu yazıda asıl bahsedeceğim şey ne ? Şimdi buna değinmek istiyorum. Php ile uzmanlaşma çalışmaya çalışıyorum. Bir yandan da kendimi sürekli geliştirebileceğim bir firma’da pozisyon arıyorum. Bu aramalarında çoğu işletme bana ilk sorduğu şeylerden birisi de bilgi seviyemi ve kabiliyetimi görmek için örnek bir site ve ya uygulama. Soruyorlar haklılar da bir sanatçının kalitesini eserlerinden, bir futbolcunun değerini oyunu oynayış şekliden, bir programcının da kabiliyetlerini ancak ve ancak yaptıklarını görerek anlayabilirsin ve ya bir sorunu nasıl çözdüğünden anlayabilirsin. Bende bu konuda hem bilgi ve kabiliyetimi uygulamak hem de Web Programlama dillerinden olan Php’yi daha iyi deneyimlemek ve kendimi geliştirmek için benzer bir uygulama geliştirmeye karar verdim. Bu karardan sonra yaptığım ilk iş bu tür uygulamaların benzerlerinin nasıl çalıştığını sorgulamak oldu.
İlk paragraflarda bahsettiğim gibi konu hakkında çok ayrıntılı olmayacak şekilde bir araştırma yaptım. Daha çok uygulamanın kullanılışını inceledim. İzlenimlerime göre aklımdan bir yol haritası çıkarttım. Burası böyle yapılmış. Burada bu kullanılmış gibi gibi. Sonrasında ise ufaktan yazmaya başladım. Yazmaya ilk başladığımdan MCV ve OOP mevzularında fazla iyi değildim. Hala da konuya tam olarak hakim değilim. Üzerine koymak için bu tür bir uygulamayı yazmaya başladım. Yazmaya başladıktan sonra aşama aşama program bir şeye benzemeye başladı. Sistem teknik olarak şu şekilde çalışıyor. Sen soruyu metin olarak uygulamaya soruyorsun, uygulama sistemindeki sorguları kontrol ediyor. Buna göre bir cevap veriyor ve ekrana basıyor.
Asıl uygulamanın çekirdek diye tabir ettiğim kısmı burası. Burada sistem daha önceden veri tabanında tanımlı olan sorular ve girdiler içinde arama yapıyor. Arama sistemi oldukça gelişmiş olmalı ki istenilen şekilde bir zeka belirtisi göstersin. IQ değeri yükselsin. Veriler hızlı bir şekilde sonuçlara erişmesi için uygulama üzerinde belli başlı kategorilendirme ve tablolama uyguladım. Çekirdek adını verdiğim bir sınıf ile bu uygulama girilen mesajın ne tür bir kategoride olduğunu anlıyor ona göre veri tabanındaki bir tabloya yönlendiriyor oradan o cevabı iletmesini sağlıyor.
Evet şimdi program çalıştı ve ekrana bir mesaj geliyor diyor ki ” Öncelikle bir kaç soru sorabilir miyim ? Evet ve ya hayır diye cevaplarsın. Çok sürmez. “. Buradan başlayıp tanışma diye tabir ettiğim ilk konuşma kısmı mevcut. Burada kullanıcı hakkında bilgileri alıp hafızasında tutuyor. Tuttuğu bilgileri sayfa kapatılana kadar sizinle iletişim içinde kullanıyor. Bu tanışma soruları ilk başlangıçta size sorduğu soruya evet derseniz kendisi sizi zaten yönlendiriyor ve aşama aşama ilerliyorsunuz fakat hayır derseniz’de tanışma faslını sonlandırıyor. Uygulama bu şekilde devam ediyor.
Uygulama içinde tanımladığım bir diğer özellik ise soruları hatırlaması, program ile konuşurken ona sorduğunuz her soruyu ve soruya verdiği her cevabı hatırlıyor. Hatırlıyor ve tekrar terkrar aynı soruların sorulmasını engelliyor. Programın yazarken ilk amacım. Aktif bir Öz Geçmiş(CV) uygulaması kısaca bilgiler ve cevapları şeklinde gelişecekti. Tekrarlayan sorularla sistemin yorulmasını istemediğim için böyle bir şey yaptım. İlerde de bu hatırlama ile olası bir sayfa yenileme durumunda kaldığın yerden sohbete devam etmen için ek hatırlatma sağlaması için geliştirdim.
Evet bir diğer özelliği ise kaldığımız yer; Sohbet esnasında sekmeyi kapatabiliriz ya da sayfayı yenileyebiliriz. Böyle bir durum olduğunda uygulama içinde daha önceden tanımladığım “oturum” verileri ile birlikte sistem sizi hatırlıyordu. Ona yaptığım bazı eklentilerle beraber artık son sorduğunuz soruyu buna programın verdiği cevabı ve sonrasında ki ilk karşılama ekranı için yeni bir cevabı ekranınıza yansıtıyor. Böylelikle son konuşmayı ve kaldığınız yeri size hatırlatıyor.
Bir diğer özellik ise başlıktaki gibi programcına söyle ve ya sor özelliği. Sorulan soru içinde programcına söyle, programcına sor, programcına de, alpere sor, alpere söyle gibi bir tabir geçmesi durumunda Çekirdek yazılımım bunu tespit ediyor. Tespit ettikten sonra bu soruyu veri tabanına işliyor. Bu işlemler bittikten olumlu sonuçlanırsa eğer ekrana önceden belirlediğim veri tabanında yazan cevabı gönderiyor. Sistem bu şekilde çalışıyor böylelikle benimle iletişime geçebileceğiniz bir kanal daha size açılmış oluyor.
Sistemde önceden tanımlı bir çok cevap sistemi mevcut. Bu sistemlerden bir tanesinde çoklu cevap. İlk geliştirdiğinde bu sistemi veri tabanında ayrı bir tablodan tek kelimeli sorulara birden fazla olası cevap vermesini öğretmiştim. Örnek sen programa “küfür içeren mesaj” yazarsın o da sana benim öğrettiğim 2 3 cümleden bir tanesini gönderir. Böylelikle program san ki kendi kendine cevaplıyormuş hissiyatı yaratır. Onu daha gerçekçi kılar. Bu da istenilen bir şey.
Bir diğer özelliğim ise boş soru mevzusu olası bir boş soru sorulması durumunda programımdaki yapayzeka sınıfı bu özelliği kontrol ediyor. Gelen veride bir kaç temizlik yapıyor sonra bakıyor burada ki soruda bir karakter harf var mı yok mu ? varsa devam ediyor fakat bir girdi yoksa boş soruları kontrol eden sisteme yönlendiriyor. Bu sistemde de daha önceden tanımlanan birden fazla cevaplardan birisini belirleyip cevap olarak kullanıcıya sunuyor. Bu programın vereceği her bir cevabı aktif ve ya pasif yapılabildiğini de belirtmek isterim. Istendiği taktirde programdan boş cevaplardan bir tanesini pasife alabiliyoruz.
Şimdi program bu kadar geliştirildi ve kullanılmaya başlandı diyelim, ki zaten öyle, aktif şekilde erişebilirsiniz. Diyelim ki program var olan tüm tabloları araştırdı. Aktif olan tüm modülleri araştırdı. Fakat istenilen sonuçları bulamadı mı. Bu sefer de size cevap vermeyecek değil. Bu kezde devreye Cevapsız sorular adını verdiğim bir modül devreye giriyor. Bu modül ile çekirdek üzerinden gelen sonuçlarda cevap yoksa kendi içindeki bu sistem devreye giriyor. Bu sistem ne yapıyor derseniz şunu yapıyor. Girilen soru değerini alıp kayıt olarak veri tabanında bir tabloya işliyor. Diyelim ki zaten bu veri tabloda mevcut. O zamanda sorunun yanında bir sayaç var o sayacın değerini bir arttırıyor. Böylelikle sistem sahibi olarak ben programımın cevap veremediği o sorunun kaç kez sorulduğunu görüyorum. Bu sayede programa sorulan soruları ve buna karşın nasıl bir geliştirme sağlayacağımı kolaylıkla tespit edebiliyorum.
Peki hepsi bu kadar mı ? Cevabı olmayan bir soru karşısında program ne yapıyor. Şunu yapıyor. Veri tabanında belirlediğim bir tablo var oraya gidiyor ve oradaki satırlardan her hangi bir cevabı alıp kullanıcıya iletiyor. Böylelikle kullanıcı cevapsız bende bu soru hakkında bilgisiz kalmıyorum. Böylelikle sürekli geliştirilebilir bir sistemi kullanıcılarla beraber uygulama ile kimseyi yormadan rahatlıkla ilerliyorum.
Programın temel yapılarını geliştirdikten sonra soru ve cevap sistemi için tekrardan bir düşünme ve geliştirme sürecine geri döndüm. Şöyle bir tablolama sistemi geliştirdim.
Sorunun bulunduğu kategoriyi temsil eder. (kisisel,spor,magazin,iş,yazılım, gelecek, türkiye, uzay,yaşam ve ya eğlence gibi.) bununla yeni yeni özelliklere gidebilirim.
Sistemi ve programlamayı hafifletmek için böyle bir alan belirledim. Bununla birlikte veri tabanına daha az bir veri girerek daha çok soruya cevap vermesini sağlıyorum. Örnek : adın ne, ismin ne, adın nedir, ismin nedir, gibi 4 sorunun 4 cevabı olmalı fakat 4 cevapta mantıken aynı olmalı. Bu geliştirme ile hepsi için 1 tane veri ile hepsini kontrol edebiliyorum.
Bu geliştirme ile girilen bazı soruların cümle içinde geçip geçmediğinin kontrolünü sağlarım. o verilere göre dönütte bulundururum. Örnek: “su içer misin, çay içer misin, kahve içer misin” bu 3 soruda aynı anlamı taşıyor. Sistemime eklediğim bu geniş arama özelliği ile bu 3 sorununda aynı anlam taşıdığını tespit edip girdiye göre cevap verebiliyor örneğe göre cevap şu şekilde olacak : (Ben bir şeyler içmem. Doğal olarak “xx” içmem. “xx” sevmem, devrelerimi bozar.) Burda xx dediğim kısımda dinamik olan nesne yer alıyor.
Bu alan ise daha önce bahsettiğim şekilde programcına sor özelliği taşıyıp taşımadığının kontrolünü sağlıyor. Bir soru bu özelliği tanımlarsam o cevabı vermeden önce soruyu tablolara kaydeder.
Bu özelliği 3 gün önce yazdım. Bu özelliği örnek üzerinden anlatıyım.
Örnekteki gibi bir soruya gelen olası cevapları tarıyor. Eşleşme varsa direkt olarak önceden tanımlı cevaplardan birisini veriyor. Böylelikle daha da kontrollü ve az satırda veri tabanı üzerinde daha gelişmiş bir depolama yaptırabiliyorum.
Programı bu kadar geliştirdim sonra aklıma farklı farklı düşünceler gelmeye başladı. Bu uygulama güzel hoşta bana kovid hakkındaki son verileri de söylese nasıl olurdu ve ya tdk’dan Türkçe anlamını bilmediğim kelimeler var onları da söylese keşke keşke bunları yapmışken birde bunları sesli söylese ekrana’da animasyonlu olarak yazsa ne güzel olurdu ve ya sen derdin ki “adana hava durumu” o da sana cevap verirdi. gibi düşünceler gelmeye başladı ve bende bunları tek tek uygulamaya koymaya başladım. Her bir sistem için ayrı bir sınıf oluşturup kodlarımı yazmaya başladım. En son’da bunları çekirdeğe dahil ettim ve aktif bir şekilde çalışmaya başladılar. Baya da güzel oldu şimdi de bunlardan kısaca bahsedeceğim.
Bir satır üzerinden yazdığın tek tip dört işlem yapabiliyor. Örnek; (1+2+3+4+5+6 ve ya 5*22225*333) gibi yazılan toplama(+) çıkartma(-) çarpma(*) ve bölme(/) işlemleri.
Uzun sorular yazılmasını ve tekrarlanmasını engellemek için ufak bir güvenlik metodu yazdım. Baştan savma bir şekilde güvenlik protokollerini tanımladım. Bir tanesi de bu böyle bir ihlal durumunda sistem çalışmadan sana cevabı verir.
Küfür ve Argo içeren kelimelerin girdilerini engellemeye çalıştım. Bu tür durumlardan programımı korumak ve güvenliğini sağlamak istiyorum. Ahlaklı programları severim.
Bazen tanışırken kendi yaşınızı doğru yazmaya bilirsiniz. Bunu da abartılı rakam ve ya yaşınızı yazıyla da ifade etmeye çalışabilirsiniz. Doğru veya yanlış olan bu girdiler yerine sadece rakamla ve istenilen aralıktaki bilgilerin girilmesini kontrol ediyor. Uygun yaş aralığı 0 – 150 limit biraz geniş kitleye göre kısıtlama koymadım. Çok yaşamak güzel bir şey mi bilmiyorum fakat dolu dolu yaşamanızı temenni ediyorum.
Çekirdek kodları geliştirirken arada kendimden bir kaç parçada koymayı ihmal etmedim. Programın cevaplarının arasında bazen benimle ilgili dönütlerde bulunabiliyor. Bunlarla karşılaşınca pek şaşıracağınızı zannetmiyorum.
Evet artık eklemiş olduğum bir Javascript kütüphanesi sayesinde uygulamamın sesli olarak konuşabilmesini sağladım. Bu özellik onu daha da gerçekçi ve cana yakın olması sağlıyor. Böylelikle daha da güzel bir uygulamaya dönüşmeye başladı. Kullanıdığım apiden kısaca bahsedeyim.
Responsivevoice.js adında metini seslendiren bir kütüphane. Kurulumu ve kullanımı kolay. üye olup api key alıyorsunuz. projenize dahil ediyorsunuz. Js olarak verilen bir değişkendeki datayı alıyor sizin için seslendiriyor. Çok basit ve kullanışlı bir api.
Eklediğim bu api ile programdan “kovid son durum” gibi anahtar aramayı yaptırarak. Belirlenen apinin çalışmasını sağlıyorsunuz. Böylelikle Size son o günden önceki son durum bilgilerini dönderiyor. Kullandığım api 24:00 gibi verileri güncellediğinden ülkemizdeki verileri gecikmeli olarak gösteriyor. Farklı bir api kullanmaya üşendim. Yalan konuşmayım. Önemli bir ayrıntı olmadığı için üzerinde fazla durmadım. Asıl amacım kendimi geliştirmek!
Bu api ile de bazı kelimelerin aratılıp anlamlarının sesli olarak okutulmasını sağladım. Örnek verecek olursam;
Yukardaki gibi çalışan bir uygulama. Olası bir sözlükte aranan değeri bulamaması durumunda ise ” Sözlüğe iyice baktım fakat xx kelimesini bulamadım. ” gibi bir cevap verir.
Normalde güzel ve sağlıklı bir şekilde çalışıyordu. “Gemerek hava durumu” dediğmde bana “hava açık ve güneşli, gün içinde en düşük 18 en yüksek 29 derece olması bekleniyor.” diyordu. Fakat api izininden kaynaklı bir problem olduğunda veriyi tam çekemiyor. Sonucu bilmiyorum diye söylüyor.
Paylaşımlardan haberdar olmak istiyorsan. Mail adresini gönder.
Lorem ipsum dolor sit amet, consectetur adipisicing elit. Ducimus itaque, autem necessitatibus voluptate quod mollitia delectus aut.
Yorum Yap