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); } } } }
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); }
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); } } }
/** * 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); } } } }
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); } } } }
/** * 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; } }
public void kopyala(KokDugumu kaynak) { this.kok = kaynak.getKok(); this.kelime = kaynak.getKelime(); this.esSesliler = kaynak.getEsSesliler(); }
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); } } }
/** * 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); } } }