示例#1
0
        /**
         * eger hepsiniCozumle=true ise dogru olabilecek tum kok ve ek kombinasyonlarini
         * dondurur.
         * Eger flag false ise ilk dogru cozumu tek elemanli dizi seklinde
         * dondurur.bu yontem hiz gerektiren denetleme islemi icin kullanilir.
         *
         * @param strGiris
         * @param hepsiniCozumle
         * @return tek ya da coklu kelime dizisi.
         */
        public Kelime[] cozumle(String strGiris, bool hepsiniCozumle)
        {
            //on islemler
            String strIslenmis = alfabe.ayikla(strGiris);

            if (!alfabe.cozumlemeyeUygunMu(strIslenmis) || strIslenmis.Length == 0)
            {
                return(Collections.BOS_KELIME_DIZISI);
            }

            //kok adaylarinin bulunmasi.
            List <Kok> kokler = kokBulucu.getAdayKokler(strIslenmis);

            if (logger.IsInfoEnabled)
            {
                logger.Info("Giris: " + strGiris + ", Adaylar: " + kokler);
            }
            HarfDizisi girisDizi     = new HarfDizisi(strIslenmis, alfabe);
            bool       icerikDegisti = false;

            //cozumlerin bulunmasi
            List <Kelime> cozumler = new List <Kelime>(2);

            for (int i = kokler.Count - 1; i >= 0; i--)
            {
                if (icerikDegisti)
                {
                    girisDizi     = new HarfDizisi(strIslenmis, alfabe);
                    icerikDegisti = false;
                }
                Kok kok = kokler[i];
                if (logger.IsInfoEnabled)
                {
                    logger.Info("Aday:" + kok.icerik());
                }
                HarfDizisi kokDizi = new HarfDizisi(kok.icerik(), alfabe);

                //eger giris koke dogrudan esitse cozmeden kelimeyi olustur.
                if (harfDizisiKiyaslayici.kiyasla(kokDizi, girisDizi))
                {
                    Kelime kelime = kelimeUret(kok, kokDizi);
                    if (yardimci.kelimeBicimiDenetle(kelime, strGiris))
                    {
                        if (!hepsiniCozumle)
                        {
                            return(new Kelime[] { kelime });
                        }
                        else
                        {
                            cozumler.Add(kelime);
                        }
                    }
                }
                else
                {
                    icerikDegisti = yardimci.kokGirisDegismiVarsaUygula(kok, kokDizi, girisDizi);
                    List <Kelime> sonuclar = coz(kok, kokDizi, girisDizi, hepsiniCozumle);
                    foreach (Kelime sonuc in sonuclar)
                    {
                        if (yardimci.kelimeBicimiDenetle(sonuc, strGiris))
                        {
                            if (!hepsiniCozumle)
                            {
                                return(new Kelime[] { sonuc });
                            }
                            cozumler.Add(sonuc);
                        }
                    }
                }
            }
            return(cozumler.ToArray());
        }