Kelime Obekleri denemesi
Kelime obekleri (bilesik kelime, coklu kelime, kelime grubu da denilebilir, bu konuda tem bir isimlendirme var mi bilemiyorum. Tankut ve Mert obek demislerdi, begendim, genellikle onu kullaniyorum) uzerinde epeydir calismak istiyordum, ancak islerden ne yazik ki ancak biraz zaman ayirabildim. Oncelikli amac kelime obeklerinin cumle icerisinden tespiti. Bunu yapmak aslinda zor degil, ancak her NLP konusunda oldugu gibi, gene kayaya bilgi eksikligi konusunda carptim. Elimizde var olan obeklerin isaretlenmis bir derlemesinin bulunmasi gerekiyor.
Onceden de bahsi gecmisti, kelime obeklerinin farkli yapilari var. En cok karsilasilani genellikle kendi baslarina ayrik bir kavrami ifade eden [ Kok+ek kalibi, Kok+ek kalibi... ] seklindeki yapilar. Ornegin "abayi yakmak" -> [ aba AD + belirtme(yukleme) eki, yak FIIL + genel ] seklinde. Bu sekilde farkli ek gruplari ile kelime obeklerinin buyuk kismi isaretlenebilir. Kotu olan sey ise 40-50 bin civarinda (daha da fazla olabilir) bu sekil obegin bulunmasi. Bunlarin tamaminin elle tek kisi tarafindan isaretlenmesi mumkun degil. Bu isin bilgisayar tarafindan yari otomatik olarak koklerin tespiti ve ek kaliplarinin elle secilmesi bu konudaki izlenecek yontem olabilir. Hatta isin basinda sadece koklerin tespiti yeterli olacaktir.
Elimde dogru durust bilgi olmadigindan cok hos olmasa da TDK sitesinden bu bilgileri cekecek minik bir orumcek mekanizmasi yazmaya karar verdim. cektigim bilgileri sadece deney amaciyla kullanacagimdan umarim darilmazlar. Zemberek , Http Client ve Java 5 ThreadPool yapilarini kullanarak sozlukteki tum kokler icin sirayla ilgili URL'yi olusturup surekli olarak ayni anda 30 gorevi isletecek sekilde mekanizmayi baslattim (daha fazlasini isletseydim DoS saldirisi yapiliyor sanabilirlerdi belki). Gelen HTTP cevabindan bilesik kelimeleri ayiklama kolay olmadi, ama sonucta TDK sitesinden tum koklere karsilik dusen bilesik kelime deyim ve atasozlerini 3 saat gibi oldukca iyi oldugunu dusundugum bir surede indirdim.
Tabi is bitmiyor burada. gelen bilesik kelimelerin bir depoya atilmasi gerekiyor. Dosyadan bu bilesik kelimeleri okuyup kok bulucu ile koklerini kestirdim. Birden fazla sonucun ciktigi durumlarda hangisinin secilmesi gerektigini kestirmek tam olarak mumkun degil. Simdilik balta bir sekilde en uzun boylu koku sectim. Bu sekilde elimde tum kelime obeklerinin oldugu bir depo oldu. depo icinde istenilen bir ya da birden fazla kokun icinde gectigi tum obekleri bulacak baska bir mekanizma daha koydum ama henuz kullanilmiyor.. Normalde gercek uygulamada bellek tuketimi nedeniyle kelime obeklerinin nesne ya da ogmulu iliskisel bir veri tabaninda saklanilmasi daha mantikli . o konuda da denemem oldu ama lafi cok uzatmayayim.
Daha sonraki konu ise asil analiz. Sorun su. elimizde bir dizi kelime olsun: [w1, w2, ..., wn] bunun kok cozumlenmesinden elimizde en kotu ihtimalle [ [k11, k12.. k1m], [k21, k22... k2m],....,[kn1,kn2,..,knm] ] seklinde bir diziler dizisi ortaya cikacaktir. Sonrasi tum olasi ardisil kok dizilimlerinin kelime obekleri olusturup olusturmadigi akillica yazilmis bir algotma ile depodan bulunmasina bakiyor. simdilik sadece en uzun kokleri secerek [k1, k2,..., kn] diziside yer alabilecek kelime obeklerini bulan basit bir metod yazdim. Deney dizinindeki BasitKelimeObegiBulucu sinifini isleterek ornek cumlelerdeki obeklerin bulunmasini gozleyebilirsiniz. Tabiki cok fazla eksik var,yanlis kokler secildiginden obekleri tam bulamiyor.
abuk subuk bir ornek:
"Van kedisi tuhaf tuhaf bakıp postu sererek tası tarağı toplayan adama yardım etti."
Bulunan obek adaylari: [van|kedi , post|ser , tas|tarak , yardım|et]
Eksiklikler
- oncelikle obeklerin, ozellikle koklerin isaretlenmesi (etiketleme)
- ek sablonlairnin yapilairnin ortaya cikarilmasi. ve analizdeki gorevlerinin belirlenmesi.
- analizde koklerin tamaminin testi gerekiyor.
- sozlukte yer almayan bilesik kelime yapilarinin incelenmesi . (tekrarlama, fiil obekleri gibi. Ornegin: "abuk subuk", "gelip gelmedigini" gibi.)
- obeklerin disk uzerinde saklanmasi ve sorgusu.
- icinde bir kelimesi ayri olan ama ayni anlama gelen obekler (abayi sermek, postu sermek.. gibi)
Bu arada memleketten buraya doneli bir ay oldu, askerlik nedeniyle haftaya insallah tekrar donmem gerekiyor. :). gorusmek uzere.




3 yorum:
Merhabalar, Projenizi çok faydalı buldum tebrik ederim. Bloğunuzda iletişim bilgileri göremediğimden buraya yazıyorum. Bu projenizi Firefox da spellchecker olarak nasıl kullanabiliriz? Desteğiniz için teşekkür ederim.
http://www.hosmuhabbet.com
HoşMuhabbet ile ilgili herşey...
Teknoloji ve Internet hakkında hoş şeyler...
Selamlar,
Çalışmalarınızı ilgiyle izliyor ve sizi takdir ediyorum.
Acaba Zemberek içün tek başına (standalone) ve sunucu (server) olarak çeşitli platformlar için (win32, linux (debian, ubuntu, fedora vb), ve mac os x) paketler hazırlamayı düşünüyor musunuz?
Teşekkürler.
Efendim, Saygılarımla; Tebrik ederim, çok güzel bir çalışma emeğinize ve kaleminize sağlıklar dilerim. Ancak Birleşik kelime'den bahsederken buradaki bileşik sözcüğünün birleşik
şeklinde yazılması gerekiyor. İsterseniz TDK. da bakın. İyi çalışmalar.
Yorum Gönder