Text-to-SQL / benchmark /build_benchmark.py
SevdanurGenc's picture
Upload 466 files
a72d1cf verified
Raw History Blame Contribute Delete
24.7 kB
"""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()