예제 #1
0
        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);
        }
예제 #2
0
  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;
 }
예제 #3
0
 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;
 }
예제 #4
0
        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;
    }
예제 #7
0
 public TurkceHarf sesliBelirleAE(HarfDizisi dizi)
 {
     return(sesliBelirleAE(dizi.sonSesli()));
 }
예제 #8
0
        public TurkceHarf sesliBelirleIU(HarfDizisi dizi)
        {
            TurkceHarf sonSesli = dizi.sonSesli();

            return(sesliBelirleIU(sonSesli));
        }
예제 #9
0
 public void testSonSesli()
 {
     Assert.AreEqual(dizi1.sonSesli(), alfabe.harf('e'), "Yanlis sonsesli " + dizi1.sonSesli().charDeger());
 }
예제 #10
0
 public TurkceHarf sesliBelirleAE(HarfDizisi dizi) {
     return sesliBelirleAE(dizi.sonSesli());
 }
예제 #11
0
 public TurkceHarf sesliBelirleIU(HarfDizisi dizi) {
     TurkceHarf sonSesli = dizi.sonSesli();
     return sesliBelirleIU(sonSesli);
 }