/** * 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()); }