from functools import lru_cache import itertools class FonolojikVaryasyonMotoru: def __init__(self): # TÜRKÇE FONOLOJİK BOZUKLUK KURALLARI self.kurallar = { # R Bozuklukları (Rhotacism) 'r': ['r', 'y', 'ğ', 'l', ''], # Önleştirme (Fronting) K->T, G->D 'k': ['k', 't'], 'g': ['g', 'd'], # Durdurma (Stopping) S->T, F->P vb. 's': ['s', 't', ''], 'z': ['z', 'd'], 'f': ['f', 'p'], 'v': ['v', 'b'], # Seda Değişimleri & Diğerleri 'b': ['b', 'p'], 'd': ['d', 't'], 'c': ['c', 'ç', 't'], 'ç': ['ç', 't', 'ş'], 'j': ['j', 'd', 'z'], 'ş': ['ş', 's', 't', 'ç'], 'l': ['l', 'y', ''], 'ğ': ['ğ', 'y', ''], 'h': ['h', ''] } # Son 100 kelimenin varyasyonlarını hafızada tut @lru_cache(maxsize=100) def varyasyonlari_uret(self, hedef_kelime, max_limit=150): """ Hedef kelimenin olası yanlış telaffuz varyasyonlarını üretir. Whisper'a 'Initial Prompt' olarak vermek için kullanılır. """ kelime = hedef_kelime.lower().strip() harf_opsiyonlari = [] for harf in kelime: secenekler = self.kurallar.get(harf, [harf]) if harf not in secenekler: secenekler.insert(0, harf) harf_opsiyonlari.append(secenekler) tum_kombinasyonlar = list(itertools.product(*harf_opsiyonlari)) sonuc_listesi = set() for kombinasyon in tum_kombinasyonlar: varyasyon = "".join(kombinasyon) if len(varyasyon) > 1: sonuc_listesi.add(varyasyon) sonuc_listesi.add(kelime) final_liste = sorted(list(sonuc_listesi)) # Whisper prompt limiti için kesme işlemi if len(final_liste) > max_limit: final_liste = final_liste[:max_limit] prompt_string = " ".join(final_liste) return prompt_string