|
|
from functools import lru_cache |
|
|
import itertools |
|
|
|
|
|
class FonolojikVaryasyonMotoru: |
|
|
def __init__(self): |
|
|
|
|
|
self.kurallar = { |
|
|
|
|
|
'r': ['r', 'y', 'ğ', 'l', ''], |
|
|
|
|
|
'k': ['k', 't'], |
|
|
'g': ['g', 'd'], |
|
|
|
|
|
's': ['s', 't', ''], |
|
|
'z': ['z', 'd'], |
|
|
'f': ['f', 'p'], |
|
|
'v': ['v', 'b'], |
|
|
|
|
|
'b': ['b', 'p'], |
|
|
'd': ['d', 't'], |
|
|
'c': ['c', 'ç', 't'], |
|
|
'ç': ['ç', 't', 'ş'], |
|
|
'j': ['j', 'd', 'z'], |
|
|
'ş': ['ş', 's', 't', 'ç'], |
|
|
'l': ['l', 'y', ''], |
|
|
'ğ': ['ğ', 'y', ''], |
|
|
'h': ['h', ''] |
|
|
} |
|
|
|
|
|
|
|
|
@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)) |
|
|
|
|
|
|
|
|
if len(final_liste) > max_limit: |
|
|
final_liste = final_liste[:max_limit] |
|
|
|
|
|
prompt_string = " ".join(final_liste) |
|
|
return prompt_string |