Esempio n. 1
0
        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);
        }