private String getDuzMetinSozlukForm(Kok kok) { //icerik olarak icerigin varsa asil halini yoksa normal kok icerigini al. String icerik = kok.icerik(); if (kok.asil() != null) { icerik = kok.asil(); } StringBuilder res = new StringBuilder(icerik); res.Append(" "); // Tipi ekleyelim. if (kok.tip() == KelimeTipi.YOK) { logger.Warn("tipsiz kok:" + kok); return(res.ToString()); } res.Append(kok.tip().ToString()); res.Append(" "); res.Append(getOzellikString(kok.ozelDurumDizisi())); return(res.ToString()); }
public String[] ozelDurumUygula(Kok kok) { //kok icinde ozel durum yok ise cik.. if (!kok.ozelDurumVarmi()) { return(new String[0]); } HarfDizisi hdizi = new HarfDizisi(kok.icerik(), alfabe); IList degismisIcerikler = new ArrayList(1); //ara sesli dusmesi nedeniyle bazen yapay oarak kok'e ters sesli etkisi ozel durumunun eklenmesi gerekir. // nakit -> nakde seklinde. normal kosullarda "nakda" olusmasi gerekirdi. bool eskiSonsesliInce = false; if (kok.ozelDurumIceriyormu(TurkceKokOzelDurumTipi.ISIM_SESLI_DUSMESI)) { eskiSonsesliInce = hdizi.sonSesli().inceSesliMi(); } bool yapiBozucuOzelDurumvar = false; //ters sesli ozel durumu yapi bozucu ama sadece seslinin tipini degistirdiginden //islemeye gerek yok. if (kok.ozelDurumDizisi().Length == 1 && kok.ozelDurumIceriyormu(TurkceKokOzelDurumTipi.TERS_SESLI_EK)) { return(new String[0]); } // kok uzerindeki ozel durumlar basta sona taranip ozel durum koke uygulaniyor. foreach (KokOzelDurumu _ozelDurum in kok.ozelDurumDizisi()) { // kucultme ozel durumunda problem var, cunku kok'te hem kucultme hem yumusama uygulaniyor. if (_ozelDurum == null) { //Console.Write("kok = " + kok); //Environment.Exit(-1); logger.Warn("null ozle durum!. Kok:" + kok); return(new String[0]); } if (!_ozelDurum.Equals(ozelDurum(TurkceKokOzelDurumTipi.KUCULTME))) { _ozelDurum.uygula(hdizi); } if (_ozelDurum.yapiBozucumu()) { yapiBozucuOzelDurumvar = true; } } // ara sesli dusmesi durumunda dusen sesi ile dustukten sonra olusan seslinin farkli olmasi durumunda // kok'e bir de ters sesli ek ozel durumu ekleniyor., if (kok.ozelDurumIceriyormu(TurkceKokOzelDurumTipi.ISIM_SESLI_DUSMESI) || kok.ozelDurumIceriyormu(TurkceKokOzelDurumTipi.FIIL_ARA_SESLI_DUSMESI)) { if (!hdizi.sonSesli().inceSesliMi() && eskiSonsesliInce) { kok.ozelDurumEkle(ozelDurumlar[TurkceKokOzelDurumTipi.TERS_SESLI_EK]); } } if (yapiBozucuOzelDurumvar) { degismisIcerikler.Add(hdizi.ToString()); } if (kok.ozelDurumVarmi() && kok.ozelDurumIceriyormu(TurkceKokOzelDurumTipi.KUCULTME) && kok.ozelDurumIceriyormu(TurkceKokOzelDurumTipi.SESSIZ_YUMUSAMASI)) { HarfDizisi tempDizi = new HarfDizisi(kok.icerik(), alfabe); ozelDurum(TurkceKokOzelDurumTipi.KUCULTME).uygula(tempDizi); degismisIcerikler.Add(tempDizi.ToString()); } // yani ozel durumlar eklenmis olabileceginden koke ods'u tekrar koke esle. String[] tempArr = new String[degismisIcerikler.Count]; degismisIcerikler.CopyTo(tempArr, 0); return(tempArr); }