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