MnemAI / phonology_engine.py
fraunhofer's picture
analiz motoru ve küçük değişiklikler
f79b859
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