File size: 24,683 Bytes
a72d1cf | 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 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 | """Türkçe tablo-soru test kümesini (TR-TabloSQL) üretir ve altın SQL'leri doğrular.
Soru tipleri Spider (seçim, filtre, toplama, gruplama, sıralama, iç içe sorgu, çoklu tablo)
ve BIRD (dış bilgi/kanıt gerektiren sorular, değer eşleme, birim dönüştürme) kümelerinden
uyarlanmış; Türkiye'ye özgü zorluklar eklenmiştir:
tr_sayi : '1.234,56' biçimli sayılar (belgede veya soruda)
birim : 'bin TL', 'bin MWh' gibi ölçekli birimler ve dönüşüm
tarih : 'Ocak 2024', '15.03.2025' gibi Türkçe tarih yazımları
deger_esleme : İ/ı, büyük/küçük harf, ek almış özel adlar (İzmir'in, ISPARTA)
toplam_satiri: belgede hazır 'Toplam' satırı olan tablolarda çift sayım tuzağı
cevapsiz : tablolarda cevabı olmayan sorular (sistem bunu açıkça söylemeli)
altin_sql = None olan sorular cevapsızdır.
Çalıştırma: python benchmark/build_benchmark.py
"""
from __future__ import annotations
import json
import sys
from pathlib import Path
ROOT = Path(__file__).resolve().parent.parent
sys.path.insert(0, str(ROOT))
A = "gider_turlerine_butce_gerceklesme"
B = "yillara_personel_sayisi"
C = "tuketici_fiyat_endeksi_degisim"
D = "illere_elektrik_tuketimi"
E = "ozet_gelir_tablosu"
F = "belediye_hizmet_ucret_tarifesi"
G = "mahallelere_su_abone_sayisi"
# (soru, altın_sql | None, zorluk, kategoriler, kanıt(BIRD tarzı) | None, uyarlama)
Q = [
# ---------------------------------------------------------------- A: bütçe gerçekleşme
("2024 yılında personel giderleri için ne kadar harcama gerçekleşti?",
f"SELECT gerceklesme_2024 FROM {A} WHERE TR_NORM(gider_turu)=TR_NORM('Personel Giderleri')",
"kolay", ["secim", "tr_sayi", "deger_esleme"], None, "Spider: tek tablo seçim"),
("Sermaye giderlerinin 2023 bütçesi kaç TL'dir?",
f"SELECT butce_2023 FROM {A} WHERE gider_turu='Sermaye Giderleri'",
"kolay", ["secim", "deger_esleme", "tr_sayi"], None, "Spider: tek tablo seçim"),
("2024 bütçesinde en fazla ödenek ayrılan gider türü hangisidir?",
f"SELECT gider_turu FROM {A} WHERE toplam_satiri=0 ORDER BY butce_2024 DESC LIMIT 1",
"orta", ["siralama", "toplam_satiri"], None, "Spider: ORDER BY ... LIMIT"),
("2024 yılında tüm gider türlerinin toplam gerçekleşmesi ne kadardır?",
f"SELECT SUM(gerceklesme_2024) FROM {A} WHERE toplam_satiri=0",
"orta", ["toplama", "toplam_satiri", "tr_sayi"], None, "Spider: SUM"),
("Gerçekleşme oranı yüzde 90'ın altında kalan gider türleri hangileridir?",
f"SELECT gider_turu FROM {A} WHERE gerceklesme_orani_2024 < 90 AND toplam_satiri=0",
"orta", ["filtre", "yuzde"], None, "Spider: WHERE karşılaştırma"),
("Faiz giderlerinin bütçesi 2023'ten 2024'e yüzde kaç arttı?",
f"SELECT (butce_2024-butce_2023)*100.0/butce_2023 FROM {A} WHERE gider_turu='Faiz Giderleri'",
"orta", ["artis_yuzdesi", "sayisal"], "Artış yüzdesi = (yeni - eski) / eski × 100",
"BIRD: formül kanıtı"),
("2023 yılında gider türü başına ortalama bütçe nedir?",
f"SELECT AVG(butce_2023) FROM {A} WHERE toplam_satiri=0",
"orta", ["toplama", "toplam_satiri"], None, "Spider: AVG"),
("Kaç gider türünün 2024 gerçekleşmesi bütçesini aştı?",
f"SELECT COUNT(*) FROM {A} WHERE gerceklesme_2024 > butce_2024 AND toplam_satiri=0",
"orta", ["sayim", "karsilastirma", "toplam_satiri"], None, "Spider: COUNT + sütunlar arası koşul"),
("Mal ve hizmet alımlarında 2024 bütçesi ile gerçekleşme arasındaki fark kaç TL?",
f"SELECT butce_2024-gerceklesme_2024 FROM {A} WHERE gider_turu='Mal ve Hizmet Alım Giderleri'",
"orta", ["sayisal", "deger_esleme"], None, "BIRD: aritmetik"),
("2024 yılında 100 milyon TL'den fazla harcama yapılan gider türleri hangileri?",
f"SELECT gider_turu FROM {A} WHERE gerceklesme_2024 > 100000000 AND toplam_satiri=0",
"orta", ["filtre", "birim", "toplam_satiri"], "100 milyon TL = 100.000.000 TL",
"BIRD: birim kanıtı"),
("2022 yılı personel gideri bütçesi ne kadardı?", None,
"orta", ["cevapsiz"], None, "Cevapsız: tabloda 2022 yok"),
("2024 yılı genel bütçe gerçekleşme oranı yüzde kaçtır?",
f"SELECT gerceklesme_orani_2024 FROM {A} WHERE toplam_satiri=1",
"orta", ["secim", "yuzde", "toplam_satiri"], None, "Spider: seçim"),
# ---------------------------------------------------------------- B: personel
("2022 yılında kaç memur çalışıyordu?",
f"SELECT memur FROM {B} WHERE yil=2022",
"kolay", ["secim", "tr_sayi"], None, "Spider: seçim"),
("Toplam personel sayısının en yüksek olduğu yıl hangisi?",
f"SELECT yil FROM {B} ORDER BY toplam DESC LIMIT 1",
"kolay", ["siralama"], None, "Spider: ORDER BY"),
("2020-2024 döneminde ortalama işçi sayısı kaçtır?",
f"SELECT AVG(isci) FROM {B} WHERE yil BETWEEN 2020 AND 2024",
"kolay", ["toplama", "tr_sayi"], None, "Spider: AVG"),
("Sözleşmeli personel sayısı 2020'den 2024'e kaç kişi arttı?",
f"SELECT (SELECT sozlesmeli_personel FROM {B} WHERE yil=2024)-(SELECT sozlesmeli_personel FROM {B} WHERE yil=2020)",
"orta", ["sayisal", "ic_ice"], None, "Spider: iç içe sorgu"),
("İşçi sayısı 2.400'ün üzerinde olan yıllar hangileri?",
f"SELECT yil FROM {B} WHERE isci > 2400",
"kolay", ["filtre", "tr_sayi"], None, "Spider: WHERE"),
("2024'te memurların toplam personel içindeki payı yüzde kaçtır?",
f"SELECT memur*100.0/toplam FROM {B} WHERE yil=2024",
"orta", ["sayisal", "yuzde"], "Pay (%) = memur / toplam × 100", "BIRD: formül kanıtı"),
("2025 yılında kaç işçi istihdam edilmesi planlanıyor?", None,
"orta", ["cevapsiz"], None, "Cevapsız: plan/2025 verisi yok"),
# ---------------------------------------------------------------- C: fiyat endeksi
("Mart 2025'te endeks değeri kaçtı?",
f"SELECT endeks FROM {C} WHERE donem='2025-03'",
"kolay", ["secim", "tarih", "tr_sayi"], None, "Spider: seçim"),
("2024 yılında aylık değişimin en yüksek olduğu ay hangisi?",
f"SELECT donem FROM {C} WHERE donem LIKE '2024-%' ORDER BY degisim_aylik DESC LIMIT 1",
"orta", ["siralama", "tarih"], None, "Spider: ORDER BY + filtre"),
("2024 yılı aylık değişim oranlarının ortalaması nedir?",
f"SELECT AVG(degisim_aylik) FROM {C} WHERE donem LIKE '2024-%'",
"orta", ["toplama", "tarih", "yuzde"], None, "Spider: AVG"),
("Haziran 2025'te yıllık değişim yüzde kaç olarak gerçekleşti?",
f"SELECT degisim_yillik FROM {C} WHERE donem='2025-06'",
"kolay", ["secim", "tarih", "yuzde"], None, "Spider: seçim"),
("Aylık değişimin %4'ü aştığı kaç ay var?",
f"SELECT COUNT(*) FROM {C} WHERE degisim_aylik > 4",
"orta", ["sayim", "filtre", "yuzde"], None, "Spider: COUNT"),
("Endeks Ocak 2024'ten Aralık 2024'e yüzde kaç arttı?",
f"SELECT ((SELECT endeks FROM {C} WHERE donem='2024-12')-(SELECT endeks FROM {C} WHERE donem='2024-01'))*100.0/(SELECT endeks FROM {C} WHERE donem='2024-01')",
"zor", ["artis_yuzdesi", "tarih", "ic_ice"], "Artış yüzdesi = (yeni - eski) / eski × 100",
"BIRD: formül kanıtı + iç içe"),
("Yıllık değişimin yüzde 50'nin altına ilk düştüğü dönem hangisidir?",
f"SELECT MIN(donem) FROM {C} WHERE degisim_yillik < 50",
"zor", ["tarih", "filtre"], None, "Spider: MIN + filtre"),
("Temmuz 2025 endeks değeri nedir?", None,
"orta", ["cevapsiz", "tarih"], None, "Cevapsız: veri Haziran 2025'te bitiyor"),
# ---------------------------------------------------------------- D: elektrik
("İzmir'in 2024 elektrik tüketimi ne kadar?",
f"SELECT yil_2024 FROM {D} WHERE TR_NORM(il)=TR_NORM('İzmir')",
"kolay", ["secim", "deger_esleme", "tr_sayi"], None, "Spider: seçim"),
("Isparta'nın 2023 yılındaki elektrik tüketimi kaç bin MWh'tir?",
f"SELECT yil_2023 FROM {D} WHERE il='Isparta'",
"kolay", ["secim", "deger_esleme"], None, "Spider: seçim"),
("ISPARTA ilinin 2022 tüketimi nedir?",
f"SELECT yil_2022 FROM {D} WHERE il='Isparta'",
"kolay", ["secim", "deger_esleme"], None, "Türkçe büyük harf: I/ı"),
("Marmara bölgesindeki illerin 2024 toplam tüketimi ne kadar?",
f"SELECT SUM(yil_2024) FROM {D} WHERE bolge='Marmara'",
"orta", ["toplama", "filtre"], None, "Spider: SUM + WHERE"),
("2024'te en çok elektrik tüketen il hangisi?",
f"SELECT il FROM {D} WHERE toplam_satiri=0 ORDER BY yil_2024 DESC LIMIT 1",
"orta", ["siralama", "toplam_satiri"], None, "Spider: ORDER BY"),
("Tüketimi 2023'ten 2024'e azalan kaç il var?",
f"SELECT COUNT(*) FROM {D} WHERE yil_2024 < yil_2023 AND toplam_satiri=0",
"orta", ["sayim", "karsilastirma", "toplam_satiri"], None, "Spider: COUNT"),
("Bölgelere göre 2024 toplam tüketimini listeler misin?",
f"SELECT bolge, SUM(yil_2024) FROM {D} WHERE toplam_satiri=0 GROUP BY bolge",
"orta", ["gruplama", "toplam_satiri"], None, "Spider: GROUP BY"),
("Ankara'nın 2024 elektrik tüketimi kaç MWh?",
f"SELECT yil_2024*1000 FROM {D} WHERE il='Ankara'",
"orta", ["birim", "secim"], "Tablo bin MWh cinsindendir; 1 bin MWh = 1.000 MWh", "BIRD: birim kanıtı"),
("İstanbul'un tüketimi 2022'den 2024'e yüzde kaç değişti?",
f"SELECT (yil_2024-yil_2022)*100.0/yil_2022 FROM {D} WHERE il='İstanbul'",
"orta", ["artis_yuzdesi", "deger_esleme"], "Değişim yüzdesi = (yeni - eski) / eski × 100",
"BIRD: formül kanıtı"),
("Değişim oranı en düşük olan il hangisidir?",
f"SELECT il FROM {D} WHERE toplam_satiri=0 ORDER BY degisim_2023_2024 ASC LIMIT 1",
"orta", ["siralama", "toplam_satiri", "yuzde"], None, "Spider: ORDER BY"),
("İç Anadolu'daki illerin 2023 ortalama tüketimi nedir?",
f"SELECT AVG(yil_2023) FROM {D} WHERE bolge='İç Anadolu'",
"orta", ["toplama", "filtre", "deger_esleme"], None, "Spider: AVG + WHERE"),
("Mersin'in 2024 elektrik tüketimi ne kadar?", None,
"orta", ["cevapsiz", "deger_esleme"], None, "Cevapsız: il tabloda yok"),
("17 ilin 2022 yılındaki toplam tüketimi kaç bin MWh?",
f"SELECT SUM(yil_2022) FROM {D} WHERE toplam_satiri=0",
"orta", ["toplama", "toplam_satiri", "tr_sayi"], None, "Spider: SUM"),
("Karadeniz bölgesinde kaç il var?",
f"SELECT COUNT(*) FROM {D} WHERE bolge='Karadeniz'",
"kolay", ["sayim", "filtre"], None, "Spider: COUNT"),
# ---------------------------------------------------------------- E: gelir tablosu
("2024 yılında hasılat ne kadardı?",
f"SELECT cari_donem_2024 FROM {E} WHERE kalem='Hasılat'",
"kolay", ["secim", "tr_sayi"], None, "Spider: seçim"),
("Şirketin 2023 dönem net kârı kaç TL'dir?",
f"SELECT onceki_donem_2023*1000 FROM {E} WHERE kalem='Dönem Net Kârı'",
"orta", ["birim", "secim"], "Tablo bin TL cinsindendir", "BIRD: birim kanıtı"),
("Net kâr bir önceki yıla göre yüzde kaç arttı?",
f"SELECT (cari_donem_2024-onceki_donem_2023)*100.0/onceki_donem_2023 FROM {E} WHERE kalem='Dönem Net Kârı'",
"orta", ["artis_yuzdesi"], "Artış yüzdesi = (cari - önceki) / önceki × 100", "BIRD: formül kanıtı"),
("2024'te satışların maliyeti ne kadar?",
f"SELECT cari_donem_2024 FROM {E} WHERE kalem='Satışların Maliyeti (-)'",
"kolay", ["secim", "tr_sayi", "negatif"], None, "Parantezli negatif sayı"),
("2024 brüt kâr marjı yüzde kaçtır?",
f"SELECT (SELECT cari_donem_2024 FROM {E} WHERE kalem='Brüt Kâr')*100.0/(SELECT cari_donem_2024 FROM {E} WHERE kalem='Hasılat')",
"zor", ["sayisal", "ic_ice", "yuzde"], "Brüt kâr marjı = Brüt Kâr / Hasılat × 100", "BIRD: alan bilgisi kanıtı"),
("Finansman giderleri 2023'e göre ne kadar arttı?",
f"SELECT ABS(cari_donem_2024)-ABS(onceki_donem_2023) FROM {E} WHERE kalem='Finansman Giderleri (-)'",
"zor", ["sayisal", "negatif"], "Giderler tabloda negatif (parantezli) gösterilir", "BIRD: işaret kanıtı"),
("Şirketin 2024 yılındaki çalışan sayısı kaçtır?", None,
"orta", ["cevapsiz"], None, "Cevapsız: gelir tablosunda yok"),
# ---------------------------------------------------------------- F: ücret tarifesi
("İşyeri açma ruhsatı ücreti ne kadar?",
f"SELECT ucret FROM {F} WHERE hizmet='İşyeri Açma Ruhsatı'",
"kolay", ["secim", "deger_esleme", "tr_sayi"], None, "Spider: seçim"),
("Zabıta hizmetleri grubunda kaç farklı hizmet var?",
f"SELECT COUNT(DISTINCT hizmet) FROM {F} WHERE hizmet_grubu='Zabıta Hizmetleri'",
"kolay", ["sayim", "birlesik_hucre"], None, "Spider: COUNT DISTINCT (birleşik hücre)"),
("1 Temmuz 2025'te yürürlüğe giren hizmetler hangileri?",
f"SELECT hizmet FROM {F} WHERE yururluk_tarihi='2025-07-01'",
"orta", ["filtre", "tarih"], None, "Spider: WHERE (tarih)"),
("Yürürlük tarihi 15.03.2025 olan hizmetlerin ortalama ücreti nedir?",
f"SELECT AVG(ucret) FROM {F} WHERE yururluk_tarihi='2025-03-15'",
"orta", ["toplama", "tarih"], None, "Türkçe tarih biçimi"),
("Sosyal tesisler grubundaki en pahalı hizmet hangisi?",
f"SELECT hizmet FROM {F} WHERE hizmet_grubu='Sosyal Tesisler' ORDER BY ucret DESC LIMIT 1",
"orta", ["siralama", "filtre", "birlesik_hucre"], None, "Spider: ORDER BY + WHERE"),
("Ücreti 2.000 TL'nin üzerinde olan kaç hizmet var?",
f"SELECT COUNT(*) FROM {F} WHERE ucret > 2000",
"kolay", ["sayim", "filtre", "tr_sayi"], None, "Spider: COUNT + WHERE"),
("Hizmet gruplarına göre ortalama ücretleri listeler misin?",
f"SELECT hizmet_grubu, AVG(ucret) FROM {F} GROUP BY hizmet_grubu",
"orta", ["gruplama", "birlesik_hucre"], None, "Spider: GROUP BY"),
("Mart 2025'ten önce yürürlüğe giren hizmetlerin sayısı nedir?",
f"SELECT COUNT(*) FROM {F} WHERE yururluk_tarihi < '2025-03-01'",
"orta", ["sayim", "tarih"], None, "Spider: COUNT + tarih karşılaştırma"),
("Otopark ücreti ne kadar?", None,
"kolay", ["cevapsiz"], None, "Cevapsız: tarifede yok"),
# ---------------------------------------------------------------- G: su (çizgisiz tablo)
("Fatih mahallesindeki abone sayısı kaç?",
f"SELECT abone_sayisi FROM {G} WHERE mahalle='Fatih'",
"kolay", ["secim", "tr_sayi"], None, "Spider: seçim"),
("En fazla su tüketen mahalle hangisi?",
f"SELECT mahalle FROM {G} WHERE toplam_satiri=0 ORDER BY yillik_tuketim DESC LIMIT 1",
"orta", ["siralama", "toplam_satiri"], None, "Spider: ORDER BY"),
("Tüm mahallelerin toplam abone sayısı nedir?",
f"SELECT SUM(abone_sayisi) FROM {G} WHERE toplam_satiri=0",
"orta", ["toplama", "toplam_satiri", "tr_sayi"], None, "Spider: SUM"),
("Abone başına tüketimi 150 m³'ün üzerinde olan mahalleler hangileri?",
f"SELECT mahalle FROM {G} WHERE abone_basina_tuketim > 150 AND toplam_satiri=0",
"orta", ["filtre", "birim"], None, "Spider: WHERE"),
("Yıldırım Beyazıt mahallesinin yıllık tüketimi kaç litre?",
f"SELECT yillik_tuketim*1000 FROM {G} WHERE mahalle='Yıldırım Beyazıt'",
"orta", ["birim", "secim", "deger_esleme"], "1 m³ = 1.000 litre", "BIRD: birim kanıtı"),
("Kurtuluş mahallesinde 2023 yılındaki abone sayısı kaçtı?", None,
"orta", ["cevapsiz"], None, "Cevapsız: yalnızca 2024 verisi var"),
# ---------------------------------------------------------------- çoklu tablo
("2024'te personel giderleri gerçekleşmesinin toplam personel sayısına bölümü (kişi başı personel gideri) ne kadardır?",
f"SELECT (SELECT gerceklesme_2024 FROM {A} WHERE gider_turu='Personel Giderleri')*1.0/(SELECT toplam FROM {B} WHERE yil=2024)",
"zor", ["coklu_tablo", "sayisal", "ic_ice"], "Kişi başı gider = gider / personel sayısı",
"Spider: çoklu tablo (skaler alt sorgular)"),
]
# ============================================================================
# AYRILMIŞ TEST BÖLÜMÜ: kural tabanlı sistem geliştirilirken HİÇ kullanılmadı.
# Yeni ifade kalıpları, farklı varlıklar ve yeni soru biçimleri içerir.
QT = [
("Borç verme kaleminde 2024 yılında gerçekleşen tutar nedir?",
f"SELECT gerceklesme_2024 FROM {A} WHERE gider_turu='Borç Verme'",
"kolay", ["secim", "tr_sayi"], None, "Spider: seçim"),
("2023'te bütçesi en düşük olan gider türü hangisi?",
f"SELECT gider_turu FROM {A} WHERE toplam_satiri=0 ORDER BY butce_2023 ASC LIMIT 1",
"orta", ["siralama", "toplam_satiri"], None, "Spider: ORDER BY"),
("Cari transferlerin 2024 gerçekleşme oranı kaçtır?",
f"SELECT gerceklesme_orani_2024 FROM {A} WHERE gider_turu='Cari Transferler'",
"kolay", ["secim", "yuzde"], None, "Spider: seçim"),
("2023 yılında gerçekleşen toplam harcama ne kadar?",
f"SELECT SUM(gerceklesme_2023) FROM {A} WHERE toplam_satiri=0",
"orta", ["toplama", "toplam_satiri"], None, "Spider: SUM"),
("Sermaye transferleri için 2024'te ayrılan bütçe kaç milyon TL?",
f"SELECT butce_2024/1000000.0 FROM {A} WHERE gider_turu='Sermaye Transferleri'",
"orta", ["birim", "secim"], "1 milyon TL = 1.000.000 TL", "BIRD: birim kanıtı"),
("2021 yılında faiz giderleri ne kadar gerçekleşti?", None,
"orta", ["cevapsiz"], None, "Cevapsız: 2021 yok"),
("2023 yılındaki sözleşmeli personel sayısı nedir?",
f"SELECT sozlesmeli_personel FROM {B} WHERE yil=2023",
"kolay", ["secim"], None, "Spider: seçim"),
("Memur sayısının en az olduğu yıl hangisidir?",
f"SELECT yil FROM {B} ORDER BY memur ASC LIMIT 1",
"kolay", ["siralama"], None, "Spider: ORDER BY"),
("Beş yıllık dönemde toplam personel sayısının ortalaması kaç?",
f"SELECT AVG(toplam) FROM {B}",
"orta", ["toplama"], None, "Spider: AVG"),
("Toplam personel 2021'den 2023'e yüzde kaç değişti?",
f"SELECT ((SELECT toplam FROM {B} WHERE yil=2023)-(SELECT toplam FROM {B} WHERE yil=2021))*100.0/(SELECT toplam FROM {B} WHERE yil=2021)",
"zor", ["artis_yuzdesi", "ic_ice"], "Değişim yüzdesi = (yeni - eski) / eski × 100", "BIRD: formül kanıtı"),
("Ekim 2024 aylık değişim oranı nedir?",
f"SELECT degisim_aylik FROM {C} WHERE donem='2024-10'",
"kolay", ["secim", "tarih", "yuzde"], None, "Spider: seçim"),
("2025'in ilk yarısında endeksin en yüksek değeri nedir?",
f"SELECT MAX(endeks) FROM {C} WHERE donem BETWEEN '2025-01' AND '2025-06'",
"orta", ["toplama", "tarih"], None, "Spider: MAX + tarih aralığı"),
("Aylık değişimin yüzde 2'nin altında kaldığı dönemler hangileri?",
f"SELECT donem FROM {C} WHERE degisim_aylik < 2",
"orta", ["filtre", "tarih", "yuzde"], None, "Spider: WHERE"),
("2024 Ağustos ayında yıllık değişim yüzde kaçtı?",
f"SELECT degisim_yillik FROM {C} WHERE donem='2024-08'",
"orta", ["secim", "tarih"], None, "Tarih yazım sırası farklı"),
("Eylül 2025 aylık değişimi ne olmuştur?", None,
"orta", ["cevapsiz", "tarih"], None, "Cevapsız: kapsam dışı dönem"),
("Gaziantep'in 2022 yılı elektrik tüketimi nedir?",
f"SELECT yil_2022 FROM {D} WHERE il='Gaziantep'",
"kolay", ["secim", "deger_esleme"], None, "Spider: seçim"),
("IĞDIR ilinde 2024 tüketimi ne kadardı?",
f"SELECT yil_2024 FROM {D} WHERE il='Iğdır'",
"kolay", ["secim", "deger_esleme"], None, "Türkçe büyük harf: I/Ğ"),
("Akdeniz bölgesindeki illerin 2022 toplam elektrik tüketimi kaç bin MWh?",
f"SELECT SUM(yil_2022) FROM {D} WHERE bolge='Akdeniz'",
"orta", ["toplama", "filtre"], None, "Spider: SUM + WHERE"),
("2023 yılında en az elektrik tüketen il hangisidir?",
f"SELECT il FROM {D} WHERE toplam_satiri=0 ORDER BY yil_2023 ASC LIMIT 1",
"orta", ["siralama", "toplam_satiri"], None, "Spider: ORDER BY"),
("Tüketimi 2023'ten 2024'e artan illeri listeler misin?",
f"SELECT il FROM {D} WHERE yil_2024 > yil_2023 AND toplam_satiri=0",
"orta", ["filtre", "karsilastirma", "toplam_satiri"], None, "Spider: sütunlar arası koşul"),
("Doğu Anadolu bölgesinde kaç il bulunuyor?",
f"SELECT COUNT(*) FROM {D} WHERE bolge='Doğu Anadolu'",
"kolay", ["sayim", "filtre"], None, "Spider: COUNT"),
("Kocaeli'nin 2023 tüketimi kaç MWh'tir?",
f"SELECT yil_2023*1000 FROM {D} WHERE il='Kocaeli'",
"orta", ["birim", "secim"], "1 bin MWh = 1.000 MWh", "BIRD: birim kanıtı"),
("Antalya'nın 2025 elektrik tüketimi nedir?", None,
"orta", ["cevapsiz"], None, "Cevapsız: 2025 yok"),
("2024 yılı vergi öncesi kârı ne kadardır?",
f"SELECT cari_donem_2024 FROM {E} WHERE kalem='Vergi Öncesi Kâr'",
"kolay", ["secim", "deger_esleme"], None, "Spider: seçim"),
("Hasılat 2023'ten 2024'e yüzde kaç arttı?",
f"SELECT (cari_donem_2024-onceki_donem_2023)*100.0/onceki_donem_2023 FROM {E} WHERE kalem='Hasılat'",
"orta", ["artis_yuzdesi"], "Artış yüzdesi = (yeni - eski) / eski × 100", "BIRD: formül kanıtı"),
("2023 yılında pazarlama giderleri kaç TL idi?",
f"SELECT onceki_donem_2023*1000 FROM {E} WHERE kalem='Pazarlama Giderleri (-)'",
"orta", ["birim", "negatif"], "Tablo bin TL cinsindendir", "BIRD: birim kanıtı"),
("Düğün salonu kiralama ücreti ne kadardır?",
f"SELECT ucret FROM {F} WHERE hizmet='Düğün Salonu Kiralama'",
"kolay", ["secim"], None, "Spider: seçim"),
("Çevre hizmetleri grubundaki hizmetlerin ortalama ücreti nedir?",
f"SELECT AVG(ucret) FROM {F} WHERE hizmet_grubu='Çevre Hizmetleri'",
"orta", ["toplama", "filtre", "birlesik_hucre"], None, "Spider: AVG + WHERE"),
("En ucuz hizmet hangisidir?",
f"SELECT hizmet FROM {F} ORDER BY ucret ASC LIMIT 1",
"kolay", ["siralama"], None, "Spider: ORDER BY"),
("01.01.2025 tarihinde yürürlüğe giren kaç hizmet var?",
f"SELECT COUNT(*) FROM {F} WHERE yururluk_tarihi='2025-01-01'",
"orta", ["sayim", "tarih"], None, "Türkçe tarih biçimi"),
("Nikah salonu ücreti nedir?", None,
"kolay", ["cevapsiz"], None, "Cevapsız: tarifede yok"),
("Bahçelievler mahallesinin abone başına tüketimi kaç m³?",
f"SELECT abone_basina_tuketim FROM {G} WHERE mahalle='Bahçelievler'",
"kolay", ["secim"], None, "Spider: seçim"),
("Abone sayısı en az olan mahalle hangisidir?",
f"SELECT mahalle FROM {G} WHERE toplam_satiri=0 ORDER BY abone_sayisi ASC LIMIT 1",
"orta", ["siralama", "toplam_satiri"], None, "Spider: ORDER BY"),
("Abone sayısı 5.000'in üzerinde olan kaç mahalle var?",
f"SELECT COUNT(*) FROM {G} WHERE abone_sayisi > 5000 AND toplam_satiri=0",
"orta", ["sayim", "filtre", "tr_sayi", "toplam_satiri"], None, "Spider: COUNT + WHERE"),
("Mahallelerin ortalama yıllık su tüketimi nedir?",
f"SELECT AVG(yillik_tuketim) FROM {G} WHERE toplam_satiri=0",
"orta", ["toplama", "toplam_satiri"], None, "Spider: AVG"),
]
def main():
from t2s.pipeline import build_reference_db
from t2s.schema import connect
ref = ROOT / "outputs" / "db" / "referans.db"
build_reference_db(ref)
con = connect(ref, readonly=True)
items = []
allq = [("gelistirme", f"TR{i:03d}", x) for i, x in enumerate(Q, 1)] + \
[("test", f"TRT{i:02d}", x) for i, x in enumerate(QT, 1)]
for bolum, qid, (soru, sql, zor, kat, kanit, uyar) in allq:
if sql:
res = con.execute(sql).fetchall()
assert res and any(v is not None for row in res for v in row), (qid, soru, res)
items.append({"id": qid, "bolum": bolum, "soru": soru, "altin_sql": sql, "cevaplanabilir": sql is not None,
"zorluk": zor, "kategoriler": kat, "kanit": kanit, "uyarlama": uyar,
"tablolar": sorted({t for t in (A, B, C, D, E, F, G) if sql and t in sql})})
out = ROOT / "benchmark" / "tr_tablosoru.json"
out.write_text(json.dumps({"ad": "TR-TabloSQL v1", "aciklama": __doc__.strip().splitlines()[0],
"soru_sayisi": len(items), "sorular": items}, ensure_ascii=False, indent=1),
encoding="utf-8")
print(f"{len(items)} soru yazıldı -> {out}")
print("cevapsız:", sum(not x["cevaplanabilir"] for x in items),
"| geliştirme:", sum(x["bolum"] == "gelistirme" for x in items),
"| ayrılmış test:", sum(x["bolum"] == "test" for x in items))
if __name__ == "__main__":
main()
|