/** * 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; } } }
public HarfDizisi cozumlemeIcinEkUret(HarfDizisi ulanacak, HarfDizisi giris, List <EkUretimBileseni> bilesenler) { HarfDizisi sonuc = new HarfDizisi(4); TurkceHarf sonSesli = ulanacak.sonSesli(); for (int i = 0; i < bilesenler.Count; i++) { EkUretimBileseni ekUretimBileseni = bilesenler[i]; TurkceHarf harf = ekUretimBileseni.harf(); switch (ekUretimBileseni.kural()) { case UretimKurali.HARF: sonuc.ekle(harf); break; case UretimKurali.KAYNASTIR: if (ulanacak.sonHarf().sesliMi()) { sonuc.ekle(harf); } break; case UretimKurali.SERTLESTIR: if (ulanacak.sonHarf().sertMi()) { sonuc.ekle(harf.sertDonusum()); } else { sonuc.ekle(harf); } break; case UretimKurali.SESLI_AE: if (i == 0 && ulanacak.sonHarf().sesliMi()) { break; } else { sonSesli = sesliUretici.sesliBelirleAE(sonSesli); sonuc.ekle(sonSesli); } break; case UretimKurali.SESLI_IU: if (i == 0 && ulanacak.sonHarf().sesliMi()) { break; } else { sonSesli = sesliUretici.sesliBelirleIU(sonSesli); sonuc.ekle(sonSesli); } break; } } return(sonuc); }
public TurkceSesliUretici(Alfabe alfabe) { HARF_a = alfabe.harf('a'); HARF_e = alfabe.harf('e'); HARF_i = alfabe.harf('i'); HARF_ii = alfabe.harf(Alfabe.CHAR_ii); HARF_u = alfabe.harf('u'); HARF_uu = alfabe.harf(Alfabe.CHAR_uu); }
public EkUreticiTr(Alfabe alfabe) { this.sesliUretici = new TurkceSesliUretici(alfabe); HARF_a = alfabe.harf('a'); HARF_e = alfabe.harf('e'); HARF_i = alfabe.harf('i'); HARF_ii = alfabe.harf(Alfabe.CHAR_ii); HARF_u = alfabe.harf('u'); HARF_uu = alfabe.harf(Alfabe.CHAR_uu); }
public override HarfDizisi cozumlemeIcinUret(Kelime kelime, HarfDizisi giris, HarfDizisiKiyaslayici kiyaslayici) { TurkceHarf son = kelime.sonHarf(); if (son.sesliMi() || ((son.charDeger() == 'r') || son.charDeger() == ('l')) && kelime.icerik().sesliSayisi() > 1) { return(T); } return(null); }
public TurkceHarf sesliBelirleAE(TurkceHarf sonSesli) { if (sonSesli.inceSesliMi()) { return(HARF_e); } else { return(HARF_a); } }
public void testLowerUpperCase() { TurkceHarf kucukI = alfabe.harf(Alfabe.CHAR_ii); TurkceHarf harfI = alfabe.buyukHarf(kucukI); Assert.AreEqual(harfI.charDeger(), 'I'); TurkceHarf i = alfabe.harf('i'); TurkceHarf harfBuyuki = alfabe.buyukHarf(i); Assert.AreEqual(harfBuyuki.charDeger(), 'İ'); }
public void testHarfErisim() { TurkceHarf harf = new TurkceHarf('a', 1); harf.setSesli(true); TurkceHarf okunan = alfabe.harf('a'); Assert.AreEqual(harf.charDeger(), okunan.charDeger()); Assert.IsTrue(harf.sesliMi()); }
/** * en son kalin sesli harfi bulup onu ince formu ile degistirir. * ornegin saat -> saAt haline donusur. ince a harfi icin TurkceAlfabe sinifini inceleyin * * @param dizi */ public void uygula(HarfDizisi dizi) { for (int i = dizi.Length - 1; i >= 0; i--) { TurkceHarf h = dizi.harf(i); if (h.sesliMi() && !h.inceSesliMi()) { dizi.harfDegistir(i, _alfabe.kalinSesliIncelt(dizi.harf(i))); } } }
public Set <TurkceHarf> olasiBaslangicHarfleri(List <EkUretimBileseni> bilesenler) { Set <TurkceHarf> kume = new HashedSet <TurkceHarf>();//TOREMEMBER 4 for (int i = 0; i < bilesenler.Count; i++) { EkUretimBileseni bilesen = bilesenler[i]; TurkceHarf harf = bilesen.harf(); switch (bilesen.kural()) { case UretimKurali.HARF: kume.Add(harf); return(kume); case UretimKurali.KAYNASTIR: kume.Add(harf); break; case UretimKurali.SERTLESTIR: kume.Add(harf); kume.Add(harf.sertDonusum()); return(kume); case UretimKurali.SESLI_AE: kume.Add(HARF_a); kume.Add(HARF_e); if (i > 0) { return(kume); } else { break; } case UretimKurali.SESLI_IU: kume.Add(HARF_i); kume.Add(HARF_u); kume.Add(HARF_ii); kume.Add(HARF_uu); if (i > 0) { return(kume); } else { break; } } } return(kume); }
public override HarfDizisi cozumlemeIcinUret(Kelime kelime, HarfDizisi giris, HarfDizisiKiyaslayici kiyaslayici) { TurkceHarf sonSesli = kelime.icerik().sonSesli(); if (sonSesli.charDeger() == 'u' || sonSesli.charDeger() == Alfabe.CHAR_uu) { return(ekUretici.cozumlemeIcinEkUret(kelime.icerik(), giris, _uretimBilesenleri)); } else { return(null); } }
public String toAscii(String giris) { char[] chars = giris.ToCharArray(); for (int i = 0; i < chars.Length; i++) { TurkceHarf harf = alfabe.harf(chars[i]); if (harf != null && harf != Alfabe.TANIMSIZ_HARF) { if (harf.asciiDonusum() != null) { chars[i] = harf.asciiDonusum().charDeger(); } } } return(new String(chars)); }
public TurkceHarf sesliBelirleIU(TurkceHarf sonSesli) { if (sonSesli.inceSesliMi() && sonSesli.duzSesliMi()) { return(HARF_i); } if (!sonSesli.inceSesliMi() && sonSesli.duzSesliMi()) { return(HARF_ii); } if (!sonSesli.inceSesliMi() && sonSesli.yuvarlakSesliMi()) { return(HARF_u); } if (sonSesli.inceSesliMi() && sonSesli.yuvarlakSesliMi()) { return(HARF_uu); } return(Alfabe.TANIMSIZ_HARF); }
public override HarfDizisi cozumlemeIcinUret(Kelime kelime, HarfDizisi giris, HarfDizisiKiyaslayici kiyaslayici) { if (kiyaslayici == null) { return(null); } // eki olustur. HarfDizisi ek = ekUretici.cozumlemeIcinEkUret(kelime.icerik(), giris, uretimBilesenleri()); TurkceHarf ekHarfi = sesliUretci.sesliBelirleIU(kelime.icerik()); HarfDizisi olusum = new HarfDizisi("yor", alfabe); olusum.ekle(0, ekHarfi); int harfPozisyonu = kelime.boy() + ek.Length; if (kiyaslayici.aradanKiyasla(giris, olusum, harfPozisyonu)) { return(ek); } return(null); }
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 override HarfDizisi cozumlemeIcinUret(Kelime kelime, HarfDizisi giris, HarfDizisiKiyaslayici kiyaslayici) { TurkceHarf son = kelime.sonHarf(); if (son.sesliMi()) { return(new HarfDizisi(0)); } HarfDizisi sonuc = new HarfDizisi(); if (kelime.kok().ozelDurumIceriyormu(TurkceKokOzelDurumTipi.FIIL_ARA_SESLI_DUSMESI)) { //eger ara sesli dusmesi olmussa eklenecek seslinin dusen sesliye gore //belirlenmesi gerekir. yani, "kavurmak" koku ve "kavrulmuS" girisini dusunelim, //ara sesli dusmesi ozel durumu nedeniyle "u" harfi kokten duserek "kavr" haline //gelir. Ancak koke bu haliyle edilgenlik ekini eklemeye kalkarsak "kavrIlmIS" //seklinde yanlis bir kelime ortaya cikardi. Bu nedenle burada dusen eke gore hangi // harfin eklenecegi belirleniyor. HarfDizisi kok = new HarfDizisi(kelime.kok().icerik(), alfabe); TurkceHarf kokAsilSesli = kok.sonSesli(); sonuc.ekle(sesliUretici.sesliBelirleIU(kokAsilSesli)); } else { sonuc.ekle(sesliUretici.sesliBelirleIU(kelime.icerik())); } if (son.Equals(alfabe.harf('l'))) { sonuc.ekle(alfabe.harf('n')); } else { sonuc.ekle(alfabe.harf('l')); } return(sonuc); }
public TurkceHarf sesliBelirleIU(HarfDizisi dizi) { TurkceHarf sonSesli = dizi.sonSesli(); return(sesliBelirleIU(sonSesli)); }
private List <Kelime> coz(Kok kok, HarfDizisi kokDizi, HarfDizisi giris, bool tumunuCozumle) { Kelime kelime = kelimeUret(kok, kokDizi); BasitKelimeYigini kelimeYigini = new BasitKelimeYigini(); Ek bulunanEk = kelime.sonEk(); int ardisilEkSirasi = 0; List <Kelime> uygunSonuclar = Collections.EMPTY_LIST_KELIME; TurkceHarf ilkEkHarfi = giris.harf(kelime.boy()); while (true) { //bulunan son ekten sonra gelebilecek eklerden siradakini al. Ek incelenenEk = bulunanEk.getArdisilEk(ardisilEkSirasi++); //siradaki ek yoksa incelenen ek yanlis demektir. // yigindan kelimenin onceki durumunu cek. if (incelenenEk == null) { //yigin bos ise basarisizlik. if (kelimeYigini.bosMu()) { return(uygunSonuclar); } //kelimeyi ve bulunan eki onceki formuna donustur. BasitKelimeYigini.YiginKelime yiginKelime = kelimeYigini.al(); kelime = yiginKelime.getKelime(); bulunanEk = kelime.sonEk(); ardisilEkSirasi = yiginKelime.getEkSirasi(); ilkEkHarfi = giris.harf(kelime.boy()); continue; } if (kelime.gercekEkYok() && kelime.kok().ozelDurumVarmi()) { if (!ozelDurumUygula(kelime, giris, incelenenEk)) { continue; } else { ilkEkHarfi = giris.harf(kelime.boy()); } } if (!incelenenEk.ilkHarfDenetle(ilkEkHarfi)) { continue; } HarfDizisi olusanEkIcerigi = incelenenEk.cozumlemeIcinUret(kelime, giris, harfDizisiKiyaslayici); if (olusanEkIcerigi == null || olusanEkIcerigi.Length == 0) { continue; } if (harfDizisiKiyaslayici.aradanKiyasla(giris, olusanEkIcerigi, kelime.boy())) { // ek dongusu testi //if (kelime.ekDongusuVarmi(incelenenEk)) continue; kelimeYigini.koy((Kelime)kelime.Clone(), ardisilEkSirasi); ardisilEkSirasi = 0; kelime.ekEkle(incelenenEk); kelime.icerikEkle(olusanEkIcerigi); ilkEkHarfi = giris.harf(kelime.boy()); if (logger.IsInfoEnabled) { logger.Info("ekleme sonrasi olusan kelime: " + kelime.icerik()); } bulunanEk = incelenenEk; if (harfDizisiKiyaslayici.kiyasla(kelime.icerik(), giris) && !incelenenEk.sonEkOlamazMi()) { if (!tumunuCozumle) { uygunSonuclar = new List <Kelime>(1); uygunSonuclar.Add(kelime); return(uygunSonuclar); } if (uygunSonuclar.Count == 0) { uygunSonuclar = new List <Kelime>(2); } uygunSonuclar.Add((Kelime)kelime.Clone()); } } } }
/** * Eger baslangic harfleri kumsei var ise gelen harfin bu kumede olup olmadigina bakar. * @param ilkHarf * @return eger kume tanimlanmamis ise bu ek icin ilk harf denetimi yapilmiyor demektir, true doner. * eger kume mevcut ise (null disi) ve harf kumede mevcutsa true doner. aksi halde false. */ public bool ilkHarfDenetle(TurkceHarf ilkHarf) { return(baslangicHarfleri == null || baslangicHarfleri.Contains(ilkHarf)); }
public EkUretimBileseni(UretimKurali kural, TurkceHarf harf) { this._kural = kural; this._harf = harf; }
/** * Giren harf dizisinin sonunda mantikli olarak yer alan hecenin harf * sayisini dondurur. * Sistem, -trak ve benzeri harf dizilimine sahip kelimeleri hecelemiyor. * * @param kelime: turkce harf dizisi. * @return int, 1,2,3 ya da 4 donerse giris dizisinin dizinin sondan o * kadarharfi heceyi temsil eder -1 donerse hecenin bulunamadigi * anlamina gelir. sistem yabanci harf ya da isaretlerin oldugu ya * da kural disi kelimeleri heceleyemez. (ornegin, three, what vs.) * TODO: sistem su anda basta bulunan iki harf sessiz oldugu * durumlari kabul etmekte ama buna kisitlama getirilmesi iyi olur. * sadece "tr", "st", "kr" gibi girislere izin verilmeli */ public int sonHeceHarfSayisi(HarfDizisi kelime) { int boy = kelime.Length; TurkceHarf harf = kelime.harf(boy - 1); TurkceHarf oncekiHarf = kelime.harf(boy - 2); if (boy == 0) { return(-1); } if (harf.sesliMi()) { //kelime sadece sesli. if (boy == 1) { return(1); } //onceki harf sesli kelime="saa" ise son ek "a" if (oncekiHarf.sesliMi()) { return(1); } //onceki harf sessiz ise ve kelime sadece 2 harf ise hece tum kelime. "ya" if (boy == 2) { return(2); } TurkceHarf ikiOncekiHarf = kelime.harf(boy - 3); // steteskp > ste if (!ikiOncekiHarf.sesliMi() && boy == 3) { return(3); } return(2); } else { // tek sessiz ile hece olmaz. if (boy == 1) { return(-1); } TurkceHarf ikiOncekiHarf = kelime.harf(boy - 3); if (oncekiHarf.sesliMi()) { //kelime iki harfli (el, al) ya da iki onceki harf sesli (saat) if (boy == 2 || ikiOncekiHarf.sesliMi()) { return(2); } TurkceHarf ucOncekiHarf = kelime.harf(boy - 4); // kelime uc harfli (kal, sel) ya da uc onceki harf sesli (kanat), if (boy == 3 || ucOncekiHarf.sesliMi()) { return(3); } //kelime dort harfli ise yukaridaki kurallari gecmesi nedeniyle hecelenemez sayiyoruz. // ornegin tren strateji krank angstrom kelimelerii hecelenemez sayiyoruz. if (boy == 4) { return(-1); } TurkceHarf dortOncekiHarf = kelime.harf(boy - 5); if (!dortOncekiHarf.sesliMi()) { return(3); } return(3); } else { if (boy == 2 || !ikiOncekiHarf.sesliMi()) { return(-1); } TurkceHarf ucOncekiHarf = kelime.harf(boy - 4); if (boy > 3 && !ucOncekiHarf.sesliMi()) { return(4); } return(3); } } }