예제 #1
0
 /**
  * bazi ek ozellikleri konfigurasyon dosyasinda yer almaz, ekler okunduktan sonra
  * bilesenlere gore otomatik olarak belirlenir.
  *
  * @param ek
  * @param bilesenler
  */
 public void xmlDisiEkOzellikleriBelirle(Ek ek, List <EkUretimBileseni> bilesenler)
 {
     for (int i = 0; i < bilesenler.Count; i++)
     {
         EkUretimBileseni uretimBileseni = bilesenler[i];
         TurkceHarf       harf           = uretimBileseni.harf();
         if (i == 0 || (i == 1 && bilesenler[0].kural() == UretimKurali.KAYNASTIR))
         {
             if (harf.sesliMi())
             {
                 ek.setSesliIleBaslayabilir(true);
             }
             switch (uretimBileseni.kural())
             {
             case UretimKurali.SESLI_AA:
             case UretimKurali.SESLI_AE:
             case UretimKurali.SESLI_IU:
                 ek.setSesliIleBaslayabilir(true);
                 break;
             }
         }
         else
         {
             break;
         }
     }
 }
예제 #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 TurkceSesliUretici(Alfabe alfabe)
 {
     HARF_a  = alfabe.harf('a');
     HARF_e  = alfabe.harf('e');
     HARF_i  = alfabe.harf('i');
     HARF_ii = alfabe.harf(Alfabe.CHAR_ii);
     HARF_u  = alfabe.harf('u');
     HARF_uu = alfabe.harf(Alfabe.CHAR_uu);
 }
예제 #4
0
 public EkUreticiTr(Alfabe alfabe)
 {
     this.sesliUretici = new TurkceSesliUretici(alfabe);
     HARF_a            = alfabe.harf('a');
     HARF_e            = alfabe.harf('e');
     HARF_i            = alfabe.harf('i');
     HARF_ii           = alfabe.harf(Alfabe.CHAR_ii);
     HARF_u            = alfabe.harf('u');
     HARF_uu           = alfabe.harf(Alfabe.CHAR_uu);
 }
        public override HarfDizisi cozumlemeIcinUret(Kelime kelime, HarfDizisi giris, HarfDizisiKiyaslayici kiyaslayici)
        {
            TurkceHarf son = kelime.sonHarf();

            if (son.sesliMi() || ((son.charDeger() == 'r') || son.charDeger() == ('l')) &&
                kelime.icerik().sesliSayisi() > 1)
            {
                return(T);
            }
            return(null);
        }
예제 #6
0
 public TurkceHarf sesliBelirleAE(TurkceHarf sonSesli)
 {
     if (sonSesli.inceSesliMi())
     {
         return(HARF_e);
     }
     else
     {
         return(HARF_a);
     }
 }
예제 #7
0
        public void testLowerUpperCase()
        {
            TurkceHarf kucukI = alfabe.harf(Alfabe.CHAR_ii);
            TurkceHarf harfI  = alfabe.buyukHarf(kucukI);

            Assert.AreEqual(harfI.charDeger(), 'I');
            TurkceHarf i          = alfabe.harf('i');
            TurkceHarf harfBuyuki = alfabe.buyukHarf(i);

            Assert.AreEqual(harfBuyuki.charDeger(), 'İ');
        }
예제 #8
0
        public void testHarfErisim()
        {
            TurkceHarf harf = new TurkceHarf('a', 1);

            harf.setSesli(true);

            TurkceHarf okunan = alfabe.harf('a');

            Assert.AreEqual(harf.charDeger(), okunan.charDeger());
            Assert.IsTrue(harf.sesliMi());
        }
예제 #9
0
 /**
  * en son kalin sesli harfi bulup onu ince formu ile degistirir.
  * ornegin saat -> saAt haline donusur. ince a harfi icin TurkceAlfabe sinifini inceleyin
  *
  * @param dizi
  */
 public void uygula(HarfDizisi dizi)
 {
     for (int i = dizi.Length - 1; i >= 0; i--)
     {
         TurkceHarf h = dizi.harf(i);
         if (h.sesliMi() && !h.inceSesliMi())
         {
             dizi.harfDegistir(i, _alfabe.kalinSesliIncelt(dizi.harf(i)));
         }
     }
 }
예제 #10
0
        public Set <TurkceHarf> olasiBaslangicHarfleri(List <EkUretimBileseni> bilesenler)
        {
            Set <TurkceHarf> kume = new HashedSet <TurkceHarf>();//TOREMEMBER 4

            for (int i = 0; i < bilesenler.Count; i++)
            {
                EkUretimBileseni bilesen = bilesenler[i];
                TurkceHarf       harf    = bilesen.harf();
                switch (bilesen.kural())
                {
                case UretimKurali.HARF:
                    kume.Add(harf);
                    return(kume);

                case UretimKurali.KAYNASTIR:
                    kume.Add(harf);
                    break;

                case UretimKurali.SERTLESTIR:
                    kume.Add(harf);
                    kume.Add(harf.sertDonusum());
                    return(kume);

                case UretimKurali.SESLI_AE:
                    kume.Add(HARF_a);
                    kume.Add(HARF_e);
                    if (i > 0)
                    {
                        return(kume);
                    }
                    else
                    {
                        break;
                    }

                case UretimKurali.SESLI_IU:
                    kume.Add(HARF_i);
                    kume.Add(HARF_u);
                    kume.Add(HARF_ii);
                    kume.Add(HARF_uu);
                    if (i > 0)
                    {
                        return(kume);
                    }
                    else
                    {
                        break;
                    }
                }
            }
            return(kume);
        }
예제 #11
0
        public override HarfDizisi cozumlemeIcinUret(Kelime kelime, HarfDizisi giris, HarfDizisiKiyaslayici kiyaslayici)
        {
            TurkceHarf sonSesli = kelime.icerik().sonSesli();

            if (sonSesli.charDeger() == 'u' || sonSesli.charDeger() == Alfabe.CHAR_uu)
            {
                return(ekUretici.cozumlemeIcinEkUret(kelime.icerik(), giris, _uretimBilesenleri));
            }
            else
            {
                return(null);
            }
        }
예제 #12
0
 public String toAscii(String giris)
 {
     char[] chars = giris.ToCharArray();
     for (int i = 0; i < chars.Length; i++)
     {
         TurkceHarf harf = alfabe.harf(chars[i]);
         if (harf != null && harf != Alfabe.TANIMSIZ_HARF)
         {
             if (harf.asciiDonusum() != null)
             {
                 chars[i] = harf.asciiDonusum().charDeger();
             }
         }
     }
     return(new String(chars));
 }
예제 #13
0
 public TurkceHarf sesliBelirleIU(TurkceHarf sonSesli)
 {
     if (sonSesli.inceSesliMi() && sonSesli.duzSesliMi())
     {
         return(HARF_i);
     }
     if (!sonSesli.inceSesliMi() && sonSesli.duzSesliMi())
     {
         return(HARF_ii);
     }
     if (!sonSesli.inceSesliMi() && sonSesli.yuvarlakSesliMi())
     {
         return(HARF_u);
     }
     if (sonSesli.inceSesliMi() && sonSesli.yuvarlakSesliMi())
     {
         return(HARF_uu);
     }
     return(Alfabe.TANIMSIZ_HARF);
 }
예제 #14
0
        public override HarfDizisi cozumlemeIcinUret(Kelime kelime, HarfDizisi giris, HarfDizisiKiyaslayici kiyaslayici)
        {
            if (kiyaslayici == null)
            {
                return(null);
            }
            // eki olustur.
            HarfDizisi ek      = ekUretici.cozumlemeIcinEkUret(kelime.icerik(), giris, uretimBilesenleri());
            TurkceHarf ekHarfi = sesliUretci.sesliBelirleIU(kelime.icerik());
            HarfDizisi olusum  = new HarfDizisi("yor", alfabe);

            olusum.ekle(0, ekHarfi);
            int harfPozisyonu = kelime.boy() + ek.Length;

            if (kiyaslayici.aradanKiyasla(giris, olusum, harfPozisyonu))
            {
                return(ek);
            }
            return(null);
        }
예제 #15
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);
        }
예제 #16
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);
        }
예제 #17
0
        public TurkceHarf sesliBelirleIU(HarfDizisi dizi)
        {
            TurkceHarf sonSesli = dizi.sonSesli();

            return(sesliBelirleIU(sonSesli));
        }
예제 #18
0
        private List <Kelime> coz(Kok kok, HarfDizisi kokDizi, HarfDizisi giris, bool tumunuCozumle)
        {
            Kelime            kelime       = kelimeUret(kok, kokDizi);
            BasitKelimeYigini kelimeYigini = new BasitKelimeYigini();
            Ek            bulunanEk        = kelime.sonEk();
            int           ardisilEkSirasi  = 0;
            List <Kelime> uygunSonuclar    = Collections.EMPTY_LIST_KELIME;
            TurkceHarf    ilkEkHarfi       = giris.harf(kelime.boy());

            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 basarisizlik.
                    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();
                    ilkEkHarfi      = giris.harf(kelime.boy());
                    continue;
                }

                if (kelime.gercekEkYok() && kelime.kok().ozelDurumVarmi())
                {
                    if (!ozelDurumUygula(kelime, giris, incelenenEk))
                    {
                        continue;
                    }
                    else
                    {
                        ilkEkHarfi = giris.harf(kelime.boy());
                    }
                }

                if (!incelenenEk.ilkHarfDenetle(ilkEkHarfi))
                {
                    continue;
                }

                HarfDizisi olusanEkIcerigi = incelenenEk.cozumlemeIcinUret(kelime, giris, harfDizisiKiyaslayici);
                if (olusanEkIcerigi == null || olusanEkIcerigi.Length == 0)
                {
                    continue;
                }

                if (harfDizisiKiyaslayici.aradanKiyasla(giris,
                                                        olusanEkIcerigi,
                                                        kelime.boy()))
                {
                    // ek dongusu testi
                    //if (kelime.ekDongusuVarmi(incelenenEk)) continue;
                    kelimeYigini.koy((Kelime)kelime.Clone(), ardisilEkSirasi);
                    ardisilEkSirasi = 0;
                    kelime.ekEkle(incelenenEk);
                    kelime.icerikEkle(olusanEkIcerigi);
                    ilkEkHarfi = giris.harf(kelime.boy());
                    if (logger.IsInfoEnabled)
                    {
                        logger.Info("ekleme sonrasi olusan kelime: " + kelime.icerik());
                    }

                    bulunanEk = incelenenEk;

                    if (harfDizisiKiyaslayici.kiyasla(kelime.icerik(), giris) && !incelenenEk.sonEkOlamazMi())
                    {
                        if (!tumunuCozumle)
                        {
                            uygunSonuclar = new List <Kelime>(1);
                            uygunSonuclar.Add(kelime);
                            return(uygunSonuclar);
                        }
                        if (uygunSonuclar.Count == 0)
                        {
                            uygunSonuclar = new List <Kelime>(2);
                        }
                        uygunSonuclar.Add((Kelime)kelime.Clone());
                    }
                }
            }
        }
예제 #19
0
 /**
  * Eger baslangic harfleri kumsei var ise gelen harfin bu kumede olup olmadigina bakar.
  * @param ilkHarf
  * @return eger kume tanimlanmamis ise bu ek icin ilk harf denetimi yapilmiyor demektir, true doner.
  *   eger kume mevcut ise (null disi) ve harf kumede mevcutsa true doner. aksi halde false.
  */
 public bool ilkHarfDenetle(TurkceHarf ilkHarf)
 {
     return(baslangicHarfleri == null || baslangicHarfleri.Contains(ilkHarf));
 }
예제 #20
0
 public EkUretimBileseni(UretimKurali kural, TurkceHarf harf)
 {
     this._kural = kural;
     this._harf  = harf;
 }
예제 #21
0
        /**
         * Giren harf dizisinin sonunda mantikli olarak yer alan hecenin harf
         * sayisini dondurur.
         * Sistem, -trak ve benzeri harf dizilimine sahip kelimeleri hecelemiyor.
         *
         * @param kelime: turkce harf dizisi.
         * @return int, 1,2,3 ya da 4 donerse giris dizisinin dizinin sondan o
         *         kadarharfi heceyi temsil eder -1 donerse hecenin bulunamadigi
         *         anlamina gelir. sistem yabanci harf ya da isaretlerin oldugu ya
         *         da kural disi kelimeleri heceleyemez. (ornegin, three, what vs.)
         *         TODO: sistem su anda basta bulunan iki harf sessiz oldugu
         *         durumlari kabul etmekte ama buna kisitlama getirilmesi iyi olur.
         *         sadece "tr", "st", "kr" gibi girislere izin verilmeli
         */
        public int sonHeceHarfSayisi(HarfDizisi kelime)
        {
            int        boy        = kelime.Length;
            TurkceHarf harf       = kelime.harf(boy - 1);
            TurkceHarf oncekiHarf = kelime.harf(boy - 2);

            if (boy == 0)
            {
                return(-1);
            }

            if (harf.sesliMi())
            {
                //kelime sadece sesli.
                if (boy == 1)
                {
                    return(1);
                }
                //onceki harf sesli kelime="saa" ise son ek "a"
                if (oncekiHarf.sesliMi())
                {
                    return(1);
                }
                //onceki harf sessiz ise ve kelime sadece 2 harf ise hece tum kelime. "ya"
                if (boy == 2)
                {
                    return(2);
                }

                TurkceHarf ikiOncekiHarf = kelime.harf(boy - 3);

                // steteskp > ste
                if (!ikiOncekiHarf.sesliMi() && boy == 3)
                {
                    return(3);
                }
                return(2);
            }
            else
            {
                // tek sessiz ile hece olmaz.
                if (boy == 1)
                {
                    return(-1);
                }

                TurkceHarf ikiOncekiHarf = kelime.harf(boy - 3);
                if (oncekiHarf.sesliMi())
                {
                    //kelime iki harfli (el, al) ya da iki onceki harf sesli (saat)
                    if (boy == 2 || ikiOncekiHarf.sesliMi())
                    {
                        return(2);
                    }

                    TurkceHarf ucOncekiHarf = kelime.harf(boy - 4);
                    // kelime uc harfli (kal, sel) ya da uc onceki harf sesli (kanat),
                    if (boy == 3 || ucOncekiHarf.sesliMi())
                    {
                        return(3);
                    }

                    //kelime dort harfli ise yukaridaki kurallari gecmesi nedeniyle hecelenemez sayiyoruz.
                    // ornegin tren strateji krank angstrom kelimelerii hecelenemez sayiyoruz.
                    if (boy == 4)
                    {
                        return(-1);
                    }

                    TurkceHarf dortOncekiHarf = kelime.harf(boy - 5);
                    if (!dortOncekiHarf.sesliMi())
                    {
                        return(3);
                    }
                    return(3);
                }
                else
                {
                    if (boy == 2 || !ikiOncekiHarf.sesliMi())
                    {
                        return(-1);
                    }
                    TurkceHarf ucOncekiHarf = kelime.harf(boy - 4);
                    if (boy > 3 && !ucOncekiHarf.sesliMi())
                    {
                        return(4);
                    }
                    return(3);
                }
            }
        }