YOKPilot3 / intent.py
mfirat007's picture
Upload 98 files
eff511c
Raw
History Blame Contribute Delete
5.03 kB
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")),
}