29 Aralık 2006

Zemberek server TCP-IP ve Dbus performansları

Pardus'ta ön tanımlı olarak gelen ve işletim sistemi çapında yazım denetimi servisi sunan Zemberek server ile ilgili olarak Serkan'ın yaptığı Dbus arayüzü çalışmasından sonra ben de eski netty kütüphanesinden Mina 1.1 e geçip kodu iyice temizledim, aceleyle yazılmış gereksiz bir sürü döküntü vardı, iyi oldu yani. Test ederken acaba dbus arayüzü ile TCP-IP soketleri üzerinden çalışan eski arayüzün performansları ne kadar farklı diye küçük bir deneme yaptım. kelimelerin doğrudan denetlenmesi ile soket üzerinden veya dbus gibi bir protokolle gönderilerek denetlenmesi arasında çok performans farkı olacağını biliyordum faka sonuçlar yine de şaşırtıcı geldi. Sadece denetleme işlemi için yaptığım denemeye göre denetleme performansı:

  • Zemberek kütüphanesi : 70-80 bin kelime/saniye
  • Zemberek server TCP-IP : 2700 kelime/s
  • Zemberek server Dbus : 410 kelime/s
Bu rakamlara göre küçük metinlerde dbus arayüzü kullanılabilir gibi görünürken bir kaç bin kelimelik metinlerde performansın bir sorun haline gelmesine neden olabileceğini gösteriyor. DBus arayüzünün yavaşlığın tam nedenini bilemiyorum, aradaki JNI geçişinde bir sorun olabilir veya atladığım başka bir şey var. Pardus için şimdilik soket arayüzünün kullanımı herhalde daha uygun olacakmış gibi görünüyor. Rakamları vaktim olunca daha detaylı olarak vermeye çalışacağım.

23 Aralık 2006

Zemberek server DBus arayüzü ve enchant

Zemberek server DBus arayüzünü svn den indirip derleme enchant ile kullanma üzerine bir belge
http://ebuild.linux-sevenler.org/zemberek-dbus.pdf

17 Aralık 2006

NZemberek Sürüm 0.1

17 Kasım 2006'da Mehmet'e gönderdiğim bir e-posta ile başlayan çalışmamızın ilk ürününü bugün ortaya çıkardık. Zemberek projesinin .Net portu olan NZemberek'in 0.1 sürümü bugün itibariyle yayınlandı. 17 Kasım'dan sonra kodların .Net (C#) karşılıklarını oluşturduk. Bu iş, bazı araçları ya da otomatikleştirilmiş komutları kullanarak ne kadar hızla yapılsa da birçok zorlukla karşılaşılabiliyor. Zemberek ekibinin de desteğiyle şu anda Zemberek2 projesinin işlevlerini neredeyse tamamıyla yerine getiren bir sürüm mevcut. Mehmet ve Ahmet'e çok teşekkür ediyoruz. Onlar, tek amacımızın bu projeyi .Net platformuna taşımak olmadığını, bilgi ve deneyimimiz ölçüsünde her iki kanatta da elden gelen katkıyı yapmak istediğimizi biliyorlar.
NZemberek için bundan sonraki hedefimiz bir Office Add-in'i sayesinde Office Proofing Tools dışında da sözcük denetimini yapabilmek. Gelişmeleri yine Zemberek ekibinin bizimle paylaştığı bu blogdan sizlerle paylaşmaya devam edeceğiz.

Proje sayfası: http://code.google.com/p/nzemberek/

Java6 performans -2

Mehmet'in testleri uzerine ben de merak edip benzer testler gerceklestirdim. Buna gore 72747 kelimelik bir roman uzerinde denetleme, cozumleme ve heceleme testlerini 3 kere ardi ardina yapip islem hizlarini kaydettim. sonuclar kelime-islem/saniye cinsindendir. Buna gore:

Islem
Java-5 (u7)
Java-6
Fark
denetleme (cepli)

81380
99768
99845
101762
119248
121063
%22
denetleme (cepsiz)

57559
63789
64134
68256
75772
76727
%19
cozumleme

11306
11550
11530
12668
12760
12926
%11
heceleme

401815
489596
463607
529517
681665
687487
%40

Notlar:
- Java 5 update 8 ile birlikte bazi performans iyilestirmeleri Java 5 uzerinde yapilmisti, eger o surumu kullansam sonuclar biraz daha farkli olabilirdi.
- Java 6 normal modda Hotspot iyilestirmesi yapiyor, yani ayni islemi cok miktarda tekrar ettikce kodu hizlandiriyor. Bu ozellik onceden sadece -server modunda gecerli idi.
- Bu testler tam olarak "mikro benchmark" olmasa da her zaman sonuclari biraz suphe ile degerlerlendirmekte yarar var.

Test ortami: Athlon 64 3000+ islemci, 512MB bellek (diger 512 MB sizlere omur..) Windows XP SP2. IDE: IntelliJ IDEA 6

16 Aralık 2006

Java 6

Java 6'nın çıkışının ardından hemen küçük bir deneme yaptım.
Yaklaşık 700 bin kelimeden oluşan kitaplar için yapılan Denetleme ve Çözümleme işlemlerinin Java 5 ve Java 6 için harcadıkları süre şöyle:


Java 5 Java6
------------------------
Denetleme 1 10.7s 8.7s
Denetleme 2 10.5s 8.8s

Çözümleme 1 45.1s 40.1s
Çözümleme 2 45.5s 42.5s

Görüldüğü gibi Herhangi bir müdahale olmadan sadece Java 5'ten Java 6 ya geçiş %10-15 daha iyi performans kazanmamızı sağlıyor. Kazanç, denetleme işleminde daha belirgin.

Test Ortamı: Athlon 64 2200mhz, 1GB RAM ve tabi ki Pardus 2007 RC :)

15 Aralık 2006

Coklu kelime islemeye giris

Zemberek icinde cok kelimeli ifadelerin islenmesi konusunda yavastan calismaya basladim. Bu konu bizim icin cok onemli, ozellikle belirsizlik giderimi, ve diger ileri dil isleme konularina girebilmemiz icin atilabilecek en onemli adimlardan birisi. Temelde yapmaya planladigimiz sey bir dizi kelimeden (cumle diyelim) cok kelimeli ifadelerin tespiti ya da bu yapilarin uretimi. tam Cumle analizinden bir onceki asamada bu zaten sart gorunuyor. Cok kelimeli ifadelerin cok genis bir yelpazesi var, asagidaki orneklerdeki gibi:

  • Buna ragmen
  • hanim hanimcik
  • ipe sapa gelmez
  • uzum uzume baka baka kararir
  • olur mu olur
  • kosa kosa, kosmaya kosmaya,
  • yapsam mi yapmasam mi
  • olup olmayacagini
  • Dunya Saglik Orgutu, Chuck Norris

Bu konuda cala kalem bir dokuman yazmaya basladim, ilgilenen inceleyebilir. Bu konuda kodlamaya girismeden sonradan cikabilecek puruzleri en aza indirmeye calismak iyi olacak gibi..

06 Aralık 2006

F ve Q Problemli ikililer

Basitten başlamak için İlk testi on parmak yazarken en çok zaman kaybettiren tek parmakla arka arkaya basılması gereken ikili tuş kombinasyonlarının Türkçedeki toplam oranını hesaplamak için yaptım.

Örneğin Q klavyede Türkçe'de en çok kullanılan hecelerden olan 'de' yi yazarken orta parmağın mecburen önce d ye sonra e ye arka arkaya basması gerekiyor, ama 'la' olsaydı sağ yüzük ve sol serçe parmakların seri şekilde ardarda basması ile daha yüksek bir hız elde edilecekti. Dolayısıyla parmakların sorumlu olduğu tuşların ikili kombinasyonları Eğer Türkçe'de çok kullanılıyorsa o yerleşim Türkçe bir metni yazarken daha zorlanacaktır. Daha sonra bu ikililerin uzak veya yakın olmaları, örneğin tuşlar ayrık olduğundan 'ce' nin yazılımı 'de' den daha zordur gibi kuralları da ekleyerek bu test hassaslaştırılabilir.

ilk sonuçlar ve problemli kombinasyonlar şöyle:
5.5 milyon kelimede kullanılan ikili sayısı: 783 (zaten maksimum alfabedeki harf sayısının karesi olabilir)
Bu ikililerin sayısı : 21885913

Q klavye, problemli kombinasyonlar ve kullanım oranları (sadece binde yarım'a kadar olanlar):


de 262138 % 1,19775
ol 180592 % 0,82515
ed 138389 % 0,63232
un 131612 % 0,60135
kı 86487 % 0,39517
iş 84469 % 0,38595
nu 79645 % 0,36391
ği 76787 % 0,35085
ce 69903 % 0,31940
ık 61939 % 0,28301
uy 61611 % 0,28151
za 57819 % 0,26418
ec 57256 % 0,26161
iğ 57126 % 0,26102
mu 51323 % 0,23450
az 50166 % 0,22922
nm 47770 % 0,21827
rt 47284 % 0,21605
şi 42356 % 0,19353
ço 41503 % 0,18963
üş 38281 % 0,17491
um 36500 % 0,16677
yu 26899 % 0,12291
şü 23064 % 0,10538
çl 18534 % 0,08468
vr 16613 % 0,07591
kö 15911 % 0,07270
yn 14333 % 0,06549
tr 12849 % 0,05871
rg 12463 % 0,05695
üğ 11274 % 0,05151
...


F klavyedeki problemli ikililer ve kullanım oranları:

rd 208208 % 0,95133
kt 92062 % 0,42065
gö 86262 % 0,39414
gi 81392 % 0,37189
eğ 69136 % 0,31589
ca 67735 % 0,30949
st 65667 % 0,30004
ve 61703 % 0,28193
ev 60602 % 0,27690
rk 53743 % 0,24556
ac 53471 % 0,24432
nm 47770 % 0,21827
rt 47284 % 0,21605
çı 44809 % 0,20474
ça 43591 % 0,19917
ço 41503 % 0,18963
rs 38716 % 0,17690
aç 29989 % 0,13702
ks 23757 % 0,10855
zd 20959 % 0,09576
çü 16729 % 0,07644
ğe 16186 % 0,07396
oc 16081 % 0,07348
cı 15710 % 0,07178
üç 14374 % 0,06568
kr 13271 % 0,06064
üc 13223 % 0,06042

Toplamda ise Q klavyedeki sorunlu ikililerin türkçedeki kullanım oranı : %9.3 F klavyeninki ise %6,6 çıktı.

Buradan çıkan ham sonuçlara göre F klavye Q'ya göre yaklaşık %25 daha az problemli karakter çifti kullanımına yol açıyor. Tabi F klavyede de 'rd' , 'kt', 'gö', 'gi', 'eğ' gibi sorunlu ikililer olması ve belki farklı bir yerleşimle bu oranın daha da iyileştirilebileceği düşüncesine yol açıyor.

Bu ölçüm işi umduğumdan çok zaman aldı :) daha kapsamlı sonuçlar biraz gecikecek.

04 Aralık 2006

F ve Q nun savaşı

Zemberek'le uğraşırken aklıma eğlenceli bir çalışma geldi. Türkiye'de gündemden hiç düşmeyen F ve Q klavye tartışması ile ilgili olarak yazılan onca şeyden sonra az da olsa ölçüme dayalı bir sonuç çıkarmak.

Bu yazıda ezeli rakipleri ve maçın kurallarını kısaca açıklayacağım, bir sonraki yazıda da ilk sonuçları açıklayacağım. Bu sırada günlüğü izleyen arkadaşlardan yöntemle ilgili eleştirileri varsa belirtmelerini rica edeceğim, ona göre ölçümleri tekrarlayacağım.

"QWERTY" olarak ta bilinen Q klavye Christopher Sholes tarafından geliştirilmiş, patentlenmiş ve Remington firmasına satılmış. Wikipedia'ya göreQ klavye ile ilgili olarak söylenen yazım hızını özellikle düşürmek için tasarlandığı hikayesi doğru. Q klavye ile ilgili detaylı bilgi için wikipedia'daki oldukça detaylı yazıyı okumanızı tavsiye ederim. Türkçe Q klavye ise standart Q klavyenin sağ tarafına Türkçe harflerin yerleştirilmesinden oluşmuş. Q klavye yerleşimi ve Türkçe'de en çok kullanılan harflerin Q klavye üzerindeki dağılımı şu şekilde:


F klavye ise 1950 li yıllarda geliştirilmiş ve 1955'te “Türk Standardları Enstitüsü” tarafından resmen kabul edilmiş ve sadece mekanik, elektrikli ve elektronik daktilolar için değil, bilgisayarlar için de “TS 2117 – UDK 681.6.065” kodu ve “İki Elle Kullanılan Alfa nümerik Klâvyelerin Temel Düzeni” başlığı ile tescil edilmiş. Q'nun tam tersine F klavyede X,Q ve W harfleri klavyenin sağ tarafına itilmiş durumda ve Türkçede en çok kullanılan harfler on parmak yazarken parmakların doğal yerleşim noktalarına yerleştirilmiş.

İki klavye yerleşiminde Türkçe'de en çok kullanılan harflerin yerleşimi gerçekten de F klavyenin lehinde gibi görünüyor.

Benim kendimce cevaplamaya çalışacağım sorularsa,
- Gerçekten de sadece en çok kullanılan harfleri parmakların doğal duruş koordinatlarına uygun - yakın yerleştirmek bir yerleşimi diğerinden iyi yapar mı?
- Türkçe için en iyi klavye yerleşimi F mi? F gerçekten de Q dan iyi mi? Daha iyisi yapılabilir mi?

Yöntem:
On parmak yazı yazarken her parmağın sorumlu olduğu tuşlar vardır, örneğin sol serçe parmak Q klavyede "1,2,q,a ve z" den F de ise "1,2,f,u ve j" den sorumlu oluyor. Önerdiğim ölçme yöntemi de buna dayanıyor ve oldukça basit: Bir metni yazan on parmak bilen kişiyi ve parmaklarını simüle etmek, tüm parmakları, sorumlu oldukları tuşları, hangi elde olduklarını, tanımlamak, tuşlara basarken gerekli kuralları işleterek yazıyı yazarken geçen süreyi hesaplamak, olabildiğince çok Türkçe metni bu sanal parmaklarla yazdırıp toplam süreyi bulmaya çalışmak. Test ayrıca Türkçede en çok kullanılan ikili ve üçlü harf grupları ile tekrarlanacak. Aşağıda bütün bunları yaparken uyulacak kuralları sıralamaya çalıştım:

Varsayımlar:

  1. Büyük harf olmadığı varsayılacaktır.
  2. Noktalama işaretleri hesaba katılmayacaktır.
  3. 10 Parmak yazım metodu dikkate alınacaktır.
  4. Simülasyonlarda parmak hareketleri dikkate alınacaktır.
  5. Parmakların o anda bulundukları yerin hemen altlarında bulunan harflere minimum zaman değeri verilecektir.
  6. Sağ el parmaklarına daha düşük zaman değeri verilecektir (yazarın Sağlak olduğu varsayımı ile)
  7. İşaret parmakları için daha az zaman değeri verilecektir.
  8. Serçe parmağı için yüksek zaman değeri verilecektir.
  9. Baş parmaklar hep sabit değerler alacaktır (sadece boşluk)
  10. Parmakların sorumlu oldukları tuşlara erişim süreleri hesaplanırken çaprazlarında ve aşağıda kalan tuşlar için daha yüksek zaman değerleri verilecektir.
  11. Arka arkaya yazılan harfler aynı parmak tarafından yapılıyorsa zaman değerleri doğrudan toplanacaktır veya ceza olarak süre arttırılacaktır
  12. Arka arkaya yazılan harfler aynı elin farklı parmaklarıyla veya farklı ellerin parmakları ile yapılıyorsa harcanacak toplam süre düşürülecektir.
  13. Parmaklar belli bir süre işlev yapmamışsa otomatik olarak doğal konumlarına geri geliyor vasayılacaktır.

Şu anda hesaba katılmayan durumlar:
  1. Akıl :) normalde kelime yazılırken parmaklar otomatik olarak ilerde (2-3 karakter) yazılacak olan tuşa doğru yönelecekti ve parmak hareket cezası azalacaktır

Bir sonraki yazıda ilk sonuçları vereceğim, bu sırada kurallara eklemek veya çıkarmak istediğiniz bir şeyler varsa lütfen bildirmekten çekinmeyin. Bir de bu çalışmanın eğlence amaçlı olduğunu tekrar hatırlatayım :)

03 Aralık 2006

Firefox2 ve Zemberek

Firefox 2 web tarayıcısı tüm giriş kutularında herhangi bir eklenti olmadan yazım denetimi desteği sunuyor. ancak myspell tabanlı olduğu için Türkçe yazım denetimi desteği yoktu. Bugün Linux Gezegeninde gördüğüm ekran görüntüsüne göre Pardus kullanıcıları Firefox 2 kullanırken Türkçe yazım denetimi desteğine sahip olacaklar. Çalışmaları ve ortaya çıkan güzel ürün için Faik Uygur'a teşekürü borç biliriz.

01 Aralık 2006

Jubler uygulamasi Zemberek kullaniyor

Alt yazi isleme uygulamasi Jubler'in son surumu (3.0) Turkce icin Zemberek destegi vermis. Bunu saglayan Serkan arkadasimiza katkisindan dolayi tesekkur ediyoruz. Ayni arkadasimiz ayrica Gentoo icin Zemberek sunucusunun paketlenmesi isini de gerceklestirmisti.