コード例 #1
0
        public List <Kok> getAdayKokler(String giris)
        {
            List <Kok> adaylar    = new List <Kok>(3);
            int        girisIndex = 0;
            KokDugumu  node       = agac.getKokDugumu();

            while (girisIndex < giris.Length)
            {
                node = node.altDugumGetir(giris[girisIndex]);
                if (node == null)
                {
                    break;
                }
                if (node.getKok() != null)
                {
                    // buradaki kodu daha basit ama biraz yavas hale getirdim.
                    if (giris.StartsWith((String)node.getKelime()))
                    {
                        node.tumKokleriEkle(adaylar);
                    }
                }
                girisIndex++;
            }
            return(adaylar);
        }
コード例 #2
0
ファイル: KokAgaci.cs プロジェクト: mgokturkayan/nzemberek
        /**
         * Aranan bir kök düðümünü bulur.
         *
         * @param str
         * @return Aranan kök ve eþ seslilerini taþýyan liste, bulunamazsa null.
         */
        public List <Kok> bul(String str)
        {
            char[] girisChars = str.ToCharArray();
            int    girisIndex = 0;
            // Basit bir tree traverse algoritmasý ile kelime bulunur.
            KokDugumu node = baslangicDugumu;

            while (node != null && girisIndex < girisChars.Length)
            {
                if (node.getKelime() != null && node.getKelime().Equals(str))
                {
                    break;
                }
                if (logger.IsInfoEnabled)
                {
                    logger.Info("Harf: " + node.getHarf() + " Taranan Kelime: " + node.getKelime());
                }
                node = node.altDugumGetir(girisChars[girisIndex++]);
            }
            if (node != null)
            {
                return(node.tumKokleriGetir());
            }
            return(null);
        }
コード例 #3
0
        public void walk(KokDugumu dugum, String olusan)
        {
            String tester = (olusan + dugum.getHarf()).Trim();

            walkCount++;
            if (dugum != null)
            {
                dugumSayisi++;
                if (dugum.getKok() != null)
                {
                    /*              if (dugum.getKelime() != null &&
                     *                              !dugum.getKelime().equals(dugum.getKok().icerik())){
                     *                      System.out.println("!!!!! " + dugum.getKelime() + " - " + dugum.getKok().icerik());
                     *              }*/
                    kokTasiyanDugumSayisi++;
                    if (set != null)
                    {
                        set.Add(dugum.getKok());
                    }
                }
                if (dugum.getEsSesliler() != null)
                {
                    esSesliTasiyanDugumSayisi++;
                    if (set != null)
                    {
                        set.AddAll(dugum.getEsSesliler());
                    }
                }
                if (!dugum.altDugumVarMi())
                {
                    ucDugumSayisi++;
                }
                else
                {
                    KokDugumu[] altDugumler = dugum.altDugumDizisiGetir();
                    int         top         = 0;
                    foreach (KokDugumu altDugum in altDugumler)
                    {
                        if (altDugum != null)
                        {
                            top++;
                        }
                    }
                    dugumSayilari[top]++;
                }
            }
            KokDugumu[] altDugumlerX = dugum.altDugumDizisiGetir();
            if (altDugumlerX != null)
            {
                foreach (KokDugumu altDugum in altDugumlerX)
                {
                    if (altDugum != null)
                    {
                        this.walk(altDugum, tester);
                    }
                }
            }
        }
コード例 #4
0
 /**
  * Verilen düðümü bu düðüme alt düðüm olarak ekler.
  * Dönüþ deðeri eklenen düðümdür
  *
  * @param dugum
  * @return Eklenen düðüm
  */
 public KokDugumu addNode(KokDugumu dugum)
 {
     if (altDugumler == null)
     {
         altDugumler = new AltDugumListesi();
     }
     altDugumler.ekle(dugum);
     return(dugum);
 }
コード例 #5
0
 /**
  * Alt düðümleri dizi olarak döndürür.
  * @return KokDugumu[] cinsinden alt düðümler dizisi
  */
 public KokDugumu[] altDugumlerDizisiGetir()
 {
     if (dugumler != null)
     {
         return(dugumler);
     }
     else
     {
         KokDugumu[] ret = new KokDugumu[tumDugumler.Values.Count];
         tumDugumler.Values.CopyTo(ret, 0);
         return(ret);
     }
 }
コード例 #6
0
        /**
         * Ağaç üzerinde  yürüyerek ASCII toleranslı karşılaştırma ile
         * kök adaylarını bulur. Rekürsiftir.
         *
         * @param dugum  : başlangıç düğümü
         * @param olusan : Yürüme sırasında oluşan kelime (düğümlerin karakter değerlerinden)
         */
        public void yuru(KokDugumu dugum, String olusan)
        {
            String tester = (olusan + dugum.getHarf()).Trim();

            walkCount++;
            if (dugum.getKok() != null)
            {
                if (logger.IsInfoEnabled)
                {
                    logger.Info("Kok : " + dugum.getKelime());
                }
                if (asciiTolaransliKarsilastir((String)dugum.getKelime(), giris))
                {
                    // Aday kok bulundu.
                    dugum.tumKokleriEkle(adaylar);
                }
                else
                {
                    return;
                }
            }
            else
            {
                if (asciiTolaransliKarsilastir(tester, giris))
                {//TODO böölemi ! idi
                    return;
                }
            }

            int seviye = tester.Length - 1; //TODO böölemi -1 yoktu

            if (seviye == giris.Length)
            {
                return;
            }
            // Uygun tüm alt dallarda yürü
            foreach (KokDugumu altDugum in dugum.altDugumDizisiGetir())
            {
                if (altDugum != null)
                {
                    if (agac.getAlfabe().asciiToleransliKiyasla(altDugum.getHarf(), giris[seviye]))
                    {
                        this.yuru(altDugum, tester);
                    }
                }
            }
        }
コード例 #7
0
     public void walk(KokDugumu dugum, String olusan)
     {
         String tester = (olusan + dugum.getHarf()).Trim();
         walkCount++;
         if (dugum != null){
             dugumSayisi++;
             if(dugum.getKok() != null){
 /*            	if (dugum.getKelime() != null &&
         			    !dugum.getKelime().equals(dugum.getKok().icerik())){
         		    System.out.println("!!!!! " + dugum.getKelime() + " - " + dugum.getKok().icerik());
         	    }*/
                 kokTasiyanDugumSayisi++;
                 if(set != null){
                     set.Add(dugum.getKok());
                 }
             }
             if(dugum.getEsSesliler() != null){
                 esSesliTasiyanDugumSayisi++;
                 if(set!= null){
             	    set.AddAll(dugum.getEsSesliler());
                 }
             }
             if(!dugum.altDugumVarMi()){
                 ucDugumSayisi++;
             }else{
                 KokDugumu[] altDugumler = dugum.altDugumDizisiGetir();
                 int top = 0;
                 foreach (KokDugumu altDugum in altDugumler) {
                     if(altDugum != null) top++;
                 }
                 dugumSayilari[top]++;
             }
         }
         KokDugumu[] altDugumlerX = dugum.altDugumDizisiGetir();
         if (altDugumlerX != null){
     	    foreach (KokDugumu altDugum in altDugumlerX){
     		    if (altDugum != null){
     			    this.walk(altDugum, tester);
     		    }
     	    }
         }
     }
コード例 #8
0
 /**
  * Verilen düðümü alt düðüm olarak ekler. eger alt düðümlerinin sayisi
  * CEP_BUYUKLUGU degerini asmissa bir HashMap oluþturur
  * @param dugum
  */
 public void ekle(KokDugumu dugum)
 {
     if (index == CEP_BUYUKLUGU)
     {
         if (tumDugumler == null)
         {
             tumDugumler = new Dictionary <Char, KokDugumu>(CEP_BUYUKLUGU + 2);
             for (int i = 0; i < CEP_BUYUKLUGU; i++)
             {
                 tumDugumler.Add(dugumler[i].getHarf(), dugumler[i]);
             }
             dugumler = null;
         }
         tumDugumler.Add(dugum.getHarf(), dugum);
     }
     else
     {
         dugumler[index++] = dugum;
     }
 }
コード例 #9
0
        private void yuru(KokDugumu dugum, String olusan)
        {
            String tester = olusan;

            if (dugum.getHarf() != '\0')
            {
                tester += dugum.getHarf();
            }
            if (dugum.getKok() != null)
            {
                distanceCalculationCount++;
                if (MetinAraclari.isInSubstringEditDistance((String)dugum.getKelime(), giris, tolerans))
                {
                    // Aday kök bulundu
                    adaylar.Add(dugum.getKok());
                }
                else
                {
                    // Mesafe sınırı aşıldı.
                    return;
                }
            }
            else
            {
                if (!MetinAraclari.isInSubstringEditDistance(tester.Trim(), giris, tolerans))
                {
                    // Ara stringde mesafe sınırı aşıldı
                    return;
                }
            }

            foreach (KokDugumu altDugum in dugum.altDugumDizisiGetir())
            {
                if (altDugum != null)
                {
                    this.yuru(altDugum, tester);
                }
            }
        }
コード例 #10
0
        private void yuru(KokDugumu dugum, String olusan) {
        String tester = olusan;
        if (dugum.getHarf() != '\0')
            tester += dugum.getHarf();
        if (dugum.getKok() != null) {
            distanceCalculationCount++;
            if (MetinAraclari.isInSubstringEditDistance((String) dugum.getKelime(), giris, tolerans)) {
            	// Aday kök bulundu
                adaylar.Add(dugum.getKok());
            } else {
                // Mesafe sınırı aşıldı.
                return;
            }
        } else {
            if (!MetinAraclari.isInSubstringEditDistance(tester.Trim(), giris, tolerans)) {
            	// Ara stringde mesafe sınırı aşıldı
                return;
            }
        }

        foreach (KokDugumu altDugum in dugum.altDugumDizisiGetir()) {
            if (altDugum != null) {
                this.yuru(altDugum, tester);
            }
        }
    }
コード例 #11
0
ファイル: KokDugumu.cs プロジェクト: ibrahimatay/nzemberek
 /**
  * Verilen düðümü alt düðüm olarak ekler. eger alt düðümlerinin sayisi
  * CEP_BUYUKLUGU degerini asmissa bir HashMap oluþturur
  * @param dugum
  */
 public void ekle(KokDugumu dugum)
 {
     if (index == CEP_BUYUKLUGU)
     {
         if (tumDugumler == null)
         {
             tumDugumler = new Dictionary<Char, KokDugumu>(CEP_BUYUKLUGU + 2);
             for (int i = 0; i < CEP_BUYUKLUGU; i++)
             {
                 tumDugumler.Add(dugumler[i].getHarf(), dugumler[i]);
             }
             dugumler = null;
         }
         tumDugumler.Add(dugum.getHarf(), dugum);
     }
     else
     {
         dugumler[index++] = dugum;
     }
 }
コード例 #12
0
ファイル: KokDugumu.cs プロジェクト: ibrahimatay/nzemberek
 /**
  * Alt düðümleri dizi olarak döndürür.
  * @return KokDugumu[] cinsinden alt düðümler dizisi
  */
 public KokDugumu[] altDugumlerDizisiGetir()
 {
     if (dugumler != null)
     {
         return dugumler;
     }
     else
     {
         KokDugumu[] ret = new KokDugumu[tumDugumler.Values.Count];
         tumDugumler.Values.CopyTo(ret, 0);
         return ret;
     }
 }
コード例 #13
0
ファイル: KokDugumu.cs プロジェクト: ibrahimatay/nzemberek
 public void kopyala(KokDugumu kaynak)
 {
     this.kok = kaynak.getKok();
     this.kelime = kaynak.getKelime();
     this.esSesliler = kaynak.getEsSesliler();
 }
コード例 #14
0
ファイル: KokDugumu.cs プロジェクト: ibrahimatay/nzemberek
 /**
  * Verilen düðümü bu düðüme alt düðüm olarak ekler.
  * Dönüþ deðeri eklenen düðümdür
  *
  * @param dugum
  * @return Eklenen düðüm
  */
 public KokDugumu addNode(KokDugumu dugum)
 {
     if (altDugumler == null)
     {
         altDugumler = new AltDugumListesi();
     }
     altDugumler.ekle(dugum);
     return dugum;
 }
コード例 #15
0
 public void kopyala(KokDugumu kaynak)
 {
     this.kok        = kaynak.getKok();
     this.kelime     = kaynak.getKelime();
     this.esSesliler = kaynak.getEsSesliler();
 }
コード例 #16
0
ファイル: KokAgaci.cs プロジェクト: mgokturkayan/nzemberek
 public KokAgaci(KokDugumu baslangicDugumu, Alfabe alfabe)
 {
     this.baslangicDugumu = baslangicDugumu;
     this.alfabe          = alfabe;
 }
コード例 #17
0
        /**
         * Ağaç üzerinde  yürüyerek ASCII toleranslı karşılaştırma ile
         * kök adaylarını bulur. Rekürsiftir.
         *
         * @param dugum  : başlangıç düğümü
         * @param olusan : Yürüme sırasında oluşan kelime (düğümlerin karakter değerlerinden)
         */
        public void yuru(KokDugumu dugum, String olusan) 
        {
            String tester = (olusan + dugum.getHarf()).Trim();
            walkCount++;
            if (dugum.getKok() != null) 
            {
                if (logger.IsInfoEnabled) logger.Info("Kok : " + dugum.getKelime());
                if (asciiTolaransliKarsilastir((String) dugum.getKelime(), giris)) 
                {
                    // Aday kok bulundu.
                    dugum.tumKokleriEkle(adaylar);
                }
                else 
                {
                    return;
                }
            }
            else 
            {
                if (asciiTolaransliKarsilastir(tester, giris)) 
                {//TODO böölemi ! idi
                    return;
                }
            }

            int seviye = tester.Length - 1; //TODO böölemi -1 yoktu
            if(seviye == giris.Length) return;
            // Uygun tüm alt dallarda yürü
            foreach (KokDugumu altDugum in dugum.altDugumDizisiGetir()) 
            {
               if (altDugum != null) 
               {
                   if (agac.getAlfabe().asciiToleransliKiyasla(altDugum.getHarf(), giris[seviye]))
                       this.yuru(altDugum, tester);
               }
            }
        }
コード例 #18
0
ファイル: KokAgaci.cs プロジェクト: mgokturkayan/nzemberek
        /**
         * Verilen kök icerigini aðaca ekler.
         *
         * @param icerik
         * @param kok
         */
        public void ekle(String icerik, Kok kok)
        {
            //System.out.println("Kelime: " + icerik);
            char[]    hd          = icerik.ToCharArray();
            KokDugumu node        = baslangicDugumu;
            KokDugumu oncekiDugum = null;
            int       idx         = 0;

            // null alt düðüm bulana dek veya kelimenin sonuna dek alt düðümlerde ilerle
            while (idx < hd.Length)
            {
                oncekiDugum = node;
                node        = node.altDugumGetir(hd[idx]);
                if (node == null)
                {
                    break;
                }
                idx++;
            }

            /**
             * Aðaç üzerinde ilerlerken kelimemizin sonuna kadar gitmiþiz.
             * kelimemizi bu düðüme ekleriz.
             * Örneðin
             * i-s-t-->istim þeklindeki dala "is" kelimesini eklemek gibi.
             * i-s-t-->istim
             *   |-->is
             *
             * veya
             *
             * i-s-->istim e is gelirse de
             * i-s-t-->istim
             *   |-->is
             *
             * i-s-->is  e "is" gelirse
             * i-s-->is(2) olmalý.
             *
             */
            if (idx == hd.Length)
            {
                if (node.altDugumVarMi())
                {
                    node.kokEkle(kok);
                    node.setKelime((IEnumerable <char>)icerik);
                }
                // Eþ sesli!
                else if (node.getKelime().Equals(icerik))
                {
                    node.kokEkle(kok);
                    return;
                }
                else if (node.getKok() != null)
                {
                    //TODO : Burada charenumerable'dan son chari oldukça kazma bir yöntemle alýyoruz. Bunu incelemek lazým.
                    KokDugumu aNewNode = node.addNode(new KokDugumu(node.getKelime().ToString().ToCharArray()[idx]));
                    aNewNode.kopyala(node);
                    node.temizle();
                    node.kokEkle(kok);
                    node.setKelime(icerik);
                }
                return;
            }

            /**
             * Kaldýðýmýz düðüme baðlý bir kök yoksa bu kök için bir düðüm oluþturup ekleriz.
             */
            if (oncekiDugum.getKok() == null && idx < hd.Length)
            {
                oncekiDugum.addNode(new KokDugumu(hd[idx], icerik, kok));
                return;
            }

            if (oncekiDugum.getKelime().Equals(icerik))
            {
                oncekiDugum.kokEkle(kok);
                return;
            }

            /**
             * Düðümde duran "istimlak" ve gelen kök = "istimbot" için,
             * i-s-t-i-m
             * e kadar ilerler. daha sonra "istimlak" için "l" düðümünü oluþturup kökü baðlar
             * i-s-t-i-m-l-->istimlak
             * sonra da diðer düðüm için "b" düðümünü oluþturup gene "m" düðümüne baðlar
             * i-s-t-i-m-l-->istimlak
             *         |-b-->istimbot
             *
             * Eðer istimlak düðümü baðlanmýþsa ve "istim" düðümü eklenmek üzere
             * elimize gelmiþe
             * i-s-t-i-m-l-->istimlak
             * tan sonra istim, "m" düðümüne doðrudan baðlanýr.
             * i-s-t-i-m-l-->istimlak
             *         |-->istim
             *
             */
            char[] nodeHd = ((String)oncekiDugum.getKelime()).ToCharArray();
            //char[] nodeChars = ((String) oncekiDugum.getKelime()).toCharArray();
            KokDugumu newNode = oncekiDugum;

            if (idx == nodeHd.Length)
            {
                newNode.addNode(new KokDugumu(hd[idx], icerik, kok));
                return;
            }

            //TODO : Ayný kazmalýk, kelimenin boyunu alýrken, hepsi CharSequence yüzünden
            if (oncekiDugum.getKelime().ToString().Length == idx)
            {
                newNode.addNode(new KokDugumu(hd[idx], icerik, kok));
                return;
            }

            if (nodeHd.Length <= hd.Length)
            {
                while (idx < nodeHd.Length && nodeHd[idx] == hd[idx])
                {
                    newNode = newNode.addNode(new KokDugumu(nodeHd[idx]));
                    idx++;
                }

                // Kisa dugumun eklenmesi.
                if (idx < nodeHd.Length)
                {
                    KokDugumu temp = newNode.addNode(new KokDugumu(nodeHd[idx]));
                    temp.kopyala(oncekiDugum);
                }
                else
                {
                    newNode.kopyala(oncekiDugum);
                }

                // Uzun olan dugumun (yeni gelen) eklenmesi, es anlamlilari kotar
                newNode.addNode(new KokDugumu(hd[idx], icerik, kok));
                oncekiDugum.temizle();
//Tankut Java-R42 ile silindi.                return;
            }

            /**
             *
             * Eðer köke önce "istimlak" ve sonra "istifa" gelirse
             * i-s-t-i-m-l-->istimlak
             * daha sonra gene son ortak harf olan "i" ye "f" karakterli düðümü
             * oluþturup istifayý baðlar
             * istimlak ta "m" düðümüne baðlý kalýr.
             * i-s-t-i-m-->istimlak
             *       |-f-->istifa
             *
             */

            else
            {
                while (idx < hd.Length && hd[idx] == nodeHd[idx])
                {
                    newNode = newNode.addNode(new KokDugumu(hd[idx]));
                    idx++;
                }
                // Kisa dugumun eklenmesi.
                if (idx < hd.Length)
                {
                    newNode.addNode(new KokDugumu(hd[idx], icerik, kok));
                }
                else
                {
                    newNode.kokEkle(kok);
                    newNode.setKelime(icerik);
                }

                // Uzun olan dugumun (yeni gelen) eklenmesi.
                newNode = newNode.addNode(new KokDugumu(nodeHd[idx]));
                newNode.kopyala(oncekiDugum);
                // Es seslileri tasi.
                oncekiDugum.temizle();
//Tankut Java-R42 ile silindi.                return;
            }
        }
コード例 #19
0
ファイル: KokAgaci.cs プロジェクト: ibrahimatay/nzemberek
 public KokAgaci(KokDugumu baslangicDugumu, Alfabe alfabe)
 {
     this.baslangicDugumu = baslangicDugumu;
     this.alfabe = alfabe;
 }