File size: 2,126 Bytes
f79b859 7604960 f79b859 7604960 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 |
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 |