public override HarfDizisi cozumlemeIcinUret(Kelime kelime, HarfDizisi giris, HarfDizisiKiyaslayici kiyaslayici)
 {
     HarfDizisi ek = ekUretici.cozumlemeIcinEkUret(kelime.icerik(), giris, _uretimBilesenleri);
     // XXXX gibi Turkce harf tasimayan stringler icin koruma.
     // TODO: Daha dogru bir yontem bulunmali.
     if (ek == null)
     {
         return null;
     }
     int harfPozisyonu = kelime.boy() + ek.Length;
     if (giris.harf(harfPozisyonu).sesliMi())
         return ek;
     return null;
 }
Exemple #2
0
        public override HarfDizisi cozumlemeIcinUret(Kelime kelime, HarfDizisi giris, HarfDizisiKiyaslayici kiyaslayici)
        {
            HarfDizisi ek = ekUretici.cozumlemeIcinEkUret(kelime.icerik(), giris, _uretimBilesenleri);

            // XXXX gibi Turkce harf tasimayan stringler icin koruma.
            // TODO: Daha dogru bir yontem bulunmali.
            if (ek == null)
            {
                return(null);
            }
            int harfPozisyonu = kelime.boy() + ek.Length;

            if (giris.harf(harfPozisyonu).sesliMi())
            {
                return(ek);
            }
            return(null);
        }
Exemple #3
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);
        }
Exemple #4
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());
                    }
                }
            }
        }