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