Kas 092016
 
3.463 views

Golang Öğreniyorum

Yazılım üzerine asıl uzmanlık alanım Python. Hem basit, hem güçlü. Neredeyse bütün alanlarda çok etkili kütüphanelere sahip.

Golang Öğreniyorum

https://golang.org

Buna rağmen, “şeylerin interneti” (Internet of Things) gibi konularda henüz yeterince güçlü değil. Bu boşluğu aşmak üzere “micropython” gibi yeni girişimler var.

Python çalışmalarıma eskisi gibi, hatta daha da yoğunlaşarak devam edeceğim. Ancak bu durum, yeni alanlara da el atmama engel olacak değil!…
Golang, ya da kısaca go bu yeni alanlardan biri.

En etkin öğrenme yöntemlerinden birinin “öğretmek” olduğunu biliyorum. Çünkü bildiğiniz bir şeyi başkalarına aktarmak isterseniz, önce o bilgiyi içselleştirmek zorundasınız. Aksi halde sadece papağan tekrarı yapmış olursunuz ve konuyla ilgili çok basit soruları bile yanıtlayamazsınız.

Buna ilaveten, golang dilinin yakın gelecek açısından büyük bir potansiyel taşıdığını düşünüyorum. Golang bir yandan pythonun kullanım kolaylığını, bir yandan da javanın donanım sistemlerine yakınlığını bünyesine toplamış. Sınıf sistemlerini, “struct” yapılarıyla kolaylaştırmış. C’den pointer mekanizmasını devşirmiş. Aslında derlenen bir dil. Buna rağmen yorumlamalı bir dille çalışır gibi rahatsınız.

İşte bu nedenlerle, ara sıra da olsa go hakkında öğrendiklerimi burada sizlerle de paylaşacağım. Ama ders yapar gibi değil, bilgiyle harmanlanmış bir sohbet yapar gibi…

Eğer yazılım dillerine ilgi duyuyor ve kendinizi daha da geliştirmek istiyorsanız, ara sıra bu sayfalara sizi de beklerim.

Go, 2007 yılında Google bünyesinde geliştirilmeye başlanmış. İlk çıkışı, sistem programlamaya yönelik. 2009 yılı sonunda açık kaynaklı olarak genel kullanıma sunulmuş.

2015’te, mobil uygulamaları çok daha güçlü bir şekilde destekleyen kararlı sürüm go 1.5 yayınlanmış. Dil konusundaki gelişmeler hızını kesmeksizin devam ediyor.

Bu bir giriş yazısı olduğu için sözü fazla uzatmayacağım. Yine de Ubuntu 16.04 üzerine nasıl kurulduğunu tek bir satırla aktarayım:

Hoşçakal mesajımı da go ile vereyim:

Ahmet Aksoy

Golang Öğreniyorum

Eki 012016
 
1.791 views

Gensim Vektörel Doküman Eğitimi

Tıpkı word2vec yöntemi gibi, gensim paketinin doc2vec metodunu da kullanabilirsiniz. Buradaki amaç sözcükler yerine dokümanlar arasındaki ilişkileri vektörel olarak belirleyip, gruplamaktır.

gensim word2vec

Resim: https://codesachin.wordpress.com


Bu alandaki çalışmalar word2vec’e kıyasla çok daha kısıtlı. Öyle sanıyorum ki, sonuçların word2vec kadar kolay anlaşılır ve çarpıcı olmaması, bu durumun belirleyici unsurlarından biri.

Dün bir doc2vec çalışması yaptım. Veri olarak “gundem-nz.txt” dosyasını kullandım. Bu dosyayı https://drive.google.com/drive/folders/0B_iRLUok9_qqOFozeHNFMjRHTVk adresinden indirebilirsiniz.

Dosyanın düzenlenmesi, vektörel olarak eğitilmesi ve belli bir örnek doküman için en yakın örneklerin bulunması işlemleri toplam 8 saat sürdü. Bilgisayarımın sadece 4GB bellek ve 4 işlemciyle ulaşabildiği maksimum hız bu. Bu çalışmada asıl kısıtlayıcı unsur CPU’dan çok, bellek oldu. Süreyi asıl uzatan swap işlemleriydi. Yine de “akşam çalıştır, sabah sonucunu al!” taktiği için uygun bir süre bu.

gundem-nz.txt dosyası 323.6MB boyutunda. Eğitilmiş dosyaların toplam boyutu ise 1.4 GB.

Aldığım sonuçlar aşağıda.

Burada “doküman” sözcüğü yerine “cümle” sözcüğünü kullanmak aslında çok daha doğru olacak. Çünkü veri dosyamızın her satırında ayrı bir cümle var. Eğer bu yapıyı her satırda bir cümle yerine bir paragraf veya bir doküman olarak düzenlersek alacağımız yanıtlar paragraflara ve dokümanlara göre düzenlenmiş olacaktır.

Bu kavramlar sentence2vec, paragraph2vec ve doc2vec olarak sunuluyor. Ama hepsinin işleyişi aynı.

Önceki yazılarımda da belirttiğim gibi dosyamızdaki sözcükleri olduğu gibi kullanmak yerine “kök”lerini kullandığımızda daha başarılı sonuçlar almayı bekleyebiliriz. Çünkü bu durumda sözcüklerin sayısı azalarak daha kolay öbeklenebilir hale gelecektir.

Yukarıdaki örnekte benim dikkatimi ilk çeken ayrıntı, aynı cümlenin kendi kendine yakınlığının sadece 0.6513625979423523 çıkmasıydı. Oysa bu, en azından, 1’e daha yakın olmalıydı diye düşünüyorum.

İlk 4 cümlede “adem” sözcüğü ortak payda gibi görünüyor. Sonrakilerde kolay görülebilen bir payda yok.

Vektör boyutunu ve veri büyüklüğünü arttırmak, daha kolay anlaşılır sonuçlar elde etmemizi sağlayacaktır. Eğer elinizdeki olanaklar uygunsa, siz de bu tür denemeler yapabilirsiniz. (Ben vektör boyunu 100 olarak aldım.)

Doc2vec yöntemiyle ilgili bilgi ve örnekler oldukça kısıtlı.
Eğer bu tür bilgilere erişebilirseniz, lütfen, linklerini benimle paylaşmanızı rica ediyorum.

Yeni çalışmalarımı yine buradan duyuracağım.
Beni izleyin!

Ahmet Aksoy

Linkler:

http://gurmezin.com/gensim-vektorel-dokuman-egitimi/

Ağu 262016
 
1.356 views

Eğitilmiş word2vec datasını nasıl kullanırız?

Eğitilmiş word2vec datasını nasıl kullanırız?

Elbette bu tür çalışmalarımızı Python ile yapıyoruz. Üstelik interaktif denemeler yapıyorsak, iPython kullanmamız daha doğru. iPython son dönemde jupyter ile entegre çalışıyor.

Bu yüzden önce kullanmakta olduğunuz Python sürümünü aktif hale getirin. Ben Python 3.5.1 kullanıyorum ve bunun için tanımladığım evp35 isimli bir sanal ortamım var.

Sanal ortamımı devreye sokuyorum:

Artık “python” komutum doğrudan python 3.5.1 sürümünü devreye sokuyor. Gerekli modülleri de bu sanal ortam üzerinden yükledim.

Aynı şey jupyter için de geçerli. Yüklemek için vereceğiniz komut şöyle:

Çalışmamızda word2vec modülünü kullanacağız. Onu da yükleyelim:

Artık iPython’u jupyter üzerinden devreye sokabiliriz. Bunun için:

komutunu kullanın ve “New” kutucuğundan “python 3” seçin.

Aşağıdaki kodları kullanabilmeniz için eğitilmiş veri kümemizi de indirmeniz gerekiyor.

https://drive.google.com/drive/folders/0B_iRLUok9_qqOFozeHNFMjRHTVk adresinden hnz_2010.bin isimli dosyayı indirin. Eğitilmiş vektörlerimiz bu dosyaya kayıtlıdır.

Hazırlıklarınız tamamsa, aşağıdaki işlemleri siz de kendi bilgisayarınızda uygulayabilir, yeni denemeler yapabilirsiniz.

Deneyimlerinizi benimle paylaşmayı da lütfen unutmayın!

Ahmet Aksoy
Açık Kaynak DerlemTR Proje Yöneticisi

Takıldığınız yerler olursa, Yorum bölümünden bana ulaşabilirsiniz.

Haz 112016
 
2.010 views

Python için Yeni bir Çalışma Çerçevesi Kivy

Python‘un bana göre en zayıf tarafı, doğrudan desteklediği güçlü bir görsel çalışma çerçevesi (framework) olmamasıdır. TkInter bu konuda oldukça zayıf kalmaktadır. Qt tabanlı diğer çözümler ise, hem dolaylı hem de zordur.

Kivy bu boşluğu doldurmaya aday bir girişim. Henüz yeterince kullanıcı dostu olduğunu söylemek kolay değil. Ama, hiç olmazsa yeni bir seçenek sunuyor. Üstelik bu seçenek, mobil cihazlara yönelik çalışmalara da açık.

Bu yazımda size Ubuntu 14.04 LTS işletim sistemi üzerinde, Python 3.5.1 sürümü için Kivy 1.9.2 kurulumunun nasıl yapılacağını anlatacağım.

Pythonun son sürümünün bilgisayarınızda zaten kurulu olduğunu varsayıyorum. Ayrıca virtualenv de kurulu olmalıdır. (Virtualenv uygulaması, sistemden bağımsız sanal bir yapı oluşturur. Genel işleyişi etkilemeden bu ortamda istediğiniz herşeyi yapabilir. İşiniz bittiğinde de geride hiç bir çöp bırakmadan yaptıklarınızı silip temizleyebilirsiniz.)

Kurulumumuzu “sanal ortam” (virtualenv) ile yapılandıracağız.

Python için Yeni bir Çalışma Çerçevesi Kivy

Kurulumumuzu tamamladık.

Şimdi de klasik “Merhaba Dünya” kodlarımızı hazırlayalım:

Şimdi de çalıştıralım:

merhaba.py

Elbette kivy’nin tek yaptığı bu değil.

https://kivy.org anasayfasını incelerseniz, örnek kodlar ve açıklamalar bulabilirsiniz.

Bir sonraki yazımda, daha kapsamlı kivy kod örneklerine yer vereceğim.


Ahmet Aksoy

Not: Eğer kodlarınızı çalıştırdığınızda aşağıdaki gibi hata mesajları alırsanız, aldırmayın. Bu tür mesajlar sizin bilgisayarınızda mevcut (aktif) olmayan giriş-çıkış cihazlarından kaynaklanıyordur:
PermissionError: [Errno 13] Permission denied: ‘/dev/input/event5’

Not2: Yukarıdaki yazıyı, Kivy konusunda uzman olduğum için değil, kendi bilgisayarıma kurarken harcadığım deneme-yanılma sürelerini sizlerin de harcama olasılığını azaltmak amacıyla yazdım. Ne yazık ki Kivy hakkında yeterince aydınlatıcı doküman bulmak kolay değil. Ama bu şekilde deneyimlerimizi birbirimizle paylaşırsak, daha kolay ve hızlı çözümler elde edebiliriz.

Nis 192016
 
1.671 views

Türkçe Hecelemede 6 Temel Kural

Türkçe, Fince ve Macarca gibi “Bitişimli Diller”dendir. Bu dillerde kelime kökleri sabit kalırken, sözcüklerin anlam değişikliği, yapılan eklerle sağlanır.

Türkçe heceler “sesli harflere” odaklanır. Her hecede mutlaka tek bir sesli harf bulunur. Bu sesli harf ya tek başına ya da ön veya arkasına gelen çeşitli sessiz harflerle birlikte “tek solukta” seslendirilen heceleri oluşturur. Kelimeler, bir veya daha fazla hece içerir.

Aşağıda özetleyeceğim heceleme algoritması Hürsel Kendir tarafından 1982 yılında verdiği tezde sunulmuştur. Buna göre öztürkçe veya yabancı kökenli kelimelerde kullanılan heceleri aşağıdaki 6 kuralla tanımlamak mümkündür:

a- Peşpeşe gelen iki sesli harf ayrı hecelere aittir
b- İki sesli harfin arasında bulunan tek sessiz harf ikinci sesli harfin oluşturduğu heceye bağlanır
c- İki sesli harfin arasında peşpeşe iki sessiz harf varsa, heceler sessiz harflerin ortasından ayrışır
d- İki sesli harfin ortasında ardışık üç sessiz harf varsa genellikle ilk iki sessiz ilk heceye, diğeri ikinci heceye katılır. Ancak üçüncü sessiz harf “R” ise, ilk sessiz birinci heceye, diğerleri ikinci heceye dahil olur.
e- İki sesli harfin arasında ardışık dört sessiz harf varsa genellikle heceler sessiz harflerin ortasından bölünür. Ancak üçüncü sessiz harf “R” ise, ilk üç sessiz harf ilk heceye, diğeri ikinci heceye katılır.
f- İki sesli harf arasında ardışık 5 sessiz harf bulunuyorsa, ilk üç sessiz harf ilk heceye, sonraki iki sessiz harf ise ikinci heceye katılır.

Aşağıdaki Python kodları yukarıda tanımladığımız algoritmayı kullanmaktadır.

Bu algoritmanın “samsunspor” ve “bursaspor” gibi birleşik sözcükleri “sam-suns-por”, “bur-sas-por” şeklinde ve “doğru” şekilde hecelediğine dikkat edelim. “sam-sun-spor” veya “bur-sa-spor” hecelemeleri Türkçe heceleme kurallarına uymaz.

Yukarıda verdiğim kodlar Python3.5 uyumludur.

Ahmet Aksoy

Nis 072016
 
1.356 views

Lazarus ve Python Entegrasyonu

Lazarus ve Python entegrasyonu için çok basit bir örnek yapalım.

Python, vereceğimiz tam sayıların faktöryellerini döndürsün. Bunun için Python ile birkaç satırlık bir kod oluşturalım hemen:

Kod dosyamızın adı lazarus_test.py olsun.

Lazarus tarafında ise hem istediğimiz tam sayıyı seçebilelim, hem de Python’dan dönen yanıtları sergileyebilelim.

Lazarus kodlarımız da şöyle olsun:

Form1 görüntüsü:

lazarus ve python

Bu da 50 faktöryel hesaplanmış hali.

Lazarus ve python entegrasyonu

Gördüğünüz gibi mekanizma çok basit bir şekilde çalıştırılabiliyor. Lazarus, python ile elde edilen sonuçları sergileme açısından pratik ve görsel bir araç olarak kullanılabilir.

Elbette ben eski bir Delphi kullanıcısı olmanın avantajlarını yaşıyorum. Ama siz Delphi veya Pascal ile daha önceden tanışmadıysanız, yeni bir dil öğrenmenin size ne kadar yük ve yarar sağlayacağını ayrıca dikkate almalısınız.

Konuyla ilgili sorularınız olursa, yorum alanından bana yöneltebilirsiniz.

Lazarus önünüzde yeni ufuklar açabilir. Deneyin, görün!

Ahmet Aksoy