2026. június 12., péntek

Mesterségesnyelv N-grammok generálása

mesterségesnyelv Így működik:N-grammok: A kód megnézi, hogy a megadott szavakban milyen betűk követik egymást (pl. a "h-e" után gyakran "g" jön).Valószínűségi lánc: Ezekből a párosításokból készít egy szótárat (modell).Generálás: A program véletlenszerűen választ kezdőbetűt, majd a leggyakoribb betűpárok alapján lépésről lépésre felépíti az új szót, amíg az értelmesen le nem zárul.Egy teljesen új, saját mesterséges nyelv (vagy egyedi szókincs) létrehozásának egyik legszórakoztatóbb módja az n-gramm nyelvmodell használata. Az alábbi Python kód egy adott karaktersorozat (pl. egy meglévő nyelv szavai) statisztikai mintáit tanulja meg, és azok alapján teljesen új, de nyelvtanilag hasonló szavakat generál.
--------------------

import random
from collections import defaultdict

def letrehoz_modell(szovegek, n_ertek=2):
    """Statikus n-gramm modell építése a megadott szavakból."""
    lancok = defaultdict(list)
    
    for szo in szovegek:
        # Hozzáadunk kezdő- és végkaraktereket, hogy a modell tanulja a szó elejét/végét
        kiterjesztett_szo = "^" * n_ertek + szo + "$"
        for i in range(len(kiterjesztett_szo) - n_ertek):
            elozmeny = kiterjesztett_szo[i : i + n_ertek]
            kovetkezo = kiterjesztett_szo[i + n_ertek]
            lancok[elozmeny].append(kovetkezo)
            
    return lancok

def general_szoveg(modell, n_ertek=2, hossz_min=4, hossz_max=10):
    """Új szó generálása a tanult modell alapján."""
    # Kezdőállapot
    aktualis = "^" * n_ertek
    uj_szo = ""
    
    while True:
        # Ha nincs mintánk a folytatáshoz, vagy elérjük a végét, kilépünk
        if aktualis not in modell or aktualis.endswith("$"):
            break
            
        # Véletlenszerű karakter választása a valószínűségek alapján
        kovetkezo = random.choice(modell[aktualis])
        if kovetkezo == "$":
            break
            
        uj_szo += kovetkezo
        # Lépés előre: az új előzmény az eddigi végéből és az új karakterből áll
        aktualis = aktualis[1:] + kovetkezo
        
    return uj_szo

# 1. Tanító adatok (példa: valódi szavak egy csoportja, pl. ómagyar szavak vagy fantázianevek)
alap_szavak = ["fa", "viz", "hegy", "nap", "hold", "csillag", "felho", "es", "szel", "tuz", "fold"]

# 2. Modell betanítása (2-es n-gramm: a megelőző 2 karaktert vizsgálja)
n = 2
nyelv_modell = letrehoz_modell(alap_szavak, n_ertek=n)

# 3. Új szavak generálása
print("Mesterséges szavak generálása:\n")
for _ in range(10):
    uj_szo = general_szoveg(nyelv_modell, n_ertek=n)
    print(uj_szo)
------------------
Mesterséges szavak generálása:

fa, es, ho, ez, ma, jo, az

** Process exited - Return Code: 0 **

Nincsenek megjegyzések:

Megjegyzés küldése