示例#1
0
        public TemelEkYonetici(Alfabe alfabe,
                               String dosya,
                               EkUretici ekUretici,
                               EkOzelDurumUretici ozelDurumUretici,
                               IDictionary <KelimeTipi, String> baslangicEkMap)
        {
            this.alfabe = alfabe;
            DateTime start = System.DateTime.Now;// currentTimeMillis();

            XmlEkOkuyucu okuyucu = new XmlEkOkuyucu(
                dosya,
                ekUretici,
                ozelDurumUretici,
                alfabe);

            okuyucu.xmlOku();
            ekler = okuyucu.getEkler();
            foreach (KelimeTipi tip in baslangicEkMap.Keys)
            {
                Ek ek = ekler[baslangicEkMap[tip]];
                if (ek != null)
                {
                    baslangicEkleri.Add(tip, ek);
                }
                else
                {
                    logger.Warn(tip + " tipi icin baslangic eki " + baslangicEkMap[tip] + " bulunamiyor!");
                }
            }
            DateTime end = System.DateTime.Now;
            TimeSpan ts  = end.Subtract(start);

            logger.Info("ek okuma ve olusum suresii: " + ts.Milliseconds + "ms.");
        }
示例#2
0
        /**
         * asil ek nesnelerinin olusturulma islemi burada olur.
         * @param eklerElement
         */
        private void ekleriOlustur(XmlElement eklerElement)
        {
            XmlNodeList tumEkler = eklerElement.SelectNodes("ek");

            foreach (XmlElement ekElement in tumEkler)
            {
                String ekAdi = ekElement.GetAttribute("ad");
                Ek     ek    = this.ekler[ekAdi];
                // uretim kuralini oku ve ekleri uret.
                XmlAttribute uretimKurali = ekElement.GetAttributeNode("uretim");
                if (uretimKurali == null)
                {
                    exit("ek uretim kural kelimesi yok!" + ekAdi);
                }

                ek.setArdisilEkler(ardisilEkleriOlustur(ek, ekElement));
                ek.setEkKuralCozumleyici(ekUretici);
                List <EkUretimBileseni> bilesenler = ekUretimKelimesiCozumle(uretimKurali.Value);
                ek.setUretimBilesenleri(bilesenler);
                List <EkOzelDurumu> ozelDurumlar = ozelDurumlariOku(ekElement);
                ek.setOzelDurumlar(ozelDurumlar);

                ekOzellikleriBelirle(ek, ekElement);
                xmlDisiEkOzellikleriBelirle(ek, bilesenler);
                ek.baslangicHarfleriEkle(ekUretici.olasiBaslangicHarfleri(bilesenler));
                foreach (EkOzelDurumu oz in ozelDurumlar)
                {
                    ek.baslangicHarfleriEkle(ekUretici.olasiBaslangicHarfleri(oz.uretimBilesenleri()));
                }
            }
            logger.Debug("ek olusumu sonlandi.");
        }
示例#3
0
 /**
  * Bu metod rasgele girilen bir ek dizisinin olasi dogru siralamalarini bulur.
  * Metod kendi kendini cagiran bir yapidadir (recursive). Sonucta dogru olabilecek dizilimler
  * nesne icindeki "tumOlusumlar" dizisine atilir.
  *
  * @param olusan:       ic calisma sirasinda dogru olusan dizilimi tasiyan ArrayList.
  * @param incelenenEk:  Kok'un tipine gore gereken baslangic eki. FIIL ise FIIL_YALIN vs.
  * @param rasgeleEkler: rasgele sirali ekleri tasiyan liste.
  */
 private void yuru(List<Ek> olusan, Ek incelenenEk, List<Ek> rasgeleEkler)
 {
     for (int i = 0; i < rasgeleEkler.Count; i++)
     {
         Ek ek = rasgeleEkler[i];
         if (incelenenEk.ardindanGelebilirMi(ek))
         {
             List<Ek> newList = new List<Ek>(rasgeleEkler);
             newList.Remove(ek);
             olusan.Add(ek);
             if (newList.Count != 0)
                 yuru(olusan, ek, newList);
         }
     }
     if (olusan.Count == tum)
     {
         if (!this.tumOlusumlar.Contains(olusan))
             this.tumOlusumlar.Add(olusan);
         olusan = new List<Ek>();
     }
     else
     {
         rasgeleEkler.Add(incelenenEk);
         if (olusan.Count > 0)
             olusan.Remove(olusan[olusan.Count - 1]);
     }
 }
示例#4
0
 /**
  * bazi ek ozellikleri konfigurasyon dosyasinda yer almaz, ekler okunduktan sonra
  * bilesenlere gore otomatik olarak belirlenir.
  *
  * @param ek
  * @param bilesenler
  */
 public void xmlDisiEkOzellikleriBelirle(Ek ek, List <EkUretimBileseni> bilesenler)
 {
     for (int i = 0; i < bilesenler.Count; i++)
     {
         EkUretimBileseni uretimBileseni = bilesenler[i];
         TurkceHarf       harf           = uretimBileseni.harf();
         if (i == 0 || (i == 1 && bilesenler[0].kural() == UretimKurali.KAYNASTIR))
         {
             if (harf.sesliMi())
             {
                 ek.setSesliIleBaslayabilir(true);
             }
             switch (uretimBileseni.kural())
             {
             case UretimKurali.SESLI_AA:
             case UretimKurali.SESLI_AE:
             case UretimKurali.SESLI_IU:
                 ek.setSesliIleBaslayabilir(true);
                 break;
             }
         }
         else
         {
             break;
         }
     }
 }
示例#5
0
 protected String[] ekleriOlustur(Ek ek) {
     String[] olusan = new String[kelimeler.Length];
     for (int i = 0; i < kelimeler.Length; i++) {
         olusan[i] = ek.cozumlemeIcinUret(kelimeler[i], kelimeler[i].icerik(),
                 new KesinHDKiyaslayici()).ToString();
     }
     return olusan;
 }
示例#6
0
 protected void olusanEkKontrol(String[] strs, String[] gercek, Ek ek) {
     String[] olusanEkler;
     kelimeleriOlustur(strs);
     olusanEkler = ekleriOlustur(ek);
     for (int i = 0; i < gercek.Length; i++) {
         Assert.AreEqual(olusanEkler[i], gercek[i], "Hatali olusum:" + olusanEkler[i]);
     }
 }
示例#7
0
        /**
         * adi verilen Ek nesnesini bulur. Eger ek yok ise null doner.
         *
         * @param ekId - ek adi
         * @return istenen Ek nesnesi.
         */
        public Ek ek(String ekId)
        {
            Ek ek = ekler[ekId];

            if (ek == null)
            {
                logger.Error("Ek bulunamiyor!" + ekId);
            }
            return(ekler[ekId]);
        }
示例#8
0
        /**
         * Kok nesnesinin tipine gore gelebilecek ilk ek'i dondurur.
         * Baslangic ekleri bilgisi dil tarafindan belirlenir.
         *
         * @param kok
         * @return ilk Ek, eger kok tipi baslangic ekleri <baslangicEkleri>
         *         haritasinda belirtilmemisse BOS_EK doner.
         */
        public Ek ilkEkBelirle(Kok kok)
        {
            Ek baslangicEki = baslangicEkleri[kok.tip()];

            if (baslangicEki != null)
            {
                return(baslangicEki);
            }
            else
            {
                return(BOS_EK);
            }
        }
示例#9
0
 public HarfDizisi olusumIcinUret(
     Kelime kelime,
     Ek sonrakiEk)
 {
     foreach (EkOzelDurumu ozelDurum in ozelDurumlar)
     {
         HarfDizisi ozelDurumSonucu = ozelDurum.olusumIcinUret(kelime, sonrakiEk);
         if (ozelDurumSonucu != null)
         {
             return(ozelDurumSonucu);
         }
     }
     return(ekUretici.olusumIcinEkUret(kelime.icerik(), sonrakiEk, uretimBilesenleri));
 }
示例#10
0
        public override bool Equals(Object o)
        {
            if (this == o)
            {
                return(true);
            }
            if (o == null || this.GetType() != o.GetType())
            {
                return(false);
            }

            Ek ek = (Ek)o;

            return(!(_ad != null ? !_ad.Equals(ek._ad) : ek._ad != null));
        }
示例#11
0
        /**
         * HAL ve IYELIK eki ozellikleri burada belirlenir. ek iceriisne farkli ozellikler
         * eklenecekse burasi ona gore degistirilmeli.
         * @param ek
         * @param ekElement
         */
        private void ekOzellikleriBelirle(Ek ek, XmlElement ekElement)
        {
            XmlNodeList ozellikler = ekElement.SelectNodes("ozellik");

            foreach (XmlElement element in ozellikler)
            {
                String ozellik = element.InnerText.Trim();
                if (ozellik.Equals("HAL"))
                {
                    ek.setHalEki(true);
                }
                else if (ozellik.Equals("IYELIK"))
                {
                    ek.setIyelikEki(true);
                }
            }
        }
示例#12
0
        /**
         * xml dosyadan ek kumelerini ayiklar. sonuclar ekKumeleri Map'ina atilir.
         *
         * @param ekKumeleriElement
         */
        private void ekKumeleriniOlustur(XmlElement ekKumeleriElement)
        {
            XmlNodeList xmlKumeler = ekKumeleriElement.SelectNodes("ek-kumesi");

            foreach (XmlElement ekKumeEl in xmlKumeler)
            {
                String      kumeAdi       = ekKumeEl.GetAttribute("ad");
                Set <Ek>    kumeEkleri    = new HashedSet <Ek>();
                XmlNodeList xmlKumeEkleri = ekKumeEl.SelectNodes("ek");
                foreach (XmlElement ekEl in xmlKumeEkleri)
                {
                    String ekAdi = ekEl.InnerText;//???:GetTextContext
                    Ek     ek    = this.ekler[ekAdi];
                    if (ek == null)
                    {
                        exit("kume eki bulunamiyor!" + ekAdi);
                    }
                    kumeEkleri.Add(ek);
                }
                ekKumeleri.Add(kumeAdi, kumeEkleri);
            }
        }
示例#13
0
     public HarfDizisi olusumIcinUret(
             Kelime kelime,
             Ek sonrakiEk) {
     foreach (EkOzelDurumu ozelDurum in ozelDurumlar) {
         HarfDizisi ozelDurumSonucu = ozelDurum.olusumIcinUret(kelime, sonrakiEk);
         if (ozelDurumSonucu != null)
             return ozelDurumSonucu;
     }
     return ekUretici.olusumIcinEkUret(kelime.icerik(), sonrakiEk, uretimBilesenleri);
 }
示例#14
0
 public override HarfDizisi olusumIcinUret(Kelime kelime, Ek sonrakiEk)
 {
     return(null);
 }
示例#15
0
 public bool ardindanGelebilirMi(Ek ek)
 {
     return _ardisilEkler.Contains(ek);
 }
示例#16
0
 public EkSiralayici(List<Ek> ekler, Ek baslangicEki)
 {
     this.ekler = ekler;
     this.baslangicEki = baslangicEki;
     this.tum = ekler.Count;
 }
 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);
 }
示例#18
0
 public void ekEkle(Ek ek)
 {
     _ekler.Add(ek);
 }
示例#19
0
 public bool ardindanGelebilirMi(Ek ek)
 {
     return(_ardisilEkler.Contains(ek));
 }
 public override HarfDizisi olusumIcinUret(Kelime kelime, Ek sonrakiEk)
 {
     return null;
 }
 public override HarfDizisi olusumIcinUret(Kelime kelime, Ek sonrakiEk)
 {
     return cozumlemeIcinUret(kelime, null, null);
 }
 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;
 }
 public override HarfDizisi olusumIcinUret(Kelime kelime, Ek sonrakiEk)
 {
     return(cozumlemeIcinUret(kelime, null, null));
 }
示例#24
0
		public virtual HarfDizisi ozelDurumUygula(Alfabe alfabe, Ek ek)
		{
			HarfDizisi dizi = new HarfDizisi(this._icerik, alfabe);
			foreach(KokOzelDurumu ozelDurum in ozelDurumlar)
			{
				if (ozelDurum.yapiBozucumu() && ozelDurum.olusabilirMi(ek))
					ozelDurum.uygula(dizi);
				if (!ozelDurum.olusabilirMi(ek) && ozelDurum.ekKisitlayiciMi())
					return null;
			}
			return dizi;
		}
示例#25
0
        /**
         * Bir eke iliskin ardisil ekler belirlenir. ardisil ekler
         * a) ek kumelerinden
         * b) normal tek olarak
         * c) dogrudan baska bir ekin ardisil eklerinden kopyalanarak
         * elde edilir.
         * Ayrica eger oncelikli ekler belirtilmis ise bu ekler ardisil ek listeisnin en basina koyulur.
         *
         * @param ekElement :  ek xml bileseni..
         * @return Ek referans Listesi.
         * @param anaEk ardisil ekler eklenecek asil ek
         */
        private List <Ek> ardisilEkleriOlustur(Ek anaEk, XmlElement ekElement)
        {
            Set <Ek>   ardisilEkSet   = new HashedSet <Ek>();
            XmlElement ardisilEklerEl = (XmlElement)ekElement.SelectNodes("ardisil-ekler")[0];

            if (ardisilEklerEl == null)
            {
                return(new List <Ek>());
            }

            // tek ekleri ekle.
            XmlNodeList tekArdisilEkler = ardisilEklerEl.SelectNodes("aek");

            foreach (XmlElement element in tekArdisilEkler)
            {
                String ekAdi = element.InnerText;
                Ek     ek    = this.ekler[ekAdi];
                if (ek == null)
                {
                    exit(anaEk.ad() + " icin ardisil ek bulunamiyor! " + ekAdi);
                }
                ardisilEkSet.Add(ek);
            }

            // kume eklerini ekle.
            XmlNodeList kumeEkler = ardisilEklerEl.SelectNodes("kume");

            foreach (XmlElement element in kumeEkler)
            {
                String   kumeAdi    = element.InnerText;
                Set <Ek> kumeEkleri = ekKumeleri[kumeAdi];
                if (kumeEkleri == null)
                {
                    exit("kume bulunamiyor..." + kumeAdi);
                }
                ardisilEkSet.AddAll(kumeEkleri);
            }

            //varsa baska bir ekin ardisil eklerini kopyala.
            XmlAttribute attr = ardisilEklerEl.GetAttributeNode("kopya-ek");

            if (attr != null)
            {
                String kopyaEkadi = attr.Value;
                Ek     ek         = this.ekler[kopyaEkadi];
                if (ek == null)
                {
                    exit(anaEk.ad() + " icin kopyalanacak ek bulunamiyor! " + kopyaEkadi);
                }
                ardisilEkSet.AddAll(ek.ardisilEkler());
            }

            List <Ek> ardisilEkler = new List <Ek>(ardisilEkSet.Count);

            //varsa oncelikli ekleri oku ve ardisil ekler listesinin ilk basina koy.
            // bu tamamen performans ile iliskili bir islemdir.
            XmlElement oncelikliEklerEl = (XmlElement)ekElement.SelectNodes("oncelikli-ekler")[0];

            if (oncelikliEklerEl != null)
            {
                XmlNodeList oncelikliEkler = oncelikliEklerEl.SelectNodes("oek");
                foreach (XmlElement element in oncelikliEkler)
                {
                    String ekAdi = element.InnerText;
                    Ek     ek    = this.ekler[ekAdi];
                    if (ek == null)
                    {
                        exit(anaEk.ad() + " icin oncelikli ek bulunamiyor! " + ekAdi);
                    }
                    if (ardisilEkSet.Contains(ek))
                    {
                        ardisilEkler.Add(ek);
                        ardisilEkSet.Remove(ek);
                    }
                    else
                    {
                        logger.Warn(anaEk.ad() + "icin oncelikli ek:" + ekAdi + " bu ekin ardisil eki degil!");
                    }
                }
            }

            ardisilEkler.AddRange(ardisilEkSet);
            return(ardisilEkler);
        }
示例#26
0
 public virtual HarfDizisi olusumIcinUret(Kelime kelime, Ek sonrakiEk)
 {
     return(ekUretici.olusumIcinEkUret(kelime.icerik(), sonrakiEk, _uretimBilesenleri));
 }
示例#27
0
 /**
  * Ozel durum giris parametresi olan ek'in bu ozel durumun olusmasina
  * izin verip vermeyeegi belirlenir.
  *
  * @param ek
  * @return gelen ek ile bu ozel durum olusabilirse true
  */
 public bool olusabilirMi(Ek ek)
 {
     if (_herZamanOlusur)
         return true;
     if (_sesliEkIleOlusur && ek.sesliIleBaslayabilirMi())
         return true;
     return _gelebilecekEkler.Contains(ek);
 }
示例#28
0
  public HarfDizisi olusumIcinEkUret(HarfDizisi ulanacak, Ek sonrakiEk, List<EkUretimBileseni> bilesenler)
  {
     //TODO: gecici olarak bu sekilde
     return cozumlemeIcinEkUret(ulanacak, null, bilesenler);
 }
示例#29
0
 public virtual HarfDizisi olusumIcinUret(Kelime kelime, Ek sonrakiEk)
 {
     return ekUretici.olusumIcinEkUret(kelime.icerik(), sonrakiEk, _uretimBilesenleri);
 }
 public override HarfDizisi olusumIcinUret(Kelime kelime, Ek sonrakiEk)
 {
     if(sonrakiEk.ad().Equals(TurkceEkAdlari.FIIL_SIMDIKIZAMAN_IYOR))
       return ekUretici.olusumIcinEkUret(kelime.icerik(),sonrakiEk, uretimBilesenleri());
     return null;
 }