public void kelimeBicimlendir(Kelime kelime) { Kok kok = kelime.kok(); HarfDizisi olusan = kelime.icerik(); if (kok.tip().Equals(KelimeTipi.KISALTMA)) { //cozumleme sirasinda eklenmis harf varsa onlari sil. int silinecek = kok.icerik().Length; if (kok.ozelDurumIceriyormu(TurkceKokOzelDurumTipi.KISALTMA_SON_SESSIZ)) { silinecek += 2; } if (kok.ozelDurumIceriyormu(TurkceKokOzelDurumTipi.KISALTMA_SON_SESLI)) { silinecek++; } //kelimenin olusan kismindan kokun icereigini sil. olusan.harfSil(0, silinecek); //simdi kokun orjinal halini ekle. olusan.ekle(0, new HarfDizisi(kok.asil(), alfabe)); if (olusan.Length == kok.asil().Length) { return; } //eger gerekiyorsa kesme isareti koy. if (!olusan.harf(kok.asil().Length - 1).Equals(alfabe.harf('.'))) { olusan.ekle(kok.asil().Length, alfabe.harf('\'')); } } else if (kok.tip() == KelimeTipi.OZEL) { olusan.harfDegistir(0, alfabe.buyukHarf(olusan.ilkHarf())); if (kok.ozelDurumIceriyormu(TurkceKokOzelDurumTipi.KESMESIZ)) { return; } List <Ek> ekler = kelime.ekler(); if (ekler.Count > 1) { Ek ek = (Ek)ekler[1]; if (ek.iyelikEkiMi() || ek.halEkiMi()) { int kesmePozisyonu = kok.icerik().Length; olusan.ekle(kesmePozisyonu, alfabe.harf('\'')); } } } // ozel ic karakter iceren kokler icin bicimleme /* if (kok.ozelDurumlar().contains(TurkceKokOzelDurumlari.OZEL_IC_KARAKTER)) { * //olusan ksimdan koku sil * int silinecek = kok.icerik().length(); * olusan.harfSil(0, silinecek); * //simdi kokun orjinal halini ekle. * olusan.ekle(0, new HarfDizisi(kok.asil())); * }*/ }
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; } }
public void ozelDurumBelirle(Kok kok) { // eger bir fiilin son harfi sesli ise bu dogrudan simdiki zaman ozel durumu olarak ele alinir. // bu ozel durum bilgi tabaninda ayrica belirtilmedigi icin burada kok'e eklenir. aramak -> ar(a)Iyor char sonChar = kok.icerik()[kok.icerik().Length - 1]; if (kok.tip() == KelimeTipi.FIIL && alfabe.harf(sonChar).sesliMi()) { //demek-yemek fiilleri icin bu uygulama yapilamaz. if (!kok.ozelDurumIceriyormu(TurkceKokOzelDurumTipi.FIIL_KOK_BOZULMASI)) { kok.ozelDurumEkle(ozelDurumlar[TurkceKokOzelDurumTipi.SIMDIKI_ZAMAN]); } } }
public void testDegismisIcerikOlustur() { Kok kok = new Kok("ara", KelimeTipi.FIIL); kok.ozelDurumEkle(koz.ozelDurum(TurkceKokOzelDurumTipi.SIMDIKI_ZAMAN));//bu satır java tarafında yok, ama bu olmazsa test cakar Assert.IsTrue(koz.ozelDurumUygula(kok).Length > 0); Assert.AreEqual((koz.ozelDurumUygula(kok))[0], "ar"); Assert.IsTrue(kok.ozelDurumIceriyormu(TurkceKokOzelDurumTipi.SIMDIKI_ZAMAN)); kok = new Kok("kitap", KelimeTipi.ISIM); kok.ozelDurumEkle(koz.ozelDurum(TurkceKokOzelDurumTipi.SESSIZ_YUMUSAMASI)); Assert.IsTrue(koz.ozelDurumUygula(kok).Length > 0); Assert.AreEqual((koz.ozelDurumUygula(kok))[0], "kitab"); String str = "al" + Alfabe.CHAR_ii + "n"; kok = new Kok(str, KelimeTipi.ISIM); kok.ozelDurumEkle(koz.ozelDurum(TurkceKokOzelDurumTipi.ISIM_SESLI_DUSMESI)); Assert.IsTrue(koz.ozelDurumUygula(kok).Length > 0); Assert.AreEqual((koz.ozelDurumUygula(kok))[0], "aln"); kok = new Kok("nakit", KelimeTipi.ISIM); kok.ozelDurumEkle(koz.ozelDurum(TurkceKokOzelDurumTipi.ISIM_SESLI_DUSMESI)); kok.ozelDurumEkle(koz.ozelDurum(TurkceKokOzelDurumTipi.SESSIZ_YUMUSAMASI)); Assert.IsTrue(koz.ozelDurumUygula(kok).Length > 0); Assert.AreEqual((koz.ozelDurumUygula(kok))[0], "nakd"); kok = new Kok("ben", KelimeTipi.ZAMIR); kok.ozelDurumEkle(koz.ozelDurum(TurkceKokOzelDurumTipi.TEKIL_KISI_BOZULMASI)); Assert.IsTrue(koz.ozelDurumUygula(kok).Length > 0); Assert.AreEqual((koz.ozelDurumUygula(kok))[0], "ban"); kok = new Kok("sen", KelimeTipi.ZAMIR); kok.ozelDurumEkle(koz.ozelDurum(TurkceKokOzelDurumTipi.TEKIL_KISI_BOZULMASI)); Assert.IsTrue(koz.ozelDurumUygula(kok).Length > 0); Assert.AreEqual((koz.ozelDurumUygula(kok))[0], "san"); kok = new Kok("de", KelimeTipi.FIIL); kok.ozelDurumEkle(koz.ozelDurum(TurkceKokOzelDurumTipi.FIIL_KOK_BOZULMASI)); Assert.IsTrue(koz.ozelDurumUygula(kok).Length > 0); Assert.AreEqual((koz.ozelDurumUygula(kok))[0], "di"); kok = new Kok("ye", KelimeTipi.FIIL); kok.ozelDurumEkle(koz.ozelDurum(TurkceKokOzelDurumTipi.FIIL_KOK_BOZULMASI)); Assert.IsTrue(koz.ozelDurumUygula(kok).Length > 0); Assert.AreEqual((koz.ozelDurumUygula(kok))[0], "yi"); }
public bool kokGirisDegismiVarsaUygula(Kok kok, HarfDizisi kokDizi, HarfDizisi girisDizi) { //turkce'de sadece kisaltmalarda bu metoda ihtiyacimiz var. char c = kok.KisaltmaSonSeslisi; if (girisDizi.Length == 0) { return(false); } if (kok.tip().Equals(KelimeTipi.KISALTMA) && c != 0) { TurkceHarf h = alfabe.harf(c); //toleransli cozumleyicide kok giristen daha uzun olabiliyor. // o nedenle asagidaki kontrolun yapilmasi gerekiyor. int kokBoyu = kok.icerik().Length; if (kokBoyu <= girisDizi.Length) { girisDizi.ekle(kokBoyu, h); } else { girisDizi.ekle(h); } kokDizi.ekle(h); if (kok.ozelDurumIceriyormu(TurkceKokOzelDurumTipi.KISALTMA_SON_SESSIZ)) { //gene toleransli cozumleyicinin hata vermemesi icin asagidaki kontrole ihtiyacimiz var if (kokBoyu < girisDizi.Length) { girisDizi.ekle(kokBoyu + 1, alfabe.harf('b')); } else { girisDizi.ekle(alfabe.harf('b')); } kokDizi.ekle(alfabe.harf('b')); } return(true); } return(false); }
public String[] ozelDurumUygula(Kok kok) { //kok icinde ozel durum yok ise cik.. if (!kok.ozelDurumVarmi()) { return(new String[0]); } HarfDizisi hdizi = new HarfDizisi(kok.icerik(), alfabe); IList degismisIcerikler = new ArrayList(1); //ara sesli dusmesi nedeniyle bazen yapay oarak kok'e ters sesli etkisi ozel durumunun eklenmesi gerekir. // nakit -> nakde seklinde. normal kosullarda "nakda" olusmasi gerekirdi. bool eskiSonsesliInce = false; if (kok.ozelDurumIceriyormu(TurkceKokOzelDurumTipi.ISIM_SESLI_DUSMESI)) { eskiSonsesliInce = hdizi.sonSesli().inceSesliMi(); } bool yapiBozucuOzelDurumvar = false; //ters sesli ozel durumu yapi bozucu ama sadece seslinin tipini degistirdiginden //islemeye gerek yok. if (kok.ozelDurumDizisi().Length == 1 && kok.ozelDurumIceriyormu(TurkceKokOzelDurumTipi.TERS_SESLI_EK)) { return(new String[0]); } // kok uzerindeki ozel durumlar basta sona taranip ozel durum koke uygulaniyor. foreach (KokOzelDurumu _ozelDurum in kok.ozelDurumDizisi()) { // kucultme ozel durumunda problem var, cunku kok'te hem kucultme hem yumusama uygulaniyor. if (_ozelDurum == null) { //Console.Write("kok = " + kok); //Environment.Exit(-1); logger.Warn("null ozle durum!. Kok:" + kok); return(new String[0]); } if (!_ozelDurum.Equals(ozelDurum(TurkceKokOzelDurumTipi.KUCULTME))) { _ozelDurum.uygula(hdizi); } if (_ozelDurum.yapiBozucumu()) { yapiBozucuOzelDurumvar = true; } } // ara sesli dusmesi durumunda dusen sesi ile dustukten sonra olusan seslinin farkli olmasi durumunda // kok'e bir de ters sesli ek ozel durumu ekleniyor., if (kok.ozelDurumIceriyormu(TurkceKokOzelDurumTipi.ISIM_SESLI_DUSMESI) || kok.ozelDurumIceriyormu(TurkceKokOzelDurumTipi.FIIL_ARA_SESLI_DUSMESI)) { if (!hdizi.sonSesli().inceSesliMi() && eskiSonsesliInce) { kok.ozelDurumEkle(ozelDurumlar[TurkceKokOzelDurumTipi.TERS_SESLI_EK]); } } if (yapiBozucuOzelDurumvar) { degismisIcerikler.Add(hdizi.ToString()); } if (kok.ozelDurumVarmi() && kok.ozelDurumIceriyormu(TurkceKokOzelDurumTipi.KUCULTME) && kok.ozelDurumIceriyormu(TurkceKokOzelDurumTipi.SESSIZ_YUMUSAMASI)) { HarfDizisi tempDizi = new HarfDizisi(kok.icerik(), alfabe); ozelDurum(TurkceKokOzelDurumTipi.KUCULTME).uygula(tempDizi); degismisIcerikler.Add(tempDizi.ToString()); } // yani ozel durumlar eklenmis olabileceginden koke ods'u tekrar koke esle. String[] tempArr = new String[degismisIcerikler.Count]; degismisIcerikler.CopyTo(tempArr, 0); return(tempArr); }