예제 #1
0
        public void testDiziEkle()
        {
            HarfDizisi dizi2 = new HarfDizisi("ler", alfabe);

            dizi1.ekle(dizi2);
            Assert.AreEqual(dizi1.ToString(), "kalemler", "dizi1 ekleme problemi " + dizi1.ToString());
        }
예제 #2
0
        public void testToStringIndex()
        {
            HarfDizisi dizi = new HarfDizisi("merhaba", alfabe);

            Assert.AreEqual(dizi.ToString(4), "aba");
            Assert.AreEqual(dizi.ToString(0), "merhaba");
            Assert.AreEqual(dizi.ToString(7), "");
            Assert.AreEqual(dizi.ToString(-1), "");
            Assert.AreEqual(dizi.ToString(6), "a");
        }
예제 #3
0
        public void testHarfSil()
        {
            HarfDizisi kelime = new HarfDizisi("kedicikler", alfabe);

            kelime.harfSil(9);
            Assert.AreEqual(kelime.ToString(), "kedicikle");
            kelime.harfSil(0);
            Assert.AreEqual(kelime.ToString(), "edicikle");
            kelime.harfSil(3);
            Assert.AreEqual(kelime.ToString(), "ediikle");
        }
예제 #4
0
        public void testKirp()
        {
            HarfDizisi dizi = new HarfDizisi("merhaba", alfabe);

            dizi.kirp(5);
            Assert.AreEqual("merha", dizi.ToString());
            dizi.kirp(5);
            Assert.AreEqual("merha", dizi.ToString());
            dizi.kirp(0);
            Assert.IsTrue(dizi.Length == 0);
        }
예제 #5
0
        public void testAradanEkle()
        {
            HarfDizisi dizi = HarfDizisiYap("kale");
            HarfDizisi ek   = HarfDizisiYap("ku");

            dizi.ekle(2, ek);
            Assert.AreEqual(dizi.ToString(), "kakule");
            ek = HarfDizisiYap("kara");
            dizi.ekle(0, ek);
            Assert.AreEqual(dizi.ToString(), "karakakule");
            dizi.ekle(20, ek);//Bu satýrda hata atmalý
        }
예제 #6
0
        public void testHarfEkleHarf()
        {
            HarfDizisi dizi = new HarfDizisi("armut", alfabe);

            dizi.ekle(2, alfabe.harf('n'));
            Assert.AreEqual(dizi.ToString(), "arnmut");
            dizi.ekle(1, alfabe.harf('c'));
            Assert.AreEqual(dizi.ToString(), "acrnmut");
            dizi.ekle(0, alfabe.harf('s'));
            Assert.AreEqual(dizi.ToString(), "sacrnmut");
            dizi.ekle(8, alfabe.harf('a'));
            Assert.AreEqual(dizi.ToString(), "sacrnmuta");
        }
        private bool ozelDurumDenetle(Kelime kelime, HarfDizisi girisDizi, Ek ek, int tolerans)
        {
            if (!kelime.kok().yapiBozucuOzelDurumVarmi())
            {
                return(true);
            }
            HarfDizisi testKokIcerigi = kelime.kok().ozelDurumUygula(alfabe, ek);

            //if (log.isTraceEnabled()) log.trace("Ozel durum sonrasi:" + testKokIcerigi + "  ek:" + ek.getIsim());
            if (testKokIcerigi == null)
            {
                return(false);
            }
            if (MetinAraclari.isInSubstringEditDistance(testKokIcerigi.ToString(), girisDizi.ToString(), tolerans))
            {
                kelime.setIcerik(new HarfDizisi(testKokIcerigi));
                //if (log.isTraceEnabled()) log.trace("basari, kelime:" + kelime.icerik());
                return(true);
            }
            else
            {
                kelime.setIcerik(new HarfDizisi(kelime.kok().icerik(), alfabe));
            }
            //if (log.isTraceEnabled()) log.trace("kelime:" + kelime.icerik());
            return(false);
        }
예제 #8
0
        public void testAraSesliDusmesi()
        {
            HarfDizisi dizi = hd("burun");

            dilBilgisi.kokOzelDurumlari().ozelDurum("DUS").uygula(dizi);
            Assert.AreEqual("burn", dizi.ToString());
        }
예제 #9
0
        public void testCiftleme()
        {
            HarfDizisi dizi = hd("hat");

            dilBilgisi.kokOzelDurumlari().ozelDurum("CIFT").uygula(dizi);
            Assert.AreEqual("hatt", dizi.ToString());
        }
예제 #10
0
        public void testYumusama()
        {
            HarfDizisi dizi = hd("kitap");

            dilBilgisi.kokOzelDurumlari().ozelDurum("YUM").uygula(dizi);
            Assert.AreEqual("kitab", dizi.ToString());
        }
예제 #11
0
        public void testHarfDegistir()
        {
            HarfDizisi kelime = new HarfDizisi("kedicikler", alfabe);

            kelime.harfDegistir(0, alfabe.harf('c'));
            kelime.harfDegistir(3, alfabe.harf('a'));
            Assert.AreEqual(kelime.ToString(), "cedacikler");
        }
예제 #12
0
 public void uygula(HarfDizisi dizi)
 {
     String kelime = kokDonusum[dizi.ToString()];
     if (kelime != null)
     {
         dizi.sil();
         dizi.ekle(new HarfDizisi(kelime, alfabe));
     }
 }
예제 #13
0
        public void uygula(HarfDizisi dizi)
        {
            String kelime = kokDonusum[dizi.ToString()];

            if (kelime != null)
            {
                dizi.sil();
                dizi.ekle(new HarfDizisi(kelime, alfabe));
            }
        }
예제 #14
0
        /**
         * Gelen String'i turkce heceleme kurallarina gore hecelerine ayirir. Sonucta
         * heceleri bir liste icinde dondurur. Eger heceleme yapilamazsa bos liste doner.
         *
         * @param giris
         * @return sonHeceHarfSayisi String dizisi
         */
        public String[] hecele(String giris)
        {
            giris = alfabe.ayikla(giris);
            HarfDizisi kelime = new HarfDizisi(giris, alfabe);
            ArrayList  list   = new ArrayList(); //reverse kullanmak icin generics kullanmadim...

            while (kelime.Length > 0)
            {
                int index = heceBulucu.sonHeceHarfSayisi(kelime);
                if (index < 0)
                {
                    list.Clear();
                    return(new String[0]);
                }
                int basla = kelime.Length - index;
                list.Add(kelime.ToString(basla));
                kelime.kirp(basla);
            }
            list.Reverse();
            String[] retArr = new String[list.Count];
            list.CopyTo(retArr, 0);
            return(retArr);
        }
예제 #15
0
 public void testKirp()
 {
     HarfDizisi dizi = new HarfDizisi("merhaba", alfabe);
     dizi.kirp(5);
     Assert.AreEqual("merha", dizi.ToString());
     dizi.kirp(5);
     Assert.AreEqual("merha", dizi.ToString());
     dizi.kirp(0);
     Assert.IsTrue(dizi.Length == 0);
 }
예제 #16
0
 public void testHarfSil()
 {
     HarfDizisi kelime = new HarfDizisi("kedicikler", alfabe);
     kelime.harfSil(9);
     Assert.AreEqual(kelime.ToString(), "kedicikle");
     kelime.harfSil(0);
     Assert.AreEqual(kelime.ToString(), "edicikle");
     kelime.harfSil(3);
     Assert.AreEqual(kelime.ToString(), "ediikle");
 }
예제 #17
0
 public void testHarfDegistir()
 {
     HarfDizisi kelime = new HarfDizisi("kedicikler", alfabe);
     kelime.harfDegistir(0, alfabe.harf('c'));
     kelime.harfDegistir(3, alfabe.harf('a'));
     Assert.AreEqual(kelime.ToString(), "cedacikler");
 }
        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;
    }
예제 #20
0
        public void testSonHece()
        {
            HeceBulucu heceBulur = new TurkceHeceBulucu();

            String[]     strs = { "turk", "ara",   "sarta",  "siir",    "siiir",  "kanat", "kanaat",
                                  "yaptirt",  "artti", "arttir", "arttirt", "sirret", "siirt", "teleskop" };
            int[]        sonuclar = { 4, 2, 2, 2, 2, 3, 2,
                                      4,        2, 3, 4, 3, 3, 3 };
            HarfDizisi[] girisler = new HarfDizisi[strs.Length];
            for (int i = 0; i < strs.Length; i++)
            {
                girisler[i] = hd(strs[i]);
            }
            for (int i = 0; i < girisler.Length; i++)
            {
                HarfDizisi harfDizisi = girisler[i];
                Assert.AreEqual(heceBulur.sonHeceHarfSayisi(harfDizisi), sonuclar[i], harfDizisi.ToString());
            }
        }
예제 #21
0
 private bool ozelDurumDenetle(Kelime kelime, HarfDizisi girisDizi, Ek ek, int tolerans) {
     if (!kelime.kok().yapiBozucuOzelDurumVarmi())
         return true;
     HarfDizisi testKokIcerigi = kelime.kok().ozelDurumUygula(alfabe, ek);
     //if (log.isTraceEnabled()) log.trace("Ozel durum sonrasi:" + testKokIcerigi + "  ek:" + ek.getIsim());
     if (testKokIcerigi == null)
         return false;
     if (MetinAraclari.isInSubstringEditDistance(testKokIcerigi.ToString(), girisDizi.ToString(), tolerans)) {
         kelime.setIcerik(new HarfDizisi(testKokIcerigi));
         //if (log.isTraceEnabled()) log.trace("basari, kelime:" + kelime.icerik());
         return true;
     } else
         kelime.setIcerik(new HarfDizisi(kelime.kok().icerik(), alfabe));
     //if (log.isTraceEnabled()) log.trace("kelime:" + kelime.icerik());
     return false;
 }
예제 #22
0
    private IList<Kelime> coz(Kok kok, HarfDizisi kokDizi, HarfDizisi girisDizi, int tolerans) {

        Kelime kelime = new Kelime(kok, kokDizi);
        kelime.ekEkle(ekYonetici.ilkEkBelirle(kelime.kok()));
        BasitKelimeYigini kelimeYigini = new BasitKelimeYigini();

        List<Kelime> uygunSonuclar = new List<Kelime>();

        //analiz kelimesini kokler kokunden olustur.
        kelimeYigini.temizle();
        Ek bulunanEk = kelime.sonEk();

        int ardisilEkSirasi = 0;
        while (true) {
            //bulunan son ekten sonra gelebilecek eklerden siradakini al.
            Ek incelenenEk = bulunanEk.getArdisilEk(ardisilEkSirasi++);

            //siradaki ek yoksa incelenen ek yanlis demektir.
            // yigindan kelimenin onceki durumunu cek.
            if (incelenenEk == null) {
                //yigin bos ise sonuclar dondur.
                if (kelimeYigini.bosMu())
                    return uygunSonuclar;

                //kelimeyi ve bulunan eki onceki formuna donustur.
                BasitKelimeYigini.YiginKelime yiginKelime = kelimeYigini.al();
                kelime = yiginKelime.getKelime();
                bulunanEk = kelime.sonEk();
                ardisilEkSirasi = yiginKelime.getEkSirasi();
                continue;
            }

            //eger daha olusan kelime kok asamasinda ise (yani sadece YALIN eki eklenmisse)
            // ve kokun (kelime ile kok ayni ozel durumlara sahip) icinde bir ozel durum var ise
            // ozel durum denetlenir, yani kokun girilen ek ile degisip degismedigine bakilir.
            if (kelime.ekler().Count == 1 && kelime.kok().ozelDurumVarmi()) {
                if (!ozelDurumDenetle(kelime, girisDizi, incelenenEk, tolerans)) 
                {
                    if (logger.IsInfoEnabled) logger.Info("Ozel durum yanlis, ek:" + incelenenEk);
                    continue;
                }
            }

            //bazi eklerin olusumu, giris kelimesinin yapisina gore degisebilir.
            // ornegin giris "geleceGim" oldugu durumda gelecek zaman ekinin son harfinin
            // yumusamasi bilgisi ancak girise bakarak anlasilabilir. bu nedenle ek olusturma sirasinda giris
            // kullanilir

            HarfDizisi olusanEk = incelenenEk.cozumlemeIcinUret(kelime, girisDizi, null);
            //log.info("ek:" + incelenenEk + " olusum:" + olusanEk);
            if (olusanEk == null || olusanEk.Length == 0) {
                //log.info("bos ek.. " + incelenenEk);
                continue;
            }


            if (logger.IsInfoEnabled) logger.Info("Kok ve Olusan Ek:" + kelime.icerik() + " " + olusanEk);

            //Toleransli kiyaslama islemi burada yapiliyor. once gecici bir sekilde olusan kelimeye
            // olusan ek ekleniyor, ve giris ile toleransli kiyaslama yapiliyor. Eger kiyaslama
            // sonunda esik tolerans degeri asilmazsa dogru kabul edilip devam ediliyor.
            HarfDizisi olusum = new HarfDizisi(kelime.icerik());
            olusum.ekle(olusanEk);
            String olusumStr = olusum.ToString();
            if (logger.IsInfoEnabled) logger.Info("olusum:" + olusum);

            if (MetinAraclari.isInSubstringEditDistance(olusumStr, girisDizi.ToString(), tolerans) ||
                    MetinAraclari.inEditDistance(olusumStr, girisDizi.ToString(), tolerans)) {
                        kelimeYigini.koy((Kelime)kelime.Clone(), ardisilEkSirasi);
                ardisilEkSirasi = 0;
                // ek ekleneceginde yumusama yapilip yapilmayacagi belirleniyor.. aci
                if (olusanEk.harf(0).sesliMi()
                        && kelime.sonHarf().sertMi()
                        && kelime.ekler().Count > 1
                        && olusanEk.ilkHarf().sertDonusum()!=null) {
                    kelime.icerik().sonHarfYumusat();
                }
                kelime.icerikEkle(olusanEk);
                kelime.ekEkle(incelenenEk);
                olusumStr = kelime.icerikStr();
                if (logger.IsInfoEnabled) logger.Info("ekleme sonrasi olusan kelime: " + kelime.icerik());

                bulunanEk = incelenenEk;

                if (MetinAraclari.inEditDistance(olusumStr, girisDizi.ToString(), tolerans)) {
                    uygunSonuclar.Add((Kelime)kelime.Clone());
                    if (logger.IsInfoEnabled) logger.Info("uygun kelime:" + kelime.icerik());
                }
/*
                        TurkceHarf ekIlkHarf = giris.harf(kelime.boy());
                        if (ekIlkHarf == TurkceAlfabe.TANIMSIZ_HARF)
                            return false;*/

            }
        }
    }
예제 #23
0
 public void testToStringIndex()
 {
     HarfDizisi dizi = new HarfDizisi("merhaba", alfabe);
     Assert.AreEqual(dizi.ToString(4), "aba");
     Assert.AreEqual(dizi.ToString(0), "merhaba");
     Assert.AreEqual(dizi.ToString(7), "");
     Assert.AreEqual(dizi.ToString(-1), "");
     Assert.AreEqual(dizi.ToString(6), "a");
 }
예제 #24
0
 public void testHarfEkleHarf()
 {
     HarfDizisi dizi = new HarfDizisi("armut", alfabe);
     dizi.ekle(2, alfabe.harf('n'));
     Assert.AreEqual(dizi.ToString(), "arnmut");
     dizi.ekle(1, alfabe.harf('c'));
     Assert.AreEqual(dizi.ToString(), "acrnmut");
     dizi.ekle(0, alfabe.harf('s'));
     Assert.AreEqual(dizi.ToString(), "sacrnmut");
     dizi.ekle(8, alfabe.harf('a'));
     Assert.AreEqual(dizi.ToString(), "sacrnmuta");
 }
        private IList <Kelime> coz(Kok kok, HarfDizisi kokDizi, HarfDizisi girisDizi, int tolerans)
        {
            Kelime kelime = new Kelime(kok, kokDizi);

            kelime.ekEkle(ekYonetici.ilkEkBelirle(kelime.kok()));
            BasitKelimeYigini kelimeYigini = new BasitKelimeYigini();

            List <Kelime> uygunSonuclar = new List <Kelime>();

            //analiz kelimesini kokler kokunden olustur.
            kelimeYigini.temizle();
            Ek bulunanEk = kelime.sonEk();

            int ardisilEkSirasi = 0;

            while (true)
            {
                //bulunan son ekten sonra gelebilecek eklerden siradakini al.
                Ek incelenenEk = bulunanEk.getArdisilEk(ardisilEkSirasi++);

                //siradaki ek yoksa incelenen ek yanlis demektir.
                // yigindan kelimenin onceki durumunu cek.
                if (incelenenEk == null)
                {
                    //yigin bos ise sonuclar dondur.
                    if (kelimeYigini.bosMu())
                    {
                        return(uygunSonuclar);
                    }

                    //kelimeyi ve bulunan eki onceki formuna donustur.
                    BasitKelimeYigini.YiginKelime yiginKelime = kelimeYigini.al();
                    kelime          = yiginKelime.getKelime();
                    bulunanEk       = kelime.sonEk();
                    ardisilEkSirasi = yiginKelime.getEkSirasi();
                    continue;
                }

                //eger daha olusan kelime kok asamasinda ise (yani sadece YALIN eki eklenmisse)
                // ve kokun (kelime ile kok ayni ozel durumlara sahip) icinde bir ozel durum var ise
                // ozel durum denetlenir, yani kokun girilen ek ile degisip degismedigine bakilir.
                if (kelime.ekler().Count == 1 && kelime.kok().ozelDurumVarmi())
                {
                    if (!ozelDurumDenetle(kelime, girisDizi, incelenenEk, tolerans))
                    {
                        if (logger.IsInfoEnabled)
                        {
                            logger.Info("Ozel durum yanlis, ek:" + incelenenEk);
                        }
                        continue;
                    }
                }

                //bazi eklerin olusumu, giris kelimesinin yapisina gore degisebilir.
                // ornegin giris "geleceGim" oldugu durumda gelecek zaman ekinin son harfinin
                // yumusamasi bilgisi ancak girise bakarak anlasilabilir. bu nedenle ek olusturma sirasinda giris
                // kullanilir

                HarfDizisi olusanEk = incelenenEk.cozumlemeIcinUret(kelime, girisDizi, null);
                //log.info("ek:" + incelenenEk + " olusum:" + olusanEk);
                if (olusanEk == null || olusanEk.Length == 0)
                {
                    //log.info("bos ek.. " + incelenenEk);
                    continue;
                }


                if (logger.IsInfoEnabled)
                {
                    logger.Info("Kok ve Olusan Ek:" + kelime.icerik() + " " + olusanEk);
                }

                //Toleransli kiyaslama islemi burada yapiliyor. once gecici bir sekilde olusan kelimeye
                // olusan ek ekleniyor, ve giris ile toleransli kiyaslama yapiliyor. Eger kiyaslama
                // sonunda esik tolerans degeri asilmazsa dogru kabul edilip devam ediliyor.
                HarfDizisi olusum = new HarfDizisi(kelime.icerik());
                olusum.ekle(olusanEk);
                String olusumStr = olusum.ToString();
                if (logger.IsInfoEnabled)
                {
                    logger.Info("olusum:" + olusum);
                }

                if (MetinAraclari.isInSubstringEditDistance(olusumStr, girisDizi.ToString(), tolerans) ||
                    MetinAraclari.inEditDistance(olusumStr, girisDizi.ToString(), tolerans))
                {
                    kelimeYigini.koy((Kelime)kelime.Clone(), ardisilEkSirasi);
                    ardisilEkSirasi = 0;
                    // ek ekleneceginde yumusama yapilip yapilmayacagi belirleniyor.. aci
                    if (olusanEk.harf(0).sesliMi() &&
                        kelime.sonHarf().sertMi() &&
                        kelime.ekler().Count > 1 &&
                        olusanEk.ilkHarf().sertDonusum() != null)
                    {
                        kelime.icerik().sonHarfYumusat();
                    }
                    kelime.icerikEkle(olusanEk);
                    kelime.ekEkle(incelenenEk);
                    olusumStr = kelime.icerikStr();
                    if (logger.IsInfoEnabled)
                    {
                        logger.Info("ekleme sonrasi olusan kelime: " + kelime.icerik());
                    }

                    bulunanEk = incelenenEk;

                    if (MetinAraclari.inEditDistance(olusumStr, girisDizi.ToString(), tolerans))
                    {
                        uygunSonuclar.Add((Kelime)kelime.Clone());
                        if (logger.IsInfoEnabled)
                        {
                            logger.Info("uygun kelime:" + kelime.icerik());
                        }
                    }

/*
 *                      TurkceHarf ekIlkHarf = giris.harf(kelime.boy());
 *                      if (ekIlkHarf == TurkceAlfabe.TANIMSIZ_HARF)
 *                          return false;*/
                }
            }
        }