Exemple #1
0
 public override HarfDizisi cozumlemeIcinUret(Kelime kelime, HarfDizisi giris, HarfDizisiKiyaslayici kiyaslayici)
 {
     if (kelime.gercekEkYok() && kelime.kok().ozelDurumIceriyormu(TurkceKokOzelDurumTipi.SU_OZEL_DURUMU))
     {
         return(ekUretici.cozumlemeIcinEkUret(kelime.icerik(), giris, uretimBilesenleri()));
     }
     return(null);
 }
Exemple #2
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());
                    }
                }
            }
        }