06 Ekim 2008

Tr-spell ve Firefox Turkce imla denetim eklentisi.

Bundan bir sure once Hunspell uyumlu turkce imla denetim dosyalarinin uretilmesi konusunda dusunup ardindan bir kac deneme yapmistik. Sonucta ortaya kelime tabanli basit bir sozluk cikmisti. Bu konuda biraz daha calisip yeni bir surum cikardik. Bu paketleri otomatik olusturabilmek icin de Google code hosting kapsaminda tr-spell adinda bir proje olusturduk. Projedeki kodlar ile cesitli kademelerle Hunspell icin gerekli .dic ve .aff dosyalarinin yani sira Firefox icin eklenti de uretebiliyoruz. Firefox eklentisinin uretimi asagidaki diyagramda gosterilmistir (buyutmek icin resme tiklayin):




Ilk asamda elimizdeki elektronik kitaplardan yararlanmistik. ancak oradaki 12 milyon civarindaki kelimeden ancak 350.000 civarinda tekil kelime uretebilmistik. Daha sonra gazete arsvilerinden yararlanmayi dusunduk. Bazi gazetelerin online arsivlerinden onlarin sunucularini da zorlamadan yuksek oranda haberi cekip icerisindeki yazilari ayiklayip binlik bloklar halinde dosyalara kaydedttik (ilgili kodlari projeden inceleyebilirsiniz.). Elimizde 2GB'den fazla duz metin dosyasi olustu. burdan 200 milyon civarindaki kelimeyi zemberek ile denetleyip cozup geri olusturarak 1.2 milyon civarinda tekil turkce kelime uretildi. 
Burada bir sorunla karsilastik. her ne kadar mehmet hunspell icin ozel ek(.aff) dosyasi yazmayi basarsa da Hunspell'in genel yapisinin turkceye cok uygun olmadigini anladik. Bu konuda halen umit olsa da su an icin farkli bir yolu tercih ettik. Elimizdeki kelimeleri kullanarak yapay bir ek dosyasi uretmeye karar verip ekleri dilbilgisi kurallarina gore tanimlamaktansa tum kelimeleri Kok+ekler seklinde ayirip ekler kismini ayri ayri orjinal ek olarak kabul eden bir mekanizma kurduk. Yani mesela "kitaplar" ve "ktaplara" icin "lar" ve "lara" adinda iki ayri ek tipi uretiliyor. Bu sekilde ekleri ayirip bir ek dosyasi urettik. 70.000'e yakin ek blogu ortaya cikti. Daha sonra bu ek bloklarinin en cok kullanilan 20.000 tanesi ile Hunsepll ek (.aff) dosyasi ve bu ekleri kullanan kokleri kullanarak hunspell sozluk dosyasi (.dic) uretmek oldukca kolay oldu. Firefox icin gerekli dosyalaru da kullanip yeni bir firefox eklentisi olusturduk. eklentiyi proje ana sayfasindaki baglantidan indirebilirsiniz. Firefox ile [ File -> Open File ] seceneginden dosyayi secip eklentiyi kurabilirsiniz.
Aslinda halen basarim istedigimiz duzeyde degil ve bunu arttirmak icin bir iki calisma daha yapabileceigmizi saniyorum. Ancak su an icin eklentinin idare edecek duzeyde is gorecegini saniyoruz. 
Eger pardus kullaniyorsaniz, bu eklentiyi kurmaniza gerek yok, cunku pardusta Firefox zemberek mekanizmasini kullaniyor. Ve 400KB'lik zemberek acik hali 10Mb olan bu eklentiden cok daha yuksek basarim ile isliyor. Bu eklenti Windows ya da Mac altinda Firefox kullananlar icin faydali olacaktir. Eklentinin icindeki dic ve aff dosyalarini kullanarak hunspell kullanan farkli uygulamalar icin de eklentiler yazilabilir. 

 

05 Ekim 2008

Tr2sql, Turkce'den SQL'e donusum denemesi

Zemberek kutuphanesinin kullanildigi calismalardan birisi de Turkce'den veri tabani sorgu dili SQL'e donusum yapilmasini amaclayan tr2sql projesi. Proje cok basit denilebilecek bir yontem ile Turkce cumleleri kistli bir alanda kabul edilebilir bir basari ile SQL'e donusturebiliyor. Donusum adimlari asagidaki gibi isliyor:
  • Veri tabani tanimlama dosyasindan veri tabani birimlerinin (tablolar, sutunlar) hangi turkce dogal dil kavrama karsilik dustugu okunuyor.
  • Ayni anlama karsilik dusen kokler tek bir kavrama karsilik dusuruluyor. Bu bilgi yine bir dosyada saklaniyor. (Burada bir wordnet cok ise yarardi.)
  • Girilen cumle ayiklaniyor. Ardindan her bir kelimenin hangi kavrama ve ne tur bir veri tabani birimine karsilik dustugu kestiriliyor. Cumle "Cumle Bileseni" katarina donusuyor. Bu islem sirasinda Zemberek'ten yararlaniliyor. (Burada da gercek bir cumle cozumleyici cok makbule gecerdi)
  • Olusan "Cumle bileseni" katari basit bir durum makinesine gonderiliyor. Durum makinesi art arda gelen bilesenlere gore SQL Sorgu Tasiyici adindaki bir nesneye sorgu verilerini yigiyor. Durum makinesi tamamen elle kodlandi.
  • SQL Sorgu Tasiyici nesnesindeki veriler kullanilarak gercek SQL cumlesi uretiliyor. Asagida adimlar basitlestirilmis olarak gosterilmistir.
Elbetteki ciddi kisitlamalari da mevcut donusumun, bunlarin ana nedeni zaman azligi ve eldeki NLP araclarinin yetersizligi. Kisitlamalara dair bilgileri proje dokumanindan inceleyebilirsiniz.

Sonucta proje icinde calisanlara ait temel bilgileri barindiran bir veri tabani tablosu uzerinde asagidaki tur sorgulari basari ile donusturebiliyor:
  • işçileri listele
  • çalışanları göster
  • çalışanların adlarını yaz
  • işçilerin isim ve soyadlarını göster
  • ilk 5 işçiyi listele
  • çalışanların ilk 5 inin adını ve numarasını göster
  • adı "Ali" olan çalışanları göster
  • adı "Ali", soyadı "Er" ya da "Erkan" olan çalışanları göster
  • adı "Ali", soyadı "Er" olan ilk 5 çalışanın numara ve adını göster
  • numarası "9" dan büyük işçileri listele
  • numarası "9" dan büyük kaç kişi var
  • işçilerden kaçının numarası "9" dan büyük
  • ismi "A" ile başlayan çalışanları göster
  • adı "A" ile başlamayan çalışanları göster
  • ismi "A" ile başlamayan, numarası "9" dan büyük olmayan ilk 100 çalışanın numara ve adını göster
Cumlelere dikkat edilirse bilgi kisitlayan bilesenlerin tirnak isareti icerisinde yazildigi, kesme isaretinin kullanilmadigi ve sayilarin rakam kullanarak yazildigi gozlemlenebilir. 

Bu calisma sadece bir deneme olarak gorulse de basit bir yontem ile bile oldukca basarili sonuclarin elde edilmesi bu konuda daha ileri calismalar icin umit oldugunu gosteriyor.
Proje sayfasina http://code.google.com/p/tr2sql/ , oldukca ayrintili olan proje dokumanina ise su baglantidan erisebilirsiniz.

Proje Suleyman Demirel Universitesi Elektronik Bilgisayar Egitimi bolumu mezunlarindan Dilek Semiz'in lisans tezi kapsaminda gerceklestirildi. Yazilimin gerceklenmesinde benim de yonlendirmem ve dogrudan katkim oldu.

Bu noktada Turkiyedeki akademi camiasina da kucuk bir tas atmak isterim. tr2sql calismasi alaninda ilk degil. Bu konuda Bogazici universitesinde gelistirilen TOY kutphanesini kullanan Nalan TS (pdf) adinda onceden gerceklestirilen baska bir proje de var. Bu proje daha ileri islemleri de daha az kisitlama ile gerceklestirebiliyor. Ama ne o projeye ne de universitelerimizde gerceklestirilen calismalarin buyuk cogunlugunun ise yarar calistirilabilir koduna erismek cok zor. Google code hosting ya da diger benzeri sitelerde proje acmak 5 dakika aliyor sadece. Duyrulur.

02 Ekim 2008

Zemberek 2.1.1

Zemberek 2.1.1 surumu cikti. Bu surumdeki bazi degisiklik ve duzeltmeler sunlar:


- Olmayan bazi kelimeler eklendi, eskik tanimlanan bazi kelimeler duzeltildi. Bunlardan bazilari:
[kitabevi, Finlandiya, obezite, icirmek, kesinkes, karaborsa, cemevi, emlak, genelev, olur, derlem, abi, subjektif, tereddut, selulit, arazoz, cezaevi, titanyum, dedektif, sehadet, kilometrekare, avro, nanoteknoloji, klasik, suistimal, livata, Bahattin, rutin, gunubirlik, duvak ]
- Soluktu, yapmakti gibi kelimeler cozulemiyordu. ilgili ekin uretim kurali duzeltildi.
- Kelime ureticideki dil bagimli son harf yumusama ozelligi duzeltildi. Oradaki bir yanlislik da giderildi.
- ILI fiil eki eklendi (serili, yapili, gerili..). 
- Kelime sinifindaki diziye donusturme metodu duzeltildi.
- SonHarfYumusamaOzelDurumu sistemden kaldirildi. ek ureticide hallediliyor.
- Cesitli kod duzeltmeleri, paketleme ile iliskili duzenlemeler.

Yapilan degisikliklerin detaylarini proje kod degisiklikleri sayfasindan inceleyebilirsiniz ( http://code.google.com/p/zemberek/source/list ).  Her zamanki gibi kodu ve kutuphaneyi ( http://code.google.com/p/zemberek/downloads/list ) adresinden indirebilirsiniz. Serkan, Mehmet ve emegi gecen herkese tesekkurler.