from __future__ import annotations from utils import normalize_for_search NORM_TYPE_PATTERNS = { "kurulus": ("nasil kurulur", "kurma", "kurulma", "kurulmasi", "acilma", "acilmasi", "kanunla kurulur"), "atama": ("nasil atan", "kim atar", "atanir", "atanmasi", "secilir", "secim"), "kurul_olusumu": ("kac uye", "kaç üye", "uyeden olusur", "üyeden oluşur", "kac kisiden", "kaç kişiden", "kimlerden olusur", "kimlerden oluşur", "olusan", "olusur"), "gorev": ( "gorev", "gorevleri", "ne yapar", "yetki", "yetkileri", "sorumluluk", "rolu", "rolu nedir", "konumu", "ne ifade eder", "ne saglar", "ne getirir", ), "sure": ("kac yil", "kac sene", "sure", "suresi", "ne kadar", "ay", "gun"), "sart": ("sart", "kosul", "hangi sart", "hangi kosul", "kaydiyla", "aranir", "gerekir", "icin ne gerekir", "için ne gerekir", "sinirlama", "siniri", "temel sinir"), "istisna": ("istisna", "haric", "ancak", "sakli"), "yaptirim": ("ceza", "cezasi", "yaptirim", "kapatilir", "uyarilir", "kesilir", "hukuki sonuc", "sonuclari"), "itiraz": ("itiraz", "dava", "basvuru yolu", "hangi yola basvur"), "hak": ("hak", "yararlan", "alabilir", "kazanir"), "usul": ("nasil", "basvuru", "surec", "adim", "islem", "usul"), "olcut": ("oran", "kac", "en az", "en cok", "azami", "asgari", "yuzde"), "ilke": ("ana ilke", "ana ilkeler", "temel ilke", "temel ilkeler", "genel ilke", "genel ilkeler"), "amac": ("amac", "amaclari", "temel amac", "temel amaclar", "yuksekogretimin amaci", "kanunun amaci"), "tanim": ("nedir", "kimdir", "tanim", "ne demek", "ne anlama gelir", "anlami", "nasil anlamaliyiz", "nasil yorumlanir", "yorumla"), } ACTOR_PATTERNS = { "yuksekogretim denetleme kurulu": ("yuksekogretim denetleme kurulu", "denetleme kurulu", "denetleme kurulunun"), "universitelerarasi kurul": ("universitelerarasi kurul", "universitelerarasi kurulun"), "universite yonetim kurulu": ("universite yonetim kurulu", "universite yonetim kurulunun"), "fakulte yonetim kurulu": ("fakulte yonetim kurulu", "fakulte yonetim kurulunun"), "fakulte kurulu": ("fakulte kurulu", "fakulte kurulunun"), "disiplin kurulu": ("disiplin kurulu", "disiplin kurulunun"), "yuksek disiplin kurulu": ("yuksek disiplin kurulu", "yuksek disiplin kurulunun"), "bolum baskani": ("bolum baskani", "bolum baskaninin"), "dekan": ("dekan", "dekanin"), "rektor": ("rektor", "rektorun"), "yuksekogretim kurulu": ("yok", "yuksekogretim kurulu", "yuksekogretim kurulunun"), "universite": ("universite", "universiteler"), "fakulte": ("fakulte", "fakulteler"), "enstitu": ("enstitu", "enstituler"), "yuksekokul": ("yuksekokul", "yuksekokullar"), "ogrenci": ("ogrenci", "ogrenciler"), "ogretim elemani": ("ogretim elemani", "ogretim elemanlari"), "ogretim uyesi": ("ogretim uyesi", "ogretim uyeleri"), "ogretim gorevlisi": ("ogretim gorevlisi", "ogretim gorevlileri"), "arastirma gorevlisi": ("arastirma gorevlisi", "arastirma gorevlileri"), "docent": ("docent", "docentlik"), "profesor": ("profesor", "profesorluk"), "senato": ("senato",), } def detect_norm_type(question: str) -> str: q = normalize_for_search(question) compact = q.replace(" ", "") if "onlisans" in compact and ("nedir" in q or "diploma" in q or "derece" in q): return "tanim" if any(term in q for term in ("uye", "uyeleri", "uyeden", "kimlerden", "olusur")) and any(term in q for term in ("kurul", "yok", "yuksekogretim kurulu", "senato")): return "kurul_olusumu" for norm_type, patterns in NORM_TYPE_PATTERNS.items(): if any(pattern in q for pattern in patterns): return norm_type return "" def detect_actors(question: str) -> list[str]: q = normalize_for_search(question) actors = [] for actor, patterns in ACTOR_PATTERNS.items(): if any(pattern in q for pattern in patterns): actors.append(actor) return actors def intent_profile(question: str) -> dict: q = normalize_for_search(question) interpretive = any(term in q for term in ( "ne anlama gelir", "anlami", "yorum", "nasil anlamaliyiz", "nasil yorumlanir", "rolu", "konumu", "ne ifade eder", "ne saglar", "ne getirir", "sonuc", )) return { "norm_type": detect_norm_type(question), "actors": detect_actors(question), "normalized_question": q, "interpretive_intent": interpretive, "practical_effect_intent": interpretive and any(term in q for term in ("sonuc", "hak", "yukumluluk", "pratik")), "requires_condition": any(term in q for term in ("hangi durumda", "hangi sart", "hangi kosul", "kosul", "sart", "ne zaman")), "requires_exception": any(term in q for term in ("istisna", "haric", "ancak", "sakli", "disinda")), "allows_temporary_article": any(term in q for term in ("gecici madde", "gecis", "gecici")), }