
Python ile Türkçe Kelime Eklerinin Dağılımı
Türkçe “eklemeli” bir dildir. Bu nitelikteki diğer iki dil Macarca ve Moğolcadır.
Türkçede kullandığımız kelimeleri türeten eklerin konumlarını ve frekanslarını belirleyen bir çalışma yaptım.
Bu amaçla ekleri ayrıştırıp sınıflandırmak için Zemberek kütüphanesinden yararlandım.
Çalışmamın bir bölümünde derlem dosyasındaki kelimeleri kullandım.
Rekorumuz “ilişki” isminde.
Bu isme 10 ayrı ek ulanarak “ilişkilendirilemeyeceklerini” sözcüğünün oluştuğunu görüyoruz.
Daha fazla kök içeren başka kelimeler de bulunabilir. Ama bu tür örnekler büyük olasılıkla uygulanabilirlikten uzak olacaklardır.
Bu sözcüğün Zemberek ile elde ettiğimiz kırılım yapısı şu şekilde:
ilişkilendirilemeyeceklerini
ilişki ISIM_KOK 0
ilişki-le ISIM_DONUSUM_LE 1
ilişki-le-n FIIL_EDILGENSESLI_N 2
ilişki-le-n-dir FIIL_ETTIRGEN_TIR 3
ilişki-le-n-dir-il FIIL_EDILGEN_IL 4
ilişki-le-n-dir-il-e FIIL_YETERSIZLIK_E 5
ilişki-le-n-dir-il-e-me FIIL_OLUMSUZLUK_ME 6
ilişki-le-n-dir-il-e-me-yecek FIIL_DONUSUM_ECEK 7
ilişki-le-n-dir-il-e-me-yecek-ler ISIM_COGUL_LER 8
ilişki-le-n-dir-il-e-me-yecek-ler-in ISIM_TAMLAMA_IN 9
ilişki-le-n-dir-il-e-me-yecek-ler-in-i ISIM_BELIRTME_I 10
Aynı yöntemle alice.txt öyküsünü sözcüklerine, sözcükleri de eklerine ayrıştırdım ve konum frekanslarını saptadım.
Öyküde kullanılan kelimelerin ek kırılım tablosu aşağıdaki gibidir:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 |
Çözümlenen kelime sayısı = 5515 Ek konum no : 0 1 2 3 4 5 6 ISIM_KOK : 2826 0 0 0 0 0 0 ISIM_COGUL_LER : 0 385 43 11 2 0 0 ISIM_TAMLAMA_IN : 0 329 271 81 8 2 0 ISIM_KALMA_DE : 0 107 115 49 14 1 0 FIIL_KOK : 2460 0 0 0 0 0 0 FIIL_DONUSUM_EN : 0 77 22 1 0 0 0 ISIM_CIKMA_DEN : 0 89 94 36 7 0 1 ISIM_TAMLAMA_I : 0 357 84 33 5 0 0 SAYI_KOK : 46 0 0 0 0 0 0 FIIL_GELECEKZAMAN_ECEK : 0 61 23 6 0 0 0 FIIL_YETERSIZLIK_E : 0 74 3 0 0 0 0 FIIL_OLUMSUZLUK_ME : 0 362 75 3 0 0 0 ISIM_GIBI_CE : 0 26 2 0 0 0 0 FIIL_ISTEK_E : 0 13 74 0 0 0 0 FIIL_GECMISZAMAN_MIS : 0 117 35 1 0 0 0 IMEK_HIKAYE_DI : 0 70 168 101 14 2 0 FIIL_BELIRTME_DIK : 0 201 47 5 0 0 0 ISIM_YONELME_E : 0 167 137 52 9 1 0 FIIL_GECMISZAMAN_DI : 0 253 93 20 1 0 0 FIIL_KISI_ONLAR : 0 0 75 13 6 0 0 ISIM_SAHIPLIK_SEN_IN : 0 72 7 0 0 0 0 ZAMIR_KOK : 75 0 0 0 0 0 0 ISIM_SAHIPLIK_O_I : 0 44 76 15 2 0 0 ISIM_BELIRTME_I : 0 47 244 142 43 4 0 EDAT_KOK : 5 0 0 0 0 0 0 FIIL_DONUSUM_ME : 0 114 57 7 0 0 0 ISIM_BULUNMA_LIK : 0 63 0 0 0 0 0 SORU_KOK : 15 0 0 0 0 0 0 ISIM_BULUNMA_LI : 0 90 19 5 0 0 0 FIIL_SUREKLILIK_EREK : 0 73 5 3 0 0 0 FIIL_EDILGEN_IL : 0 105 1 0 0 0 0 FIIL_DONUSUM_ECEK : 0 21 24 5 0 0 0 FIIL_KISI_BEN : 0 2 120 44 14 0 0 ZAMAN_KOK : 51 0 0 0 0 0 0 FIIL_ZAMAN_INCE : 0 12 4 0 0 0 0 FIIL_IMSI_IP : 0 62 14 0 0 0 0 ISIM_BIRLIKTELIK_LE : 0 60 79 16 0 0 0 IMEK_SART_SE : 0 10 26 18 2 0 0 ISIM_BULUNMA_KI : 0 0 30 21 3 0 0 FIIL_YETENEK_EBIL : 0 84 6 0 0 0 0 ISIM_DONUSUM_LES : 0 14 0 0 0 0 0 FIIL_OLUMSUZLUK_DEN : 0 0 24 3 0 0 0 FIIL_SIMDIKIZAMAN_IYOR : 0 191 73 13 1 0 0 IMEK_ZAMAN_KEN : 0 13 36 7 1 0 0 FIIL_KISI_BIZ : 0 1 14 4 0 0 0 FIIL_MASTAR_MEK : 0 97 15 2 0 0 0 FIIL_GENISZAMAN_IR : 0 172 90 25 1 0 0 FIIL_MASTAR_CE : 0 3 0 0 0 0 0 FIIL_ETTIRGEN_TIR : 0 55 3 0 0 0 0 FIIL_DONUSUM_IS : 0 5 0 0 0 0 0 FIIL_EDILGENSESLI_N : 0 44 11 0 0 0 0 FIIL_SART_SE : 0 35 12 0 0 0 0 ZAMIR_SAHIPLIK_IM : 0 6 0 0 0 0 0 ISIM_SAHIPLIK_BEN_IM : 0 48 41 7 2 0 0 ISIM_KISI_BEN_IM : 0 32 10 36 20 1 0 ISIM_SAHIPLIK_SIZ_INIZ : 0 10 17 3 0 0 0 FIIL_DONUSUM_MEZ : 0 0 2 0 0 0 0 FIIL_TEZLIK_IVER : 0 6 2 0 0 0 0 ISIM_KISI_SIZ_SINIZ : 0 1 3 12 3 1 0 ISIM_YOKLUK_SIZ : 0 24 1 0 0 0 0 ISIM_KISI_SEN_SIN : 0 10 6 17 8 1 0 FIIL_KISI_SEN : 0 2 46 18 7 0 0 BAGLAC_KOK : 3 0 0 0 0 0 0 IMEK_RIVAYET_MIS : 0 8 12 5 1 0 0 FIIL_BERABERLIK_IS : 0 12 0 0 0 0 0 ISIM_KUCULTME_CIK : 0 4 0 0 0 0 0 FIIL_EMIR_O_SIN : 0 14 4 0 0 0 0 SAYI_SIRA_INCI : 0 5 0 0 0 0 0 ISIM_KISI_BIZ_IZ : 0 3 14 4 0 0 0 FIIL_KISI_SIZ : 0 2 18 7 1 0 0 FIIL_DONUSUM_IM : 0 9 0 0 0 0 0 FIIL_OLDURGAN_T : 0 28 3 0 0 0 0 ISIM_DONUSUM_LE : 0 10 0 0 0 0 0 ISIM_TARAFINDAN_CE : 0 1 6 2 1 0 0 YANKI_KOK : 33 0 0 0 0 0 0 YANKI_DONUSUM_TI : 0 10 0 0 0 0 0 ISIM_SAHIPLIK_ONLAR_LERI : 0 5 18 2 0 0 0 ISIM_DURUM_LIK : 0 0 7 1 0 0 0 FIIL_TANIMLAMA_ICI : 0 4 2 0 0 0 0 ISIM_TANIMLAMA_DIR : 0 27 14 14 4 0 0 YANKI_DONUSUM_DA : 0 23 0 0 0 0 0 FIIL_EMIR_SIZ_IN : 0 17 8 0 0 0 0 ZAMAN_BELIRTME_KI : 0 6 0 0 0 0 0 FIIL_DEVAMLILIK_DIKCE : 0 2 2 0 0 0 0 ISIM_SAHIPLIK_BIZ_IMIZ : 0 12 3 1 0 0 0 FIIL_DONUSUM_IK : 0 3 0 0 0 0 0 ISIM_KISI_ONLAR_LER : 0 2 8 4 1 0 0 ISIM_ILGI_CI : 0 15 0 0 0 0 0 FIIL_DONUSUM_MIS : 0 0 11 1 0 0 0 FIIL_OLUMSUZLUK_SIZIN : 0 0 2 0 0 0 0 FIIL_ISTEK_SENIZE : 0 1 0 0 0 0 0 IMEK_KOK : 1 0 0 0 0 0 0 ISIM_ILISKILI_SEL : 0 1 0 0 0 0 0 SAYI_ULESTIRME_ER : 0 2 0 0 0 0 0 FIIL_ISTEK_SENE : 0 1 0 0 0 0 0 FIIL_EMIR_ONLAR_SINLER : 0 1 0 0 0 0 0 FIIL_EMIR_SIZRESMI_INIZ : 0 1 0 0 0 0 0 Toplamlar : 5515 4545 2611 876 181 13 1 |
Şimdi toplam ek frekanslarını görselleştirelim:
Konum 0’daki ek sayısı, aslında hiç ek almayan kelime sayısına karşılık geliyor.
Sadece bir ek alan kelimelerin toplamı, 4545.
6 ek alan kelime ise öyküde sadece 1 kez kullanılmış:(alamadıklarından: al-a-ma-dık-lar-ın-dan)
5 ek alan kelimeler şunlar: (toplandıklarında, resimlerindekine, mırıldandığından, kestiremiyordu, götüremeyeceğini, olamayacağını, kullanmamalıydın, bahsedemezdiniz, kesilemezdi, dolamadığını, söyleyebileceklerimin, beceremiyormuşum)
Sınırlı sayıda kelime kökü (20 bin civarı) ile kısıtlı sayıda ekin (yaklaşık 100 civarı) kombinasyonu, Türkçenin zenginliğini oluşturuyor.
Siz de aşağıda verdiğim kodlardaki kaynak dosyayı değiştirerek benzer incelemeler yapabilirsiniz.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 |
# -*- coding: utf-8 -*- # ek_analiz_2.py """ Kod : Ahmet Aksoy Sistem: Ubuntu 16.04 LTS Python: Python 3.6.6 Modül : JPype1-py3 0.5.5.2 Java : zemberek-tum-2.0.jar """ """ Burada alice.txt dosyasındaki sözcükleri kök+eklerine ayrıştıracağım. Her kök tipine bağlı olarak köklerin konum ve frekansını çıkaracak, sonra da bu sonuçları görselleştireceğim. """ #TODO: Galiba bu kodlarda birşeyler yanlış çalışıyor. import jpype import derlem_saltoku as drs EKSAY = 7 DIGSAY = 6 def zemberek_baslat(): global zemberek, Zemberek # JVM başlat # Aşağıdaki adresleri java sürümünüze ve jar dosyasının bulunduğu klasöre göre değiştirin jpype.startJVM("/usr/lib/jvm/java-8-oracle/jre/lib/amd64/server/libjvm.so", "-Djava.class.path=/home/axax/PyCharmProjects/trdp/zemberek-tum-2.0.jar", "-ea") # Türkiye Türkçesine göre çözümlemek için gerekli sınıfı hazırla Tr = jpype.JClass("net.zemberek.tr.yapi.TurkiyeTurkcesi") # tr nesnesini oluştur tr = Tr() # Zemberek sınıfını yükle Zemberek = jpype.JClass("net.zemberek.erisim.Zemberek") # zemberek nesnesini oluştur zemberek = Zemberek(tr) def zemberek_coz(kelime): if isinstance(zemberek, Zemberek)==False: zemberek_baslat() if kelime.strip()>'': return zemberek.kelimeCozumle(kelime) def analiz_et(frek): fekler=dict() f = open('FEKLERornek.txt', 'w') kac=0 for kelime in frek.keys(): if kelime.strip()>'': yanit = zemberek_coz(kelime) if yanit: kac+=1 # parçaları ayrıştır parca = str(yanit[0]).split(':') kekler = parca[4].split(' + ') if len(kekler)>EKSAY: print("fekler boyutu yetersiz: ",len(kekler)) print(file=f) for i in range(len(kekler)): kek=kekler[i] if kek in fekler.keys(): fekler[kek][i]+=1 else: fekler[kek] = [0,0,0,0,0,0,0] fekler[kek][i] += 1 print(kelime, fekler[kek], kek, i, file=f) else: pass;# print("{} ÇÖZÜMLENEMEDİ".format(kelime)) f.close() return fekler, kac def ana(): zemberek_baslat() #Çözümlenecek örnek kelimeleri belirle # kelimeler = ["iştahlı","iştahsız","süreğen","sergüzeşt", # "ilişkilendirilemeyeceklerini", "ilişkisizleştirilemeyeceklerini"] # alice = False # YYKOKBULTEST.txt dosyasını çözümle with open("veri/alice.txt") as f: paraglar = f.readlines() frekans = dict() for parag in paraglar: kk = [drs.kucukHarfYap(drs.inceltme_yok(k.strip())) for k in parag.split(' ')] for k in kk: k = k.strip(drs.AYRACLAR) if len(k)>0: if k not in frekans.keys(): frekans[k]=1 else: frekans[k] += 1 fekler,kac = analiz_et(frekans) sd = sorted(fekler.items(), key=lambda x: sum(x[1]), reverse=True) fout = open("FEKLER.txt", "w", encoding="utf-8") for saz in sd: s = "{} {}\n".format(saz[1], saz[0]) fout.write(s) fout.close() print("Çözümlenen kelime sayısı = ",kac) print(f"{'Ek konum no':24} : ",end='') for i in range(EKSAY): print(f"{i:{DIGSAY}}",end='') print() toplamlar=[0 for x in range(EKSAY)] for ek in fekler.keys(): print(f"{ek:24} : ",end='') for i in range(EKSAY): toplamlar[i]+=fekler[ek][i] print(f"{fekler[ek][i]:{DIGSAY}}",end='') print() print(f"{'Toplamlar':24} : ",end='') for i in range(EKSAY): print(f"{toplamlar[i]:{DIGSAY}}",end='') print() zemberek_kapat() def zemberek_kapat(): #JVM kapat jpype.shutdownJVM() if __name__ == "__main__": ana() |
Beni izlemeye devam edin.
Ahmet Aksoy
Keywords: türkçe kökler, kelime kökleri, türkçe kelime ekleri, zemberek, python, türkçe, eklemeli dil