Zemberek ile kelime üretimi
Zemberek kütüphanesini kullanarak kelime üretimi yapmak mümkündür. Aşağıda çeşitli şekillerde farklı durumlarda kelime üretiminin nasıl yapılacağı kod örnekleri ile gösterilmiştir.
Örneklerde bir adet Zemberek nesnesinin üretildiği varsayılmıştır. Yalnız programın çalışması süresince bir kere Zemberek nesnesinin üretimi, mesela nesneye static bir değişken olarak ya da bir singleton üzerinden erişilmesi önerilir.
Zemberek zemberek = new Zemberek(new TurkiyeTurkcesi());
Ya da zemberek içerisindeki
KelimeUretici nesnesi üzerinden de aynı işlemler gerçekleştirilebilir.
KelimeUretici uretici = zemberek.kelimeUretici();
Üretim Için kullanılan iki metod vardır.
String kelimeUret(Kok kok, List<Ek> ekler)
String kelimeUret(Kok kok, Ek... ekler)
ilk metod içerisine bir kök ve Ek Listesi alırken ikinci metod kök ve istenilen sayıda Ek nesnesi alır. Eğer gönderilen ekler ile kelime üretilemezse, sadece kelimenin koku String olarak döner. aslında en azından KelimeUretici içerisine
boolean uretilebilirMi(Kok kok, Ek... ekler) metodunun konması makul olurdu.
Kelimenin çözülüp tekrar birleştirilmesi:
Amaç bir kelimenin önce çözümlenip daha sonra çözümleme içerisindeki kök ve ekler kullanılarak tekrar birleştirilmesidir.
Kelime[] cozumler = zemberek.kelimeCozumle("armudundur");
Kelime ilkCozum = cozumler[0];
System.out.println("Cozum:" + ilkCozum);
String uretim = zemberek.kelimeUret(ilkCozum.kok(), ilkCozum.ekler());
System.out.println("yeniden uretim sonucu:" + uretim);
Çıkış şu şekilde olacaktır:
Cozum: [ Kok: armut, ISIM ] Ekler: ISIM_SAHIPLIK_SEN_IN + ISIM_TANIMLAMA_DIR
yeniden uretim sonucu:armudundur
Kök ve Eklerin kullanıcı tarafından girilmesi:
Bu kez kök ve ek bilgisini biz girmiş olalım. Normalde kök nesnesini kendimiz oluşturabiliriz. Ama daha doğru olan yöntem kök bilgisinin zemberek nesnesi üzerinden sözlükten temin edilmesidir. Aşağıda olduğu gibi:
Sozluk kokler = zemberek.dilBilgisi().kokler();
Kok kok = kokler.kokBul("armut", KelimeTipi.ISIM);
Ayni sekilde Ekleri de zembrek icerisindeki EkYonetici uzerinden ek adlari kullanilarak almak mumkundur. Burada ek adlarinin bilinmesi biraz sorunlu olsa da kod icerisindeki
TurkceEkAdlari sinifindan yararlanilabilir. Asagida iki ornek yer almaktadir:
EkYonetici ekler= zemberek.dilBilgisi().ekler();
String uretilen= zemberek.kelimeUret(
armut,
ekler.ek(TurkceEkAdlari.ISIM_COGUL_LER),
ekler.ek(TurkceEkAdlari.ISIM_COGUL_LER));
System.out.println("uretim sonucu: " + uretilen);
Sonuc Su sekilde olacaktir:
uretim sonucu: armutlardan
Yukaridaki kod Java 5 ile gelen static impots ve yardimci bir metod yardimi ile su sekle donusturulebilir:
String uretilen= zemberek.kelimeUret(
armut, ekListesi(ISIM_COGUL_LER,ISIM_CIKMA_DEN));
Hatta daha da kolay kullanimli bir metod kullanici tarafindan yazilabilir:
private String uret(Kok kok, String... ekAdlari) {
List<Ek> ekler = new ArrayList<Ek>();
for (String s : ekAdlari)
ekler.add(zemberek.dilBilgisi().ekler().ek(s));
return zemberek.kelimeUret(kok, ekler);
}
Bu durumda ek adlari icin sadece String kullanmak yeterli olurdu. Ama bu yontem hataya daha meyillidir. Bu metod ile kullanim su sekilde olur:
String uretilen= uret( armut, "ISIM_COGUL_LER", "ISIM_CIKMA_DEN");
Sozlukte olmayan bir kelimenin uretilmesi
Bazi durumlarda Zemberek sozlugu icerisinde olmayan kokler ile uretim yapilmasi gerekebilir. Bu durumda Kok nesnesini kendimizin uretmesi gerekir.
Kok obama = new Kok("Obama", KelimeTipi.OZEL);
uretilen = zemberek.kelimeUret(obama, ekler.ek(TurkceEkAdlari.ISIM_YONELME_E));
System.out.println("Uretim sonucu: " + uretilen);
Bu durumda cikis:
Uretim sonucu: Obama'ya
olacaktir. Goruldugu gibi kok Ozel olarak belirtildiginden uygun sekilde kesme isareti de ekleniyor. Eger bu kokun sistem tarafindan programin diger alanlarinda da bilinmesi istenirse, kok zemberek sozlugune program yolu ile eklenir. Ama bu yeni kok, sadece programin calimasi suresince zemberek sozlugunde bulunacaktir.
Eger kok icerisinde bir ozel durum var ise bunun da kok olusturulduktan sonra eklenmesi gerekir.