public HarfDizisi cozumlemeIcinEkUret(HarfDizisi ulanacak, HarfDizisi giris, List <EkUretimBileseni> bilesenler) { HarfDizisi sonuc = new HarfDizisi(4); TurkceHarf sonSesli = ulanacak.sonSesli(); for (int i = 0; i < bilesenler.Count; i++) { EkUretimBileseni ekUretimBileseni = bilesenler[i]; TurkceHarf harf = ekUretimBileseni.harf(); switch (ekUretimBileseni.kural()) { case UretimKurali.HARF: sonuc.ekle(harf); break; case UretimKurali.KAYNASTIR: if (ulanacak.sonHarf().sesliMi()) { sonuc.ekle(harf); } break; case UretimKurali.SERTLESTIR: if (ulanacak.sonHarf().sertMi()) { sonuc.ekle(harf.sertDonusum()); } else { sonuc.ekle(harf); } break; case UretimKurali.SESLI_AE: if (i == 0 && ulanacak.sonHarf().sesliMi()) { break; } else { sonSesli = sesliUretici.sesliBelirleAE(sonSesli); sonuc.ekle(sonSesli); } break; case UretimKurali.SESLI_IU: if (i == 0 && ulanacak.sonHarf().sesliMi()) { break; } else { sonSesli = sesliUretici.sesliBelirleIU(sonSesli); sonuc.ekle(sonSesli); } break; } } return(sonuc); }
public HarfDizisi cozumlemeIcinEkUret(HarfDizisi ulanacak, HarfDizisi giris, List<EkUretimBileseni> bilesenler) { HarfDizisi sonuc = new HarfDizisi(4); TurkceHarf sonSesli = ulanacak.sonSesli(); for (int i = 0; i < bilesenler.Count; i++) { EkUretimBileseni ekUretimBileseni = bilesenler[i]; TurkceHarf harf = ekUretimBileseni.harf(); switch (ekUretimBileseni.kural()) { case UretimKurali.HARF: sonuc.ekle(harf); break; case UretimKurali.KAYNASTIR: if (ulanacak.sonHarf().sesliMi()) sonuc.ekle(harf); break; case UretimKurali.SERTLESTIR: if (ulanacak.sonHarf().sertMi()) sonuc.ekle(harf.sertDonusum()); else sonuc.ekle(harf); break; case UretimKurali.SESLI_AE: if (i == 0 && ulanacak.sonHarf().sesliMi()) break; else { sonSesli = sesliUretici.sesliBelirleAE(sonSesli); sonuc.ekle(sonSesli); } break; case UretimKurali.SESLI_IU: if (i == 0 && ulanacak.sonHarf().sesliMi()) break; else { sonSesli = sesliUretici.sesliBelirleIU(sonSesli); sonuc.ekle(sonSesli); } break; } } return sonuc; }
public override HarfDizisi cozumlemeIcinUret(Kelime kelime, HarfDizisi giris, HarfDizisiKiyaslayici kiyaslayici) { TurkceHarf son = kelime.sonHarf(); if(son.sesliMi()) return new HarfDizisi(0); HarfDizisi sonuc = new HarfDizisi(); if (kelime.kok().ozelDurumIceriyormu(TurkceKokOzelDurumTipi.FIIL_ARA_SESLI_DUSMESI)) { //eger ara sesli dusmesi olmussa eklenecek seslinin dusen sesliye gore //belirlenmesi gerekir. yani, "kavurmak" koku ve "kavrulmuS" girisini dusunelim, //ara sesli dusmesi ozel durumu nedeniyle "u" harfi kokten duserek "kavr" haline //gelir. Ancak koke bu haliyle edilgenlik ekini eklemeye kalkarsak "kavrIlmIS" //seklinde yanlis bir kelime ortaya cikardi. Bu nedenle burada dusen eke gore hangi // harfin eklenecegi belirleniyor. HarfDizisi kok = new HarfDizisi(kelime.kok().icerik(), alfabe); TurkceHarf kokAsilSesli = kok.sonSesli(); sonuc.ekle(sesliUretici.sesliBelirleIU(kokAsilSesli)); } else sonuc.ekle(sesliUretici.sesliBelirleIU(kelime.icerik())); if (son.Equals(alfabe.harf('l'))) sonuc.ekle(alfabe.harf('n')); else sonuc.ekle(alfabe.harf('l')); return sonuc; }
public override HarfDizisi cozumlemeIcinUret(Kelime kelime, HarfDizisi giris, HarfDizisiKiyaslayici kiyaslayici) { TurkceHarf son = kelime.sonHarf(); if (son.sesliMi()) { return(new HarfDizisi(0)); } HarfDizisi sonuc = new HarfDizisi(); if (kelime.kok().ozelDurumIceriyormu(TurkceKokOzelDurumTipi.FIIL_ARA_SESLI_DUSMESI)) { //eger ara sesli dusmesi olmussa eklenecek seslinin dusen sesliye gore //belirlenmesi gerekir. yani, "kavurmak" koku ve "kavrulmuS" girisini dusunelim, //ara sesli dusmesi ozel durumu nedeniyle "u" harfi kokten duserek "kavr" haline //gelir. Ancak koke bu haliyle edilgenlik ekini eklemeye kalkarsak "kavrIlmIS" //seklinde yanlis bir kelime ortaya cikardi. Bu nedenle burada dusen eke gore hangi // harfin eklenecegi belirleniyor. HarfDizisi kok = new HarfDizisi(kelime.kok().icerik(), alfabe); TurkceHarf kokAsilSesli = kok.sonSesli(); sonuc.ekle(sesliUretici.sesliBelirleIU(kokAsilSesli)); } else { sonuc.ekle(sesliUretici.sesliBelirleIU(kelime.icerik())); } if (son.Equals(alfabe.harf('l'))) { sonuc.ekle(alfabe.harf('n')); } else { sonuc.ekle(alfabe.harf('l')); } return(sonuc); }
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); }
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; }
public TurkceHarf sesliBelirleAE(HarfDizisi dizi) { return(sesliBelirleAE(dizi.sonSesli())); }
public TurkceHarf sesliBelirleIU(HarfDizisi dizi) { TurkceHarf sonSesli = dizi.sonSesli(); return(sesliBelirleIU(sonSesli)); }
public void testSonSesli() { Assert.AreEqual(dizi1.sonSesli(), alfabe.harf('e'), "Yanlis sonsesli " + dizi1.sonSesli().charDeger()); }
public TurkceHarf sesliBelirleAE(HarfDizisi dizi) { return sesliBelirleAE(dizi.sonSesli()); }
public TurkceHarf sesliBelirleIU(HarfDizisi dizi) { TurkceHarf sonSesli = dizi.sonSesli(); return sesliBelirleIU(sonSesli); }