29 Kasım 2006

Kelime istatistikleri

Biraz da kelime istatistiklerine göz atalım. Sonuçlar Yine aynı 5 milyon kelimelik test kümesi üzerinden alındı.
Önce genel istatistikler:

Toplam kelime sayısı: 5160619
Toplam isim sayısı: 2785055 Oran: %53,967 Ortalama Boy : 6,184
Toplam sıfat sayısı: 269701 Oran: %5,226
Toplam fiil sayısı: 1414014 Oran: %27,400 Ortalama Boy : 7,645
Toplam Sayi sayısı: 232832 Oran: %4,512
Toplam kok sayısı: 14531
Toplam isim kök sayısı: 11755 Oran: %80,896
Toplam sıfat kök sayısı: 570 Oran: %3,923
Toplam fiil kök sayısı: 2068 Oran: %14,232

Görüldüğü gibi 5 milyon Türkçe kelime için 14531 kök kullanılmış, Bu rakam kullanılan metinlerin çeşitliliği ve miktarı arttıkça daha da büyüyecektir, ancak Zemberek'in yaklaşık 22.000 kök, 6000 isim ve bir kaç bin özel isim köklerini tanıdığını hatırlatmakta fayda var.
Dikkati çeken bir başka nokta da isimlerin uzunluğunun yaklaşık 6.1, fiillerin ise 7.6 olması. Eklemeli dillerde özellikle fiillerin eklerle büyüdüğü düşünülünce bu normal bir durum.

Peki kök kelimelere kaç ek ulanıyor? işte oranlar:


0 adet ek'e sahip kelime sayısı: 2263846 Oran: %43,868
1 adet ek'e sahip kelime sayısı: 1441162 Oran: %27,926
2 adet ek'e sahip kelime sayısı: 1014500 Oran: %19,658
3 adet ek'e sahip kelime sayısı: 353383 Oran: %6,848
4 adet ek'e sahip kelime sayısı: 62974 Oran: %1,220
5 adet ek'e sahip kelime sayısı: 8965 Oran: %0,174
6 adet ek'e sahip kelime sayısı: 1137 Oran: %0,022
7 adet ek'e sahip kelime sayısı: 115 Oran: %0,002
8 adet ek'e sahip kelime sayısı: 6 Oran: %0,000
9 adet ek'e sahip kelime sayısı: 0 Oran: %0,000

En çok kullanılan ilk 20 kelime:

1. [ bir ] Oran: % 3,348 Kapsama: % 3,348
2. [ ve ] Oran: % 2,319 Kapsama: % 5,667
3. [ bu ] Oran: % 1,353 Kapsama: % 7,019
4. [ de ] Oran: % 0,794 Kapsama: % 7,813
5. [ da ] Oran: % 0,757 Kapsama: % 8,570
6. [ için ] Oran: % 0,670 Kapsama: % 9,240
7. [ daha ] Oran: % 0,524 Kapsama: % 9,764
8. [ ama ] Oran: % 0,520 Kapsama: % 10,284
9. [ o ] Oran: % 0,515 Kapsama: % 10,799
10. [ gibi ] Oran: % 0,496 Kapsama: % 11,295
11. [ dedi ] Oran: % 0,480 Kapsama: % 11,774
12. [ çok ] Oran: % 0,474 Kapsama: % 12,248
13. [ ne ] Oran: % 0,457 Kapsama: % 12,705
14. [ sonra ]Oran: % 0,440 Kapsama: % 13,145
15. [ kadar ]Oran: % 0,399 Kapsama: % 13,544
16. [ diye ] Oran: % 0,391 Kapsama: % 13,935
17. [ her ] Oran: % 0,353 Kapsama: % 14,288
18. [ olan ] Oran: % 0,318 Kapsama: % 14,606
19. [ ki ] Oran: % 0,265 Kapsama: % 14,871
20. [ olarak ] Oran: % 0,259 Kapsama: % 15,130

En çok kullanılan ilk 20 kök ve türemiş hallerinin ortalama uzunluğu. Aslında Zemberek bu köklere eklenen eklerin de istatistiğini çıkarıyor ama şimdilik ortalığı fazla karıştırmayalım.

1. [ bir ] Oran : %3,403 Ortalama kelime uzunluğu : 3,044
2. [ ol ] Oran : %2,438 Ortalama kelime uzunluğu : 6,487
3. [ ve ] Oran : %2,319 Ortalama kelime uzunluğu : 2,000
4. [ bu ] Oran : %1,823 Ortalama kelime uzunluğu : 2,899
5. [ de ] Oran : %1,576 Ortalama kelime uzunluğu : 3,513
6. [ et ] Oran : %0,891 Ortalama kelime uzunluğu : 6,951
7. [ için ] Oran : %0,764 Ortalama kelime uzunluğu : 4,242
8. [ da ] Oran : %0,757 Ortalama kelime uzunluğu : 2,001
9. [ ben ] Oran : %0,658 Ortalama kelime uzunluğu : 4,019
10. [ o ] Oran : %0,587 Ortalama kelime uzunluğu : 1,166
11. [ kendi ] Oran : %0,575 Ortalama kelime uzunluğu : 7,398
12. [ yap ] Oran : %0,536 Ortalama kelime uzunluğu : 8,268
13. [ gibi ] Oran : %0,536 Ortalama kelime uzunluğu : 4,242
14. [ daha ] Oran : %0,528 Ortalama kelime uzunluğu : 4,013
15. [ gel ] Oran : %0,523 Ortalama kelime uzunluğu : 6,969
16. [ ama ] Oran : %0,521 Ortalama kelime uzunluğu : 3,001
17. [ ne ] Oran : %0,504 Ortalama kelime uzunluğu : 2,293
18. [ çok ] Oran : %0,491 Ortalama kelime uzunluğu : 3,117
19. [ şey ] Oran : %0,481 Ortalama kelime uzunluğu : 4,154
20. [ sonra] Oran : %0,478 Ortalama kelime uzunluğu : 5,217

En çok kullanılan kelime ikililerinin ilk yirmisi:

1. bir-şey (6921)
2. ya-da (5599)
3. bir-şekilde (3578)
4. büyük-bir (3451)
5. başka-bir (3205)
6. ne-kadar (2885)
7. diye-sordu (2828)
8. ve-bu (2598)
9. o-kadar (2367)
10. böyle-bir (2265)
11. belki-de (2238)
12. ben-de (2134)
13. o-zaman (2019)
14. bir-süre (2009)
15. ve-bir (1913)
16. bu-kadar (1900)
17. bir-an (1886)
18. değil-mi (1861)
19. hem-de (1833)
20. hiçbir-şey (1790)
21. her-zaman (1772)
22. o-da (1757)
23. ama-bu (1667)
24. gibi-bir (1659)
25. daha-da (1603)

NZemberek

Mert Derman (spinodal) ve Tankut Tekeli (bioLogic) adli arkadaslar Zemberek projesinin C# hali uzerinde calismaya baslamis. Ilgilenenler NZemberek adli projeyi takip edebilir. Henuz kod tamamlanmamis olsa da hizla ilerlediklerini soyleyebilirim (C# dil olarak Java'ya ne kadar benzer tahmin edersiniz.). Sagolsun arkadaslar kod tasima islemi sirasinda bir de Zemberek hatasini duzeltmis. Gonul isterdi ki Zemberege'de katilim Java yonunden olsun ama ne yapalim. .Net uzerinde dogrudan calisacak bir haline ihtiyac varsa neden olmasin. Muhtemelen tasima kutuphanelerinin genel bas agrisi olan senkronizasyon sorunu Zemberek farkli alanlara dogru kaymaya basladiginda yasanacaktir. Umarim ustesinden gelmeyi basarirlar.

Yolun basi

Az once Turkce NLP konusundaki yazilmis bazi makalelere goz gezdirdim ( Ornegin Kemal Oflazer'in yayinlari'nin bir kismi ). NLP konusunda ozellikle 2000 sonrasinda Turkiye'de gercekten cok miktarda calisma yapilmis. Bunlardan asil ilgimi ceken ise TOY adindaki calisma. Bu calismayi kismen okuyunca Zemberegin aslinda acik kod konusunda ilk ve tek oldugu konusunda yanildigimizi dusunmeye basladim. Cunku Bogazici Univeritesinde yapilan calismalarin cogu temel morfolojik analiz icin Ozlem Cetinoglu'nun 2001 yilindaki "A Prolog Based Natural Language Processing Infrastructure for Turkish" calismasinda uretilen Prolog tabanli bir yapisal cozumleyici ve ayni calismadaki cesitli yardimci araclari kullaniyor. Anladigim kadari ile acik kodlu bir calisma imis ancak bir turlu kodu bulamadim. Bu calisma sadece yapisal cozumleme degil cumle cozumlemesi ve insan-makine iletisimi mekanizmasini da iceriyor. Yapisal cozumleyici bolumunu kismen okudum, zemberek ile benzerlikleri var. Ornegin kok bulmaya dayali soldan-saga cozumleme yontemini kullaniyorlar, yalniz ek cozumlemesi icin Oflazerin sonlu durum makinesinin benzeri ama daha gelismis bir mekanizma kullaniyorlar. Yalniz lexicon giris yapilarini biraz karmasik buldum. Ornein bir koku ifade etmek icin su sekilde bir girdi yapilmis:

tr_morph_entry('FiilKök',[[u,y,u],[type(verb),sem(D^Loc^A
gent^sleep_uyu(EvNo,Agent,Loc,[B,E,D,U],Tense,AuxTense,ST2))]
],_,_,_,u,u,ok).


Elbetteki burada sade kok bilgisinden baska verilerde var ama buyuk bir kumenin olusturulmasi iyi bir arayuz olmadan bu sekilde zor olurdu saniyorum.

"A Natural Language Processing Infrastructure for Turkish" adli makalede bu yapinin nasil gelistigi ve bunun uzerine nasil uygulamalarin gelistirildigi anlatiliyor. Ornegin TOYAgent calismasi ile sisteme Prolog bilgisi olmadan girdi yapilmasi saglanmis, Turkceden SQL ve Java kod uretimi gibi pek cok calismalari yapilmis. Henuz kodu bulamasam da "acik kod" sozu gectiginden bir yerlerde olmasi gerktigini saniyorum. Umuyorum ki lisansi herkesin ve her tur uygulamaya uygun bir seydir ki -belki- biz de faydalanabiliriz.

Sonucta onceden bildigim ve su an iyice anladigim su ki, Zemeberek ile daha yolun en basindayiz, ve hedefimiz cok daha oteleri olmali. Ayni hedefte olan ama cok daha otedeki TOY calismasinin da otesine de gecebilmeliyiz. Bu nedenle yeni calismalarin ilk ayagi olarak cok kelimeli kavramlarin sisteme eklenmesi konusunda ilk ciddi calismalara baslamak istiyorum. Bu konuda Oflazer, Cetinoglu ve Say'in in "Integrating Morphology with Multi-word Expression Processing in Turkish" calismasini okudum,bana yeni fikirler verdi, uzerinde zaten uzunca suredir dusunuyordum cok iyi bir referans oldu. Umuyorum o calismayi da goz onune alarak bir baslangic yapabiliriz.

28 Kasım 2006

Heceler..

Hece istatistiklerine bakınca farkettim, "Bir kama ya da bir lale dedi" cümlesiyle Türkçedeki tüm hece kullanımlarının yaklaşık %15 'ini kapsamış oluyorsunuz.
Bir de yorumları anonim kullanıcılara da açtım.

27 Kasım 2006

İstatistikler

Ahmet, Bir önceki yazısında hecelerden bahsetmiş ve istatistikleri ile ilgili bir şeyler yazabileceğimi söylemişti, ben de önceden 5 milyon kelimelik bir yığın kitap ve doküman üzerinde zemberek ile yapmış olduğum analizin sonuçlarından enteresan bir şeyleri buraya yazayım. Saat tutmadım ama tüm dokümanların işlenip istatistiklerinin çıkarılması zannediyorum 10 dakika kadar sürdü. Hecelerden başka pek çok şeyin istatistik bilgisi hesaplanıyor ama konumuz hece olduğu için sadece o konudakilerden bahsedeceğim. Kullanılan metinler genelde roman ağırlıklı.

İlk 50 hece, oranları ve bu hecelerin tüm metnin yüzde kaçını kapladığı bilgisi. Buradaki İlginç nokta, Türkçedeki en çok kullanılan ilk 50 hecenin tüm hecelerin yaklaşık %50 sini kapsaması.


0. la [350564] %2,534 Toplam: %2,534
1. le [309620] %2,238 Toplam: %4,772
2. de [288659] %2,087 Toplam: %6,859
3. di [233585] %1,688 Toplam: %8,547
4. da [230216] %1,664 Toplam: %10,211
5. ya [211464] %1,529 Toplam: %11,740
6. bir [203331] %1,470 Toplam: %13,210
7. ma [200948] %1,453 Toplam: %14,662
8. a [193558] %1,399 Toplam: %16,062
9. ka [180994] %1,308 Toplam: %17,370
10. o [171394] %1,239 Toplam: %18,609
11. i [163024] %1,178 Toplam: %19,787
12. ra [160277] %1,159 Toplam: %20,946
13. ri [159065] %1,150 Toplam: %22,096
14. ne [154220] %1,115 Toplam: %23,211
15. ve [154006] %1,113 Toplam: %24,324
16. du [136266] %0,985 Toplam: %25,309
17. na [128896] %0,932 Toplam: %26,241
18. dı [128194] %0,927 Toplam: %27,167
19. bi [126996] %0,918 Toplam: %28,085
20. rı [124232] %0,898 Toplam: %28,983
21. me [123721] %0,894 Toplam: %29,878
22. bu [121706] %0,880 Toplam: %30,757
23. ni [119735] %0,866 Toplam: %31,623
24. ye [117984] %0,853 Toplam: %32,476
25. ki [116153] %0,840 Toplam: %33,315
26. li [114727] %0,829 Toplam: %34,145
27. yor [111021] %0,803 Toplam: %34,947
28. nı [105024] %0,759 Toplam: %35,706
29. ta [104862] %0,758 Toplam: %36,464
30. si [104400] %0,755 Toplam: %37,219
31. lar [102580] %0,742 Toplam: %37,961
32. sa [101628] %0,735 Toplam: %38,695
33. re [101579] %0,734 Toplam: %39,429
34. ti [100476] %0,726 Toplam: %40,156
35. ha [94019] %0,680 Toplam: %40,835
36. ge [92298] %0,667 Toplam: %41,503
37. sı [90844] %0,657 Toplam: %42,159
38. ba [90729] %0,656 Toplam: %42,815
39. tı [88498] %0,640 Toplam: %43,455
40. te [85577] %0,619 Toplam: %44,073
41. e [84259] %0,609 Toplam: %44,682
42. ce [84198] %0,609 Toplam: %45,291
43. lı [82636] %0,597 Toplam: %45,888
44. ler [81439] %0,589 Toplam: %46,477
45. den [75776] %0,548 Toplam: %47,025
46. dan [71416] %0,516 Toplam: %47,541
47. nu [69442] %0,502 Toplam: %48,043
48. ol [69318] %0,501 Toplam: %48,544
49. se [66924] %0,484 Toplam: %49,028
50. ğı [64872] %0,469 Toplam: %49,497

Peki toplam kaç tür hece var? Ahmet'in son değişiklikleri bu istatistiklere yansımamıştı, ama rakamlar çok değişmeyecektir. 5 milyon kelimede toplam 2629 çeşit hece kullanılmış.

Son 15-20 hece de aşağıda, hepsi de birer kez kullanılmış.

2604. hınk
2605. tov
2606. feş
2607. dink
2608. föl
2609. bad
2610. söl
2611. volt
2612. sent
2613. most
2614. uk
2615. büv
2616. mirt
2617. zöl
2618. kunt
2619. çoz
2620. şüf
2621. ask
2622. cul
2623. ğılt
2624. şeş
2625. ging
2626. pum
2627. nant
2628. uş


Hece ikilileri de birbirini seven heceleri anlamamızı sağlıyor. En çok kullanılan hece ikilileri:

1. la-rı (83637)
2. le-ri (80086)
3. yor-du (48868)
4. i-çin (47840)
5. la-rın (35239)
6. o-la (29695)
7. da-ha (28857)
8. ken-di (28777)
9. a-ma (28459)
10. ol-du (28360)
11. du-ğu (27988)
12. le-rin (27699)
13. de-di (27698)
14. gi-bi (26124)
15. son-ra (24660)
16. di-ye (24467)
17. ma-sı (23738)
18. ma-ya (23494)
19. ri-ni (21702)
20. a-ra (21637)
21. di-ği (20969)
22. ka-dar (20887)
23. ri-ne (19632)
24. dı-ğı (19525)
25. ol-ma (19234)
26. rı-nı (18957)
27. la-dı (18792)
28. bi-le (18653)
29. o-lan (18142)
30. i-le (17812)
31. da-ki (17732)
32. me-si (17462)
33. za-man (16875)
34. me-ye (16708)
35. sın-da (16088)
36. ğı-nı (16027)
37. la-rak (15468)
38. de-ğil (15464)
39. yo-rum (15442)
40. ği-ni (15418)


Peki hece olup olmadığına bakmaksızın ikili harf gruplarının oranı nedir? Buradaki enteresan nokta ise 5 milyon kelimede sadece 783 adet ikili harf grubunun olması. İlk yirmisi ve son beşi aşağıdaki gibi:

1. [ la ]
2. [ ar ]
3. [ er ]
4. [ le ]
5. [ bi ]
6. [ in ]
7. [ nd ]
8. [ an ]
9. [ ka ]
10. [ de ]
11. [ ın ]
12. [ ma ]
13. [ ya ]
14. [ il ]
15. [ al ]
16. [ da ]
17. [ ra ]
18. [ rd ]
19. [ en ]
20. [ di ]
...
...
779. [ zt ]
780. [ çâ ]
781. [ îp ]
782. [ dh ]
783. [ ıo ]

Şimdilik bu kadar. Bir sonraki mesajda kelime istatistikleri ile ilgili ilginç noktalardan bahsedeceğim.

24 Kasım 2006

Heceleme konusunda

Gecenlerde Zemberek oncesi donemlerde epeyce mesajlastigimiz bir arkadasin (Muzmin Anonim) heceleme konusundaki bir yazisini okudum. Ilginc bir yazi, uzunca da bir yorum yazdim orada. bi konudaki goruslerim su sekilde:

Bazi kelimelerin Turkce icin nasil hecelenecegi halen acikliga kavusmus degil. "tren, stetoskop, strateji" gibi. Konusma aninda ister istemez "tren" kelimesini duraklama ile cikariyoruz "t(ı)-ren" seklinde. bu nedenle uygulama acisindan belki bu kelimelerin ozel sekilde tı'-ren seklinde farkli bir ı harfi turetip hecelenmesine olumsuz bakmiyorum. Zemberek su anda kismen bu tur heceleme islemini yapiyor.

Heceleme ne ise yarar? Yazida da bahsi gectigi gibi pratikte hecelemenin cesitli kullanim amaclari olabilir. Oncelikle herkesin bildigi kelimelerin satir sonunda bolunmesi. Artik cok kullanilmasa da bu ozellik tum kelime islemci uygulamalarinda mevcut. Onemli bir kullanim yeri ses-yazi, yazi-ses donusumunde kullanilabilir . Tabi en iyisi bu calisma icin vurgu bilgisi ile birlikte kullanimi. Bu konudaki bir calisma sabanci universitesinde yapildi saniyorum. Suradaki sayfadan "sessel gosterim" secenegini deneyebilirsiniz. Gerci sayfa pek iyi calismiyor ve bilmiyorum neden "bmp" resim kullanilmis dugmeler icin.. Baska bir kullanimi bilgisayarla yapilan kelime denetleme islemlerinde kelimenin dentlenirligini onden test etmek icin bir performans araci olarak kullanimi. Bu konuda bastaki baglantidaki yazar ile cesitli nedenlerden hem fikir degilim.

Zemberek icerisinde bizim de basit bir heceleme mekanizmamiz var. algoritma basit, geri dogru tarama yapip sondaki olasi heceyi bulmaya calisiyor. Takildigimiz iki nokta vardi, bazi dort harfli (yazar gibi sesli=a, sessiz=z dersek) "zazz" turu heceler Turkcede ucuncu sessiz sadece belli harflerde ise ortaya cikiyor ('l', 'r', 'y', 'p', 'n' ve 's' harfleri). Ornek kelimeler: "kalp, fark, ebeveyn, kask, cenk, rapt" . Biz de sadece bu sesizler icin zazz turu olusumlari kaubl ettik. Belki bu kurali genellestirmek daha dogru olurdu ('yazk' gibi bir heceyi de kullanimi olmasada kabul etmek pekala mumkun.). zzaz turu olusumlari ise simdilik kabul etmiyoruz, fakat nedense "zza" turu hecelere izin vermisiz. Bir ara kodu inceleyip zzaz turu hecelere de izin verebiliriz.

Turkiye Turkcesi icin heceleyici kodunu suradan inceleyebilir, ayrica Zemberek demo sitesinden test edebilirsiniz. Sonraki bir yazida belki Mehmet hece ile ilgili istatistikleri yazabilir.