Esempio n. 1
0
        public void kelimeBicimlendir(Kelime kelime)
        {
            Kok        kok    = kelime.kok();
            HarfDizisi olusan = kelime.icerik();

            if (kok.tip().Equals(KelimeTipi.KISALTMA))
            {
                //cozumleme sirasinda eklenmis harf varsa onlari sil.
                int silinecek = kok.icerik().Length;
                if (kok.ozelDurumIceriyormu(TurkceKokOzelDurumTipi.KISALTMA_SON_SESSIZ))
                {
                    silinecek += 2;
                }
                if (kok.ozelDurumIceriyormu(TurkceKokOzelDurumTipi.KISALTMA_SON_SESLI))
                {
                    silinecek++;
                }
                //kelimenin olusan kismindan kokun icereigini sil.
                olusan.harfSil(0, silinecek);
                //simdi kokun orjinal halini ekle.
                olusan.ekle(0, new HarfDizisi(kok.asil(), alfabe));

                if (olusan.Length == kok.asil().Length)
                {
                    return;
                }
                //eger gerekiyorsa kesme isareti koy.
                if (!olusan.harf(kok.asil().Length - 1).Equals(alfabe.harf('.')))
                {
                    olusan.ekle(kok.asil().Length, alfabe.harf('\''));
                }
            }
            else if (kok.tip() == KelimeTipi.OZEL)
            {
                olusan.harfDegistir(0, alfabe.buyukHarf(olusan.ilkHarf()));
                if (kok.ozelDurumIceriyormu(TurkceKokOzelDurumTipi.KESMESIZ))
                {
                    return;
                }
                List <Ek> ekler = kelime.ekler();
                if (ekler.Count > 1)
                {
                    Ek ek = (Ek)ekler[1];
                    if (ek.iyelikEkiMi() || ek.halEkiMi())
                    {
                        int kesmePozisyonu = kok.icerik().Length;
                        olusan.ekle(kesmePozisyonu, alfabe.harf('\''));
                    }
                }
            }
            // ozel ic karakter iceren kokler icin bicimleme

/*        if (kok.ozelDurumlar().contains(TurkceKokOzelDurumlari.OZEL_IC_KARAKTER)) {
 *          //olusan ksimdan koku sil
 *          int silinecek = kok.icerik().length();
 *          olusan.harfSil(0, silinecek);
 *          //simdi kokun orjinal halini ekle.
 *          olusan.ekle(0, new HarfDizisi(kok.asil()));
 *      }*/
        }
        public void duzyaziOzelDurumOku(Kok kok, String okunanIcerik, String[] parcalar)
        {
            for (int i = 2; i < parcalar.Length; i++)
            {
                String _ozelDurum = parcalar[i];

                //kisaltma ozel durumunun analizi burada yapiliyor.
                if (_ozelDurum.StartsWith(TurkceKokOzelDurumTipi.KISALTMA_SON_SESLI.KisaAd))
                {
                    int loc = _ozelDurum.IndexOf(':');
                    if (loc > 0)
                    {
                        String parca    = _ozelDurum.Substring(loc + 1);
                        char   sonSesli = parca[0];
                        if (!alfabe.harf(sonSesli).sesliMi())
                        {
                            logger.Warn("Hatali kisaltma harfi.. Sesli bekleniyordu." + _ozelDurum);
                        }
                        kok.KisaltmaSonSeslisi = sonSesli;
                        if (parca.Length > 1)
                        {
                            kok.ozelDurumEkle(ozelDurumlar[TurkceKokOzelDurumTipi.KISALTMA_SON_SESSIZ]);
                        }
                        else
                        {
                            kok.ozelDurumCikar(TurkceKokOzelDurumTipi.KISALTMA_SON_SESLI);
                        }
                    }
                    else
                    {
                        char sonHarf = kok.icerik()[kok.icerik().Length - 1];
                        if (!alfabe.harf(sonHarf).sesliMi())
                        {
                            kok.KisaltmaSonSeslisi = 'e';
                            kok.ozelDurumEkle(ozelDurumlar[TurkceKokOzelDurumTipi.KISALTMA_SON_SESLI]);
                        }
                    }
                    continue;
                }

                //diger ozel durumlarin elde edilmesi..
                KokOzelDurumu oz = ozelDurum(_ozelDurum);
                if (oz != null)
                {
                    kok.ozelDurumEkle(oz);
                }
                else
                {
                    logger.Warn("Hatali kok bileseni" + kok.icerik() + " Token: " + _ozelDurum);
                }
            }

            //kisaltmalari ve ozel karakter iceren kokleri asil icerik olarak ata.
            if (kok.tip() == KelimeTipi.KISALTMA || kok.ozelDurumIceriyormu(TurkceKokOzelDurumTipi.OZEL_IC_KARAKTER))
            {
                kok.Asil = okunanIcerik;
            }
        }
        public void ozelDurumBelirle(Kok kok)
        {
            // eger bir fiilin son harfi sesli ise bu dogrudan simdiki zaman ozel durumu olarak ele alinir.
            // bu ozel durum bilgi tabaninda ayrica belirtilmedigi icin burada kok'e eklenir.  aramak -> ar(a)Iyor
            char sonChar = kok.icerik()[kok.icerik().Length - 1];

            if (kok.tip() == KelimeTipi.FIIL && alfabe.harf(sonChar).sesliMi())
            {
                //demek-yemek fiilleri icin bu uygulama yapilamaz.
                if (!kok.ozelDurumIceriyormu(TurkceKokOzelDurumTipi.FIIL_KOK_BOZULMASI))
                {
                    kok.ozelDurumEkle(ozelDurumlar[TurkceKokOzelDurumTipi.SIMDIKI_ZAMAN]);
                }
            }
        }
Esempio n. 4
0
        public void testDegismisIcerikOlustur()
        {
            Kok kok = new Kok("ara", KelimeTipi.FIIL);

            kok.ozelDurumEkle(koz.ozelDurum(TurkceKokOzelDurumTipi.SIMDIKI_ZAMAN));//bu satır java tarafında yok, ama bu olmazsa test cakar
            Assert.IsTrue(koz.ozelDurumUygula(kok).Length > 0);
            Assert.AreEqual((koz.ozelDurumUygula(kok))[0], "ar");
            Assert.IsTrue(kok.ozelDurumIceriyormu(TurkceKokOzelDurumTipi.SIMDIKI_ZAMAN));
            kok = new Kok("kitap", KelimeTipi.ISIM);
            kok.ozelDurumEkle(koz.ozelDurum(TurkceKokOzelDurumTipi.SESSIZ_YUMUSAMASI));
            Assert.IsTrue(koz.ozelDurumUygula(kok).Length > 0);
            Assert.AreEqual((koz.ozelDurumUygula(kok))[0], "kitab");

            String str = "al" + Alfabe.CHAR_ii + "n";

            kok = new Kok(str, KelimeTipi.ISIM);
            kok.ozelDurumEkle(koz.ozelDurum(TurkceKokOzelDurumTipi.ISIM_SESLI_DUSMESI));
            Assert.IsTrue(koz.ozelDurumUygula(kok).Length > 0);
            Assert.AreEqual((koz.ozelDurumUygula(kok))[0], "aln");

            kok = new Kok("nakit", KelimeTipi.ISIM);
            kok.ozelDurumEkle(koz.ozelDurum(TurkceKokOzelDurumTipi.ISIM_SESLI_DUSMESI));
            kok.ozelDurumEkle(koz.ozelDurum(TurkceKokOzelDurumTipi.SESSIZ_YUMUSAMASI));
            Assert.IsTrue(koz.ozelDurumUygula(kok).Length > 0);
            Assert.AreEqual((koz.ozelDurumUygula(kok))[0], "nakd");

            kok = new Kok("ben", KelimeTipi.ZAMIR);
            kok.ozelDurumEkle(koz.ozelDurum(TurkceKokOzelDurumTipi.TEKIL_KISI_BOZULMASI));
            Assert.IsTrue(koz.ozelDurumUygula(kok).Length > 0);
            Assert.AreEqual((koz.ozelDurumUygula(kok))[0], "ban");

            kok = new Kok("sen", KelimeTipi.ZAMIR);
            kok.ozelDurumEkle(koz.ozelDurum(TurkceKokOzelDurumTipi.TEKIL_KISI_BOZULMASI));
            Assert.IsTrue(koz.ozelDurumUygula(kok).Length > 0);
            Assert.AreEqual((koz.ozelDurumUygula(kok))[0], "san");

            kok = new Kok("de", KelimeTipi.FIIL);
            kok.ozelDurumEkle(koz.ozelDurum(TurkceKokOzelDurumTipi.FIIL_KOK_BOZULMASI));
            Assert.IsTrue(koz.ozelDurumUygula(kok).Length > 0);
            Assert.AreEqual((koz.ozelDurumUygula(kok))[0], "di");

            kok = new Kok("ye", KelimeTipi.FIIL);
            kok.ozelDurumEkle(koz.ozelDurum(TurkceKokOzelDurumTipi.FIIL_KOK_BOZULMASI));
            Assert.IsTrue(koz.ozelDurumUygula(kok).Length > 0);
            Assert.AreEqual((koz.ozelDurumUygula(kok))[0], "yi");
        }
Esempio n. 5
0
        public bool kokGirisDegismiVarsaUygula(Kok kok, HarfDizisi kokDizi, HarfDizisi girisDizi)
        {
            //turkce'de sadece kisaltmalarda bu metoda ihtiyacimiz var.
            char c = kok.KisaltmaSonSeslisi;

            if (girisDizi.Length == 0)
            {
                return(false);
            }
            if (kok.tip().Equals(KelimeTipi.KISALTMA) && c != 0)
            {
                TurkceHarf h = alfabe.harf(c);
                //toleransli cozumleyicide kok giristen daha uzun olabiliyor.
                // o nedenle asagidaki kontrolun yapilmasi gerekiyor.
                int kokBoyu = kok.icerik().Length;
                if (kokBoyu <= girisDizi.Length)
                {
                    girisDizi.ekle(kokBoyu, h);
                }
                else
                {
                    girisDizi.ekle(h);
                }
                kokDizi.ekle(h);
                if (kok.ozelDurumIceriyormu(TurkceKokOzelDurumTipi.KISALTMA_SON_SESSIZ))
                {
                    //gene toleransli cozumleyicinin hata vermemesi icin asagidaki kontrole ihtiyacimiz var
                    if (kokBoyu < girisDizi.Length)
                    {
                        girisDizi.ekle(kokBoyu + 1, alfabe.harf('b'));
                    }
                    else
                    {
                        girisDizi.ekle(alfabe.harf('b'));
                    }
                    kokDizi.ekle(alfabe.harf('b'));
                }
                return(true);
            }
            return(false);
        }
        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);
        }