private bool ozelDurumDenetle(Kelime kelime, HarfDizisi girisDizi, Ek ek, int tolerans) { if (!kelime.kok().yapiBozucuOzelDurumVarmi()) return true; HarfDizisi testKokIcerigi = kelime.kok().ozelDurumUygula(alfabe, ek); //if (log.isTraceEnabled()) log.trace("Ozel durum sonrasi:" + testKokIcerigi + " ek:" + ek.getIsim()); if (testKokIcerigi == null) return false; if (MetinAraclari.isInSubstringEditDistance(testKokIcerigi.ToString(), girisDizi.ToString(), tolerans)) { kelime.setIcerik(new HarfDizisi(testKokIcerigi)); //if (log.isTraceEnabled()) log.trace("basari, kelime:" + kelime.icerik()); return true; } else kelime.setIcerik(new HarfDizisi(kelime.kok().icerik(), alfabe)); //if (log.isTraceEnabled()) log.trace("kelime:" + kelime.icerik()); return false; }
private bool ozelDurumUygula(Kelime kelime, HarfDizisi giris, Ek ek) { if (!kelime.kok().yapiBozucuOzelDurumVarmi()) return true; HarfDizisi testKokIcerigi = kelime.kok().ozelDurumUygula(alfabe, ek); if (testKokIcerigi == null) return false; if (logger.IsInfoEnabled) logger.Info("Ozel durum sonrasi:" + testKokIcerigi + " ek:" + ek.ad()); kelime.setIcerik(testKokIcerigi); return harfDizisiKiyaslayici.bastanKiyasla(giris, testKokIcerigi); }
private UretimNesnesi uretimNesnesiUret(Kok kok, IList<Ek> ekler) { if (kok == null) return new UretimNesnesi(""); UretimNesnesi ure = new UretimNesnesi(kok.icerik()); Kelime kelime = new Kelime(kok, alfabe); if (ekler.Count > 1) { HarfDizisi ozelDurumSonrasi = kok.ozelDurumUygula(alfabe, ekler[1]); if (ozelDurumSonrasi != null) kelime.setIcerik(ozelDurumSonrasi); else return ure; } else { return ure; } for (int i = 0; i < ekler.Count; i++) { Ek ek = ekler[i]; // eger incelenen ek onceki ekten sonra gelemezse cik. if (i > 0) { Ek oncekiEk = ekler[i - 1]; if (!oncekiEk.ardindanGelebilirMi(ek)) { return ure; } } //olusum icin kural belirle ve eki olustur. HarfDizisi ekOlusumu; if (i < ekler.Count - 1) ekOlusumu = new HarfDizisi(ek.olusumIcinUret(kelime, ekler[i + 1])); else ekOlusumu = new HarfDizisi(ek.olusumIcinUret(kelime, TemelEkYonetici.BOS_EK)); //TODO: asagidaki bolum dil ozel. muhtemelen olusumIcinURet metodu duzletilirse gerek kalmaz. // ek son harf yumusatmayi kendimiz hallediyoruz (eger yalin ek ise bu islemi pas geciyoruz.) if (i > 1) { if (kelime.sonHarf().sertMi() && ekOlusumu.ilkHarf().sesliMi()) kelime.icerik().sonHarfYumusat(); } //eki kelimeye ve ek olusumlarina ekle. kelime.icerikEkle(ekOlusumu); if (ekOlusumu.Length > 0) ure.olusumlar.Add(ekOlusumu.ToString()); kelime.ekler().Add(ek); } //son duzeltmeleri uygula. yardimci.kelimeBicimlendir(kelime); ure.olusum = kelime.icerikStr(); return ure; }