public void duzyaziOzelDurumOku(Kok kok, String okunanIcerik, String[] parcalar)
        {
            for (int i = 2; i < parcalar.Length; i++)
            {
                String _ozelDurum = parcalar[i];

                //kisaltma ozel durumunun analizi burada yapiliyor.
                if (_ozelDurum.StartsWith(TurkceKokOzelDurumTipi.KISALTMA_SON_SESLI.KisaAd))
                {
                    int loc = _ozelDurum.IndexOf(':');
                    if (loc > 0)
                    {
                        String parca    = _ozelDurum.Substring(loc + 1);
                        char   sonSesli = parca[0];
                        if (!alfabe.harf(sonSesli).sesliMi())
                        {
                            logger.Warn("Hatali kisaltma harfi.. Sesli bekleniyordu." + _ozelDurum);
                        }
                        kok.KisaltmaSonSeslisi = sonSesli;
                        if (parca.Length > 1)
                        {
                            kok.ozelDurumEkle(ozelDurumlar[TurkceKokOzelDurumTipi.KISALTMA_SON_SESSIZ]);
                        }
                        else
                        {
                            kok.ozelDurumCikar(TurkceKokOzelDurumTipi.KISALTMA_SON_SESLI);
                        }
                    }
                    else
                    {
                        char sonHarf = kok.icerik()[kok.icerik().Length - 1];
                        if (!alfabe.harf(sonHarf).sesliMi())
                        {
                            kok.KisaltmaSonSeslisi = 'e';
                            kok.ozelDurumEkle(ozelDurumlar[TurkceKokOzelDurumTipi.KISALTMA_SON_SESLI]);
                        }
                    }
                    continue;
                }

                //diger ozel durumlarin elde edilmesi..
                KokOzelDurumu oz = ozelDurum(_ozelDurum);
                if (oz != null)
                {
                    kok.ozelDurumEkle(oz);
                }
                else
                {
                    logger.Warn("Hatali kok bileseni" + kok.icerik() + " Token: " + _ozelDurum);
                }
            }

            //kisaltmalari ve ozel karakter iceren kokleri asil icerik olarak ata.
            if (kok.tip() == KelimeTipi.KISALTMA || kok.ozelDurumIceriyormu(TurkceKokOzelDurumTipi.OZEL_IC_KARAKTER))
            {
                kok.Asil = okunanIcerik;
            }
        }
Пример #2
0
        /**
         * İkili (Binary) sözlükten bir kök okur. çağrıldıkça bir sonraki kökü alır.
         *
         * @return bir sonraki kök. Eğer okunacak kök kalmamışsa null
         */
        public Kok oku()
        {
            String icerik = string.Empty;

            //kok icerigini oku. eger dosya sonuna gelinmisse (EndOfStreamException) null dondur.
            try
            {
                int len = binReader.ReadByte() * 255 + binReader.ReadByte();
                icerik = Encoding.UTF8.GetString(binReader.ReadBytes(len));
            }
            catch (EndOfStreamException)
            {
                this.Kapat();
                return(null);
            }

            int    len1 = binReader.ReadByte() * 255 + binReader.ReadByte();
            String asil = Encoding.UTF8.GetString(binReader.ReadBytes(len1));

            // Tip bilgisini oku (1 byte)
            string     tipstr = binReader.ReadByte().ToString();
            KelimeTipi tip    = (KelimeTipi)Enum.Parse(typeof(KelimeTipi), tipstr);
            Kok        kok    = new Kok(icerik, tip);

            if (asil.Length != 0)
            {
                kok.Asil = asil;
            }

            char c = Encoding.UTF8.GetChars(binReader.ReadBytes(2))[0];

            if (char.IsLetter(c))
            {
                kok.KisaltmaSonSeslisi = c;
            }

            // Özel durum sayısını (1 byte) ve ozel durumlari oku.
            int ozelDurumSayisi = binReader.ReadByte();

            for (int i = 0; i < ozelDurumSayisi; i++)
            {
                int           ozelDurum = binReader.ReadByte();
                KokOzelDurumu oz        = ozelDurumlar.ozelDurum(ozelDurum);
                kok.ozelDurumEkle(oz);
            }
            int frekans = binReader.ReadByte() * 255 * 255 * 255 + binReader.ReadByte() * 255 * 255
                          + binReader.ReadByte() * 255 + binReader.ReadByte();

            if (frekans != 0)
            {
                kok.Frekans = frekans;
            }
            return(kok);
        }
Пример #3
0
        /// <summary> sadece ilk acilista kullanilan bir metod
        ///
        /// </summary>
        /// <param name="tip">
        /// </param>
        public virtual void  ozelDurumCikar(KokOzelDurumTipi tip)
        {
            if (!ozelDurumIceriyormu(tip))
            {
                return;
            }
            KokOzelDurumu[] yeni = new KokOzelDurumu[ozelDurumlar.Length - 1];
            int             j    = 0;

            foreach (KokOzelDurumu oz in ozelDurumlar)
            {
                if (!oz.tip().Equals(tip))
                {
                    yeni[j++] = oz;
                }
            }
            this.ozelDurumlar = yeni;
        }
Пример #4
0
 /// <summary> koke ozel durum ekler. burada dizi kullaniminda kaynak konusunda cimrilik ettigimizden
 /// her yeni ozel durum icin dizi boyutunu bir buyuttuk. ayrica tekrar olmamasini da sagliyoruz.
 /// Normalde bu islem Set icin c*k daha kolay bir yapida olabilirdi set.add() ancak Set'in kaynak tuketimi
 /// diziden daha fazla.
 ///
 /// </summary>
 /// <param name="ozelDurum">
 /// </param>
 public virtual void  ozelDurumEkle(KokOzelDurumu ozelDurum)
 {
     if (ozelDurumlar.Length == 0)
     {
         ozelDurumlar    = new KokOzelDurumu[1];
         ozelDurumlar[0] = ozelDurum;
     }
     else
     {
         if (ozelDurumIceriyormu(ozelDurum.tip()))
         {
             return;
         }
         KokOzelDurumu[] yeni = new KokOzelDurumu[ozelDurumlar.Length + 1];
         for (int i = 0; i < ozelDurumlar.Length; i++)
         {
             yeni[i] = ozelDurumlar[i];
         }
         yeni[ozelDurumlar.Length] = ozelDurum;
         this.ozelDurumlar         = yeni;
     }
 }