Ara 062016
 
2.521 views

Golang Notları 002

GOPATH
“Go” diliyle yeni uğraşmaya başlayanların çok sık karşılaştıkları bir hata – uyarı mesajı vardır: “GOPATH tanımı bulunamadı.”

“GOPATH”, go’nun sürekli kullandığı adreslerden biridir. Çünkü paket yönetim ve kullanım işlemleri bu klasör aracılığıyla yapılıyor.

Ubuntu’da bu klasör genellikle $HOME/go veya $HOME/golang olarak açılır. Ben, ikincisini tercih ettim.

Ubuntu’da bu adresi sisteme aşağıdaki gibi tanıtıyorsunuz:

Bilgisayarınızı yeniden açtığınızda aynı komutu vermek zorunda kalmamak için bu komutu $HOME/.bashrc dosyasının içine ekliyorsunuz.

Kontrol için “go env” komutunu kullanabilirsiniz:

Golang Notları 002

Paket kurma golang için çok kolay bir işlem:

Basit bir Scraper (Kazıyıcı) programı

“html” paketinin kullanıldığı bir de örnek vereyim. Örnekle ilgili açıklamaları https://schier.co/blog/2015/04/26/a-simple-web-scraper-in-go.html adresinde bulabilirsiniz:

Kod kolay anlaşılır olduğu için açıklamasını vermeyeceğim. Komut satırına eklediğiniz adresteki tüm tekil linkleri çıktı olarak alıyorsunuz.

Golang Notları 002

İnternet üzerinde çok sayıda “webscraper” örneği var. http://depado.markdownblog.com/2015-08-07-small-example-how-to-use-the-scrape-library-in-go adresindeki örnek kod, Paris’teki bir galeride bulunan eserleri listeliyor.

Ahmet Aksoy

Referanslar:

Kas 102016
 
1.910 views

Golang Notları 001

Bir yazılım dilini öğrenirken nasıl bir yol izlediğinizi bilemiyorum. Benimki biraz parçalı bulmaca çözmek gibidir. Tek bir kaynağı başından başlayarak düzenli şekilde izleyerek öğrenmek gibi bir alışkanlığım yoktur. Ben daha çok oradan buraya atlayarak, o an ilgimi çeken şeylere öncelik vererek öğrenmeyi tercih ederim. Bu amaçla, bulabildiğim, konuya ilişkin her türlü kaynağı bilgisayarıma depolarım. Artık internet yoksunluğu eskisi gibi değil. Ama, yine de kaynakların elimin altında olması bana güven duygusu verir.

Golang Notları

Tüm kaynakları yerel bilgisayara indirmek mümkün değil elbet. Zaten bu kadarına gerek te yok. Şahsen ben bile, bilgisayarıma heyecanla indirmiş olduğum bazı kaynakları aslında hiç kullanmamış olduğumu zaman zaman farkederim. (Özellikle sabit diskimde kıpırdayacak yerin kalmadığı zamanlarda… 🙂 )

İster indirin, isterseniz sadece linklerini not alın. Ya da link deposu olarak benim yazılarımı kullanın. Hiç farketmez!.. Ama zamanınızı iyi değerlendirin ve bulabildiğiniz her türlü kaynaktan olabildiğince yararlanın!

Bazıları için tutarsız gibi gelebilir ama, zaman içinde, bu bulmacanın parçaları yavaş yavaş tamamlanır ve tablo bir bütün olarak karşımıza çıkar. Benimki, bana göre, eğlenceli bir öğrenme yöntemidir.

Şimdi size benim listemdeki linklerden bir kaçını vereyim:

Bunlar da youtube üzerindeki bazı dersler:

Eğer facebook kullanıyorsanız, kısa bir süre önce Savaş Doğan arkadaşımızın kurduğu Golang Türkiye grubuna mutlaka katılın. En azından izleyici olun. Çok şey öğreneceğinizden eminim.

https://github/com üzerinde binlerce golang projesi bulabilirsiniz. Basit bir arama yapmanız yeterli olur.

Golang için uygun IDEler

Bir golang programının kaynak kodunu yazmak için -diğer pek çok dilde olduğu gibi- sadece basit bir metin düzenleyici yeterlidir. Ubuntuda gedit, vim, nano gibi programları kullanabilirsiniz.

Ama yazdığınız kodların otomatik olarak ve düzgün şekilde formatlanmasını isterseniz daha seçici olmanız, en azından go ile ilgili bir eklentiyi (plugini) metin düzenleyicinize yüklemeniz gerekir.

Go için kullanabileceğiniz bazı metin düzenleyici ve IDEler şunlardır:

  • Atom
  • Eclipse
  • Emacs
  • Gedit
  • Geany
  • IntelliJ IDEA
  • Net Beans 8.1
  • Vim
  • VisalStudio Code
  • GNU nano

Yukarıdakilerden “geany”, son sürümlerinde go eklentisi önceden yüklenmiş bir uygulamadır. Diğerlerine “go plugin” eklentisinin yüklenmesi gerekir. Ancak Net Beans 8.2 sürümü için uygun bir go eklentisi yoktur. Bu nedenle, isteniyorsa, sürüm 8.1 kullanılmalıdır.

Kullananların önerilerini dikkate aldığımızda, Intellij IDEA Community sürümü, go için en kullanışlı araçlardan biri olarak karşımıza çıkmaktadır.

Yine çok laf ettik. Arayı biraz kapatalım. Bir komut penceresi açın ve aşağıdaki komutları verin:

Bu komutu go sistem değişkenlerinin durumunu görmek için kullanıyoruz.

Go sürüm numaramızı öğrenmenin yolu.

Golang Notları

“merhaba.go” kod dosyamızı çalıştırma kodu (Aslında hem build, hem de run işlevi vardır.)

“merhaba.go” dosyasındaki kod satırlarının derlenerek çalıştırılabilir hale gelmesini sağlar. Derlenen dosya tek başına çalıştırılabilir hale gelir.

Şimdilik açıklama vermeyeceğim. Ama bu komutla, komut satırından hata denetimi yapabilen bir araca sahip olacaksınız. İleride “errcheck” komutunu oldukça çok kullanacağız.

Beni izlemeye devam edin. Yeni Golang Notları bölümlerinde daha fazla kod olacak.

Ahmet Aksoy

Golang Notları 001

Kas 092016
 
4.027 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

Kas 032016
 
1.936 views

Türkçe Kelime Köklerinin Sayısal Dağılımı

Türkçe kelime köklerinin içerdiği harf sayısı bir ile yirmi bir arasında değişmektedir. Bu değişimi sayısal olarak grafikleştirdiğimizde karşımıza aşağıdaki gibi bir tablo çıkmaktadır.
Türkçe Kelime Köklerinin Sayısal Dağılımı

En kısa Türkçe kelime kökü “o”dur. Tek karakter uzunluğundadır. (C, I, L, V, X gibi Romen rakamlarını ve tek karakterli bazı atomik işaretleri bu listeye katmıyorum. Onlar da aslında yaşayan Türkçenin bir parçasıdır ama, onları ayrı bir kategoride işlemekte yarar var.)

Harf sayısını ikiye yükselttiğimizde yalın kök sayısı 110 adedi bulur. Güncel kısaltmaları da bu listeye ilave edersek anlamlı kök sayısı 187’ye kadar yükselir.

Kısaltmaları dikkate almadığımızda elde ettiğimiz 2 harfli kökleri şu şekilde listeleyebiliriz:

ad, af, ah, al, an, ar, as, at, ay, az, aç, ağ, be, bu, da, de, do, ed, eh, ek, el, em, en, er, es, et, ev, ey, ez, eğ, eş, fa, ha, he, hu, hı, ıh, ıs, il, im, in, is, it, iv, iz, iç, iğ, iş, ki, la, le, mi, mu, mü, mı, na, ne, nü, od, of, oh, ok, ol, om, on, ot, ov, oy, oz, öc, öd, öf, ök, öl, ön, öp, ör, öt, öv, öz, öç, pi, re, si, su, sü, şu, ta, te, ti, uc, uç, ud, uf, um, un, ur, us, ut, uy, uz, üç, ün, üs, üş, üt, üz, ve, ya, ye

Harf sayısını üçe çıkardığımızda, kök sayısı 936’ya yükselir.

Dört harfli kelime sayısı 3015 olur.

En yüksek sayı 6 harfli köklerdedir: 8232

Bu sayıları bir tablo haline dönüştürelim.

Harf sayısı Kök sayısı
1 1
2 110
3 936
4 3015
5 8224
6 8232
7 8082
8 7172
9 4374
10 2662
11 1340
12 659
13 330
14 164
15 66
16 29
17 7
18 4
19 2
20 1
21 1
22 0

Yukarıdaki rakamları Python diliyle yazdığım betiklerle elde ettim. Grafik içinse matplotlib kütüphanesinden yararlandım.

En uzun köklerimizi de örnekleyelim:

18 harfliler:
elektrokardiyograf
elektrokardiyogram
karıncayiyengiller
yılanyastığıgiller

19 harfliler:
elektroansefalogram
elektrokardiyografi

20 harfli
elektroansefalografi

21 harfli
barbaroshayrettinpaşa
(Bir yer ismi olan bu sözcük aslında bitişik yazılmayabilir. O zaman en uzun kelime kökü 20’de kalmış olur)

Dikkat ederseniz, en uzun Türkçe sözcük köklerinin çoğu aslında Türkçeye dışarıdan girmiş birleşik sözcüklerdir. Ama onları gündelik yaşamımızın içinde kullanmaya devam ediyoruz. Onların ifade ettiği kavramlara karşılık gelen -öz-Türkçe sözcüklerimiz olmadıkça, bizler de bu sözcükleri ister istemez kullanmaya, onları sahiplenmeye devam edeceğiz.

Bu yazı, onaylanmış bir akademik çalışma değildir. Daha çok bir deneme niteliğindedir. Dolayısıyla bazı eksik ve hatalar içerebilir. Eğer böyle bir eksik veya hata tespit ederseniz, lütfen benimle de paylaşın. Sorunları birlikte yorumlayalım. Doğrularını üretelim.

Ahmet Aksoy

Kas 012016
 
4.014 views

OpenCV ve Python ile Grafik İşlem Örnekleri

OpenCV kütüphanesi, canlı grafik işlemler için gereken fonksiyonları kullanıma açıyor.

Ana siteden OpenCV2 veya OpenCV3 paketlerini yükleyebilirsiniz.

https://github.com/opencv/opencv adresinde ana sitenin bir çatalı yer alıyor. Tüm kodları ve örnekleri buradan da indirebilirsiniz.

OpenCV kütüphane fonksiyonları CUDA kullanabiliyor. Hemen hemen bütün sistemlerle uyumlu bu kütüphane, “samples” dizinlerine yerleştirilen örneklerle daha kolay anlaşılabilir hale getirilmiş.

“Coherence.py” python kodunu kullanarak elde ettiğim örneklerden biri şöyle:
coherence_01_01-11-2016

gabor_threads.py kodunu çalıştırarak elde ettiğim örneklerden birisi şu:
gabor_threads

Python dizinindeki örnekleri “python3 demo.py” komutuyla açılan menü sisteminden kolaylıkla aktive etmeniz mümkün.

facedetect.py programcığı, canlı bir şekilde insan yüzünü yakalama konusunda öğretici bir örnek.

Nesne tanıma konularıyla ilgileniyorsanız, bu kütüphaneyi mutlaka portföyünüze ekleyin.

Ahmet Aksoy

Referanslar:

Eki 012016
 
2.020 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/