-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathagirlikTest.py
201 lines (172 loc) · 6.6 KB
/
agirlikTest.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
198
199
200
201
import warnings
with warnings.catch_warnings():
warnings.filterwarnings("ignore", category=FutureWarning)
from tensorflow.keras.models import load_model
import nltk
from snowballstemmer import TurkishStemmer
import numpy as np
import random
import json
import requests
import bs4
nltk.download('punkt')
# Json dosyası olarak oluşturulan Covid-19 metin veri setini yükleme
with open(r"covidDataset.json", encoding="utf8") as file:
data = json.load(file)
# Değişken tanımlamaları
stemmer = TurkishStemmer()
words = []
labels = []
docs_x = []
docs_y = []
# Cümlelerin kelimelere ve etiketlere ayrılması
for intent in data["intents"]:
for pattern in intent["patterns"]:
wrds = nltk.word_tokenize(pattern)
words.extend(wrds)
docs_x.append(wrds)
docs_y.append(intent["tag"])
if intent["tag"] not in labels:
labels.append(intent["tag"])
# Cümlelerin küçük harfe alınması ve ayrılması
words = [stemmer.stemWord(w.lower()) for w in words if w != "?"]
words = sorted(list(set(words)))
# Etiketlerin alfabetik sıralanması
labels = sorted(labels)
# Eğitilmiş ağırlık dosyasının yüklenmesi.
model = load_model('covidAgirlik.h5')
# Buradaki fonksiyon bot ile konuşan kişinin cümlelerini 1 ve 0'lar ile ifade etmesine yarıyor.
def bag_of_words(s, words):
bag = [0 for _ in range(len(words))]
s_words = nltk.word_tokenize(s)
s_words = [stemmer.stemWord(word.lower()) for word in s_words]
for se in s_words:
for i, w in enumerate(words):
if w == se:
bag[i] = 1
return np.array(bag)
# Güncel covid-19 tablosunun listelenmesi
def covid19(country):
res = requests.get("https://www.worldometers.info/coronavirus/#countries")
soup = bs4.BeautifulSoup(res.text, 'lxml')
index = -1
data = soup.select('tr td')
for i in range(len(data)):
if data[i].text.lower() == country.lower():
index = i
break
gunlukTablo = ""
for i in range(7):
if i == 0:
gunlukTablo = "\nÜlke adı: " + str(data[i + index].text)
elif i == 1:
gunlukTablo = gunlukTablo + '\n' + "Toplam vaka: " + str(data[i + index].text)
elif i == 2:
if data[i + index].text == '':
gunlukTablo = gunlukTablo + '\n' + "Yeni vaka: 0"
else:
gunlukTablo = gunlukTablo + '\n' + "Yeni vaka: " + str(data[i + index].text)
elif i == 3:
gunlukTablo = gunlukTablo + '\n' + "Toplam ölüm: " + str(data[i + index].text)
elif i == 4:
if data[i + index].text == '':
gunlukTablo = gunlukTablo + '\n' + "Yeni ölüm: 0"
else:
gunlukTablo = gunlukTablo + '\n' + "Yeni ölüm: " + str(data[i + index].text)
elif i == 5:
gunlukTablo = gunlukTablo + '\n' + "Toplam iyileşen: " + str(data[i + index].text)
elif i == 6:
gunlukTablo = gunlukTablo + '\n' + "Yeni iyileşen: " + str(data[i + index].text)
return gunlukTablo
# Covid19 olma olasılığının hesaplanması
def covidOlasilik(cevapListesi):
covidScore = 0
toplamPuan = 100
riskCarpani = 0
if "hastane" in cevapListesi:
covidScore += 3
if "ishal" in cevapListesi:
covidScore += 4
if "gözBeyazCevresi" in cevapListesi:
covidScore += 4
if "ciltDokuntusu" in cevapListesi:
covidScore += 4
if "kokuTat" in cevapListesi:
covidScore += 4
if ("basAgrisi" in cevapListesi) or ("bogazAgrisi" in cevapListesi):
covidScore += 4
if ("umre" in cevapListesi) or ("yurtdisi" in cevapListesi):
covidScore += 5
if "ates" in cevapListesi:
covidScore += 12
riskCarpani += 1
if "oksuruk" in cevapListesi:
covidScore += 12
riskCarpani += 1
if "halsizlik" in cevapListesi:
covidScore += 12
riskCarpani += 1
if "nefes" in cevapListesi:
covidScore += 12
riskCarpani += 1
if ("konusmaZorlugu" in cevapListesi) or ("hareketKaybi" in cevapListesi):
covidScore += 12
riskCarpani += 1
if "gogusAgrisi" in cevapListesi:
covidScore += 12
riskCarpani += 1
sonucOlasilik = (covidScore / toplamPuan) * 100
if riskCarpani >= 3:
sonucOlasilik = sonucOlasilik * 2
if sonucOlasilik >= 100:
sonucOlasilik = 95
return sonucOlasilik
# Kullanıcının çıkmak istediği ve sonuçları görmek istediği durumların kontrolü
def cikisDurumu(cevapListesi):
cikisKontrol = False
if "sonuc" in cevapListesi:
cikisKontrol = True
if "ayrilma" in cevapListesi:
cikisKontrol = True
if "sikayetYok" in cevapListesi:
cikisKontrol = True
return cikisKontrol
# Risk oranının hesaplanması
def covidRisk(covidOlasilik):
if 30 >= covidOlasilik:
riskDurumu = "Düşük risk grubunda bulunuyorsunuz."
elif 60 > covidOlasilik > 30:
riskDurumu = "Orta düzey risk grubunda bulunuyorsunuz. Şikayetlerinizin artması durumunda sağlık merkezlerine gitmelisiniz."
elif covidOlasilik >= 60:
riskDurumu = "Yüksek düzeyde risk grubunda bulunuyorsunuz, en yakın sağlık merkezine gitmelisiniz."
return riskDurumu
# Covid-19 olasılık ve risk sonucunun dönderilmesi
def sonuc(olasilik, risk):
return "Covid19 risk durumunuz: %{0}\n{1}".format(round(olasilik), risk)
# Kullanıcının gireceği cevaplar için liste oluşturulması
cevapListesi = []
# Yeniden başlatma durumu için listenin sıfırlanması
def reset():
cevapListesi.clear()
# Sohbet fonksiyonu
def chat(message):
covidOlasilikDurumu = covidOlasilik(cevapListesi)
covidRiskDurumu = covidRisk(covidOlasilikDurumu)
if message.lower() == "kapat":
return sonuc(covidOlasilikDurumu, covidRiskDurumu)
results = model.predict(np.asanyarray([bag_of_words(message, words)]))[0]
# print(results)
results_index = np.argmax(results)
tag = labels[results_index]
if results[results_index] > 0.85:
for tg in data["intents"]:
if tg['tag'] == tag:
cevapListesi.append(tg['tag'])
responses = tg['responses']
if tg['tag'] == "tablo":
return covid19("Turkey")
if cikisDurumu(cevapListesi):
return sonuc(covidOlasilikDurumu, covidRiskDurumu)
return random.choice(responses)
else:
return "Tam olarak anlayamadım"