-
Notifications
You must be signed in to change notification settings - Fork 4
/
EtkenEdilgen.py
198 lines (163 loc) · 6.96 KB
/
EtkenEdilgen.py
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
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
"""
Yüklem durumundaki fiilin gösterdiği işi doğrudan doğruya öznenin kendisi yapıyorsa FİİL ETKEN çatılı demektir.
Yani fiilin gerçek öznesi varsa(gizli özne olmaması lazım) ve “l,n” çatı ekini almamışsa FİİL ETKENDİR.
Bir fiil “l,n” çatı ekini almışsa ve eylemin kim tarafından yapıldığı belli değilse o FİİL EDİLGENDİR.
Edilgen fiillere “kim tarafından” sorusunu yönelttiğimizde cevap alamayız.
Yani yapılacak fonksiyon hem fiilin "l, n" çatı ekini almış olması hem de eylemin kim tarafından yapıldığı belli olduğu
cümleleri belirleyip, düzeltmesigerekiyor.
Örnek:
Evi güzelce temizledi. (Etken, özne; O)
Ev temizlendi. (Edilgen, özne belli değil.)
Evi güzelce temizlendi.(WTF?)
Kadın, bulaşığı yıkadı.(Etken, özne; Kadın)
Kadın, bulaşığı yıkandı.(Fiil edilgen ancak özne belli. HATA!)
Sınavın iptal edileceğini söyledi.
Sınavın iptal edileceğini söylendi.
İSTİSNA
Bahçedeki araçlar birer birer yıkandı.
Bahçedeki araçlar görevli tarafından yıkandı. ÖZNE VAR FİİL -L/-N EKİ ALMIŞ.
KÜTÜPHANE HATASI:
text = "Bütün sokaklar temizlendi." #KÜTÜPHANE HATASI BÜTÜN KELİMESİNİ ÖZEL KELİME OLARAK ALIYOR!
"""
from trnlp import TrnlpWord
from SimurgKelimeTemizle import kelime_temizle
#text = "Ayberk tüm sınav sorularını çözdü."
#text = "Sınav sorularının tümü çözüldü."
#text = "Kitaptaki yanlışlar düzeltildi."
#text = "Fırından yüz adet ekmek alındı?."
text = "Ahmet fırından yüz adet ekmek alındı.?"
def etkenEdilgen(text):
def cumle_ayirici(text):
ayrilmis_metin = []
obj = TrnlpWord()
kelime_listesi = text.split(" ")
for i in kelime_listesi:
i = kelime_temizle(i)
obj.setword(str(i))
ayrilmis_metin.append(str(obj))
return ayrilmis_metin
ayrilmis_kelimeler = []
ayrilmis_kelimeler = cumle_ayirici(text)
#print(ayrilmis_kelimeler)
def fiil_yazdir():
""""
return : fiil olan kelimeleri liste halinde döndürür.
"""
fiil_listesi = []
fiil = "fiil"
counter = 0
for i in ayrilmis_kelimeler:
i = str(i)
if fiil in i:
#print("fiil bulunan indeks:", str(counter))
fiil_listesi.append(ayrilmis_kelimeler[counter])
counter += 1
if len(fiil_listesi) > 0 :
return fiil_listesi
fiil_listesi = fiil_yazdir()
#print("fiil listesi", fiil_listesi)
def fiil_kisi_ekini_bul(fiil_listesi): # şuan fiil liste halinde dönüyor ve tek elemandan oluşuyor. 2 elemanda sıkıntı olursa değiştir!
fiil_koku = ""
ek_bulunan_fiil = ""
kisi_ekleri = ["{Ke1t}", "{Ke2t}", "{Ke3t}", "{Ke1ç}", "{Ke2ç}", "{Ke3ç}", "{İe1t}", "{İe2t}", "{İe3t}", "{İe1ç}", "{İe2ç}", "{İe3ç}"]
for i in kisi_ekleri:
if fiil_listesi != None:
for j in fiil_listesi:
if i in j:
fiil_koku = i
ek_bulunan_fiil = j
else:
ek_bulunmayan_fiil = j
else:
ek_bulunan_fiil = ""
ek_bulunmayan_fiil = ""
fiil_koku = ""
return ek_bulunan_fiil, fiil_koku, ek_bulunmayan_fiil
ek_bulunan_fiil, fiil_koku, ek_bulunmayan_fiil= fiil_kisi_ekini_bul(fiil_listesi)
#print("Kişi Ekleri Ek Bulunan Fill: ", ek_bulunan_fiil," Fiilin Eki: ", fiil_koku)
#print("Ek Bulunmayan Fiil: ", ek_bulunmayan_fiil)
def ozne_var_mi():
""""
return : özne bulunan cümleyi belirler.
"""
ozne_bulunan_kelime = []
filtre = ["özel", "zamir", "Ke", "İe"]
counter = 0
for i in ayrilmis_kelimeler:
for j in filtre:
i = str(i)
if j in i:
#print("isim buldu")
#print("isim bulunan indeks:", str(counter))
ozne_bulunan_kelime.append(ayrilmis_kelimeler[counter])
counter += 1
#return ayrilmis_kelimeler[counter-1]
return ozne_bulunan_kelime
# fiil olan kelimelerin indeksleri
def fiil_olan_kelime_indeksleri():
""""
return : fiil olan kelimeleri liste halinde döndürür.
"""
fiil_indeksleri = []
fiil = "fiil"
counter = 0
for i in ayrilmis_kelimeler:
i = str(i)
if fiil in i:
#print("fiil bulunan indeks:", str(counter))
fiil_indeksleri.append(counter)
counter += 1
if len(fiil_indeksleri) > 0 :
return fiil_indeksleri
fiil_indeksleri = fiil_olan_kelime_indeksleri()
#print("fiillerin bulundukları indeks: ", fiil_indeksleri)
"""
# trnlp kütüphanesi tarafından etiketlenmiş fiil değil. < 'çöz(fiil)+dü{GçDi}[2_1]' fiil kelimesinde l var > SADECE FİİL KELİMESİ OLMASI LAZIM.
def l_n_cati_eki(eksiz_fiil):
cati_eki_l = "l"
cati_eki_n = "n"
if (cati_eki_l or cati_eki_n) in eksiz_fiil:
uyarı = "Fiil -l, -n eklerini almıştır."
else:
uyarı = "Fiil -l, -n eklerini almamıştır."
return uyarı
"""
def l_n_cati_eki(text):
text_list = text.split(" ")
cati_eki_l = "l"
cati_eki_n = "n"
for i in text_list:
if (cati_eki_l or cati_eki_n) in i:
uyarı = "Fiil -l, -n eklerini almıştır."
l_n_flag = True
else:
uyarı = "Fiil -l, -n eklerini almamıştır."
l_n_flag = False
return uyarı, l_n_flag
#ek_kontrolu = l_n_cati_eki(ek_bulunan_fiil)
ek_kontrolu, l_n_flag = l_n_cati_eki(text)
#print(ek_bulunmayan_fiil," ",ek_kontrolu)
ozne_bulunan_kelime = ozne_var_mi()
if len(ozne_bulunan_kelime) > 0:
#print("Bu cümlede özne bulunmaktadır!", "Bulunan filtre ekleri: ",ozne_bulunan_kelime)
ozne_flag = True
else:
ozne_flag = False
#print("ÖZNE YOKTUR!")
"""
ÖZNE YOK VE FİİL -L/-N EKLERİNİ ALDIYSA: EDİLGEN
ÖZNE VAR VE FİLL -L/-N EKLERİNİ ALMADIYSA: ETKEN
BİZİM FONKSİYON: EDİLGEN GİBİ BAŞLAYIP ETKEN ŞEKİLDE BİTEN CÜMLEYİ BULACAK.
YANİ İÇİNDE ÖZNE BULUNDURUP FİİL KÖKÜNDE -L/-N EKLERİ BULUNAN CÜMLELER.
"""
#print("Örnek Cümle: ", text)
if ozne_flag == False and l_n_flag == True:
#print(text, " (EDİLGEN)")
return 0
elif ozne_flag == True and l_n_flag == False:
#print(text, " (ETKEN)")
return 0
elif ozne_flag == True and l_n_flag == True:
#print(text, " (ÇATI BAKIMINDAN UYUMSUZDUR!)")
return 1
#print(etkenEdilgen(text))