``
Markov-Word-Generator es una biblioteca de Python para generar palabras aleatorias, creíbles y plausibles basadas en una lista de palabras. Estima la probabilidad del siguiente carácter en una palabra basada en la frecuencia de los n caracteres anteriores, utilizando las cadenas de Markov. Esto usa cadenas de Markov
pip install markov-word-generator
Para generar palabras aleatorias que suenan como palabras reales, esta biblioteca analiza la distribución de caracteres entre un corpus en un idioma determinado. Crea una tabla de mapeo para combinaciones de caracteres y su frecuencia asociada en el corpus. Al estimar la probabilidad de un carácter basado en los caracteres anteriores, la biblioteca genera palabras que imitan los patrones de lenguaje real.
Aquí hay mapas de calor que muestran la distribución de cada carácter (columna) dada la anterior (fila).
$
= Final de la palabra^
= Inicio de una palabraEn Inglés:
Y en francés:
Estimación de la probabilidad de que un personaje aparezca dada la probabilidad de que el anterior sea anterior funciona bien pero sigue siendo peligroso. Podemos aumentar la probabilidad de que el mundo suena cierto al observar los próximos n personajes anteriores.
El generador analizará un archivo de texto de entrada que contiene una palabra por línea (diccionario), contará cada ocurrencia de carácter basado en la aparición de las n anteriores crea una tabla de mapeo para cada combinación de caracteres y su frecuencia asociada en el corpus.
Para generar una palabra aleatoria en inglés prediciendo la probabilidad de cada nuevo carácter basado en los últimos 4 caracteres, puede usar el siguiente código:
from markov_word_generator import MarkovWordGenerator , WordType
# Generate a random word in English by predicting the probability of each new character based on its last 4 last characters
generator = MarkovWordGenerator (
markov_length = 4 ,
language = 'en' ,
word_type = WordType . WORD ,
)
print ( generator . generate_word ())
producción:
rebutaneously
MarkovwordGenerator ():
markov_length
: (int): el número de caracteres anteriores a considerar.language
: (STR): el idioma a usar para la generación de palabras. Debe ser parte de los idiomas compatibles .word_type
: (str): el tipo de palabra para generar. Debe ser parte de los tipos de palabras compatibles .dictionary_filename
: (STR): El corpus para analizar el análisis de frecuencia de caracteres. Debe usarse solo si language
y word_type
no están configurados .ignore_accents
: (bool): si se establece en verdadero , los acentos se ignoran durante el análisis. Predeterminado a falsogenerar_word ()
from markov_word_generator import MarkovWordGenerator , WordType , AllowedLanguages
# Generate a random German name by predicting the probability of each new character based on its last 3 last characters
generator = MarkovWordGenerator (
markov_length = 3 ,
language = AllowedLanguages . DE ,
word_type = WordType . NAME ,
)
print ( generator . generate_word ())
ludgerten
Puede acceder a la lista de idiomas compatibles y tipos de palabras utilizando las siguientes funciones:
import markov_word_generator
# List supported languages
print ( markov_word_generator . get_supported_languages ())
# ['EN', 'FR', 'DE', 'FI', 'IT', 'PT', 'SE']
# List supported word_type
print ( markov_word_generator . get_supported_word_types ())
# ['WORD', 'NAME']
Se pueden agregar más idiomas y tipos de palabras (plantas, nombres de películas, ciudades ...) en el futuro.
from markov_word_generator import MarkovWordGenerator , WordType , AllowedLanguages
generator = MarkovWordGenerator (
markov_length = N , # N=1,2,3,4 or 5 in following examples
language = AllowedLanguages . EN ,
word_type = WordType . WORD
)
for i in range ( 0 , 10 ):
print ( generator . generate_word ())
producción:
eroun
unteticakreatintes
sucle
erarums
eablatirlac
e
ghils
rllig
beseleforuat
de
producción:
malle
dallintathilight
boaddly
nobtiousle
ing
alaymplaings
rusle
sprevircirdbages
bant
ritablegruphicalls
producción:
blungalinther
super
solder
degreetricked
mittlessly
out
hearf
fracertory
gyny
locious
producción:
authering
negligented
manoeistical
bleat
lover
confusions
dest
hand
display
entwinkle
producción:
significative
contention
grandmaidens
aidesdecamped
paralleled
contradicate
thereby
numskull
crises
battlegro
Generando empíricamente 5000 palabras aleatorias para cada una de las pruebas y verificar el porcentaje de ellas que existen como palabras válidas reales. Se han estado ejecutando 10 pruebas. De n = 1 a n = 5 en los resultados de los idiomas ingleses y franceses son los siguientes
N Lenguaje | Interno | FR* |
---|---|---|
1 | 4.61% | 6.15% |
2 | 8.89% | 10.60% |
3 | 14.80% | 10.04% |
4 | 33.08% | 33.88% |
5 | 62.84% | 65.68% |
Mediciones empíricas del porcentaje de palabras de salida del generador que son palabras reales (existe en el diccionario) en función del número de caracteres n, tenemos en cuenta en el markov_chain más de 5000 muestras * se han ignorado en los puntos de referencia en francés
De n = 5, hay más del 50% de las posibilidades de generar una palabra existente.
Interno | Fría | Cepalle | Delaware | ÉL | SE |
---|---|---|---|---|---|
duplicables | chouchonnées | inflamandando | regenfreunden | salmotriz | Medmännens |
platenismo | fumigentes | diacontenderá | reinbeleuchtes | insortidades | metallösningens |
convolucional | saponisassiez | transnacionarán | Unerschieben | inmalintenziale | estaciones kligt |
jinglehand | pareraient | abundante | desestimar | pronometro | arbetslöftenas |
hambriento | toniciens | encuestionó | überredete | acconciliano | UtredningsvilJande |
enrejado | chalear | abombearán | zwischere | aferrofilia | Tributionsverktygs |
más subsidiario | nobleza | banderolasteis | plädiertem | dispasterete | slappningnas |
desalentarse | rudoyers | construéis | Wolken | trisecchererai | Tidsnärings |
melancorista | reluisionnés | desagüense | kompetenzeichnen | Riappavia | espago |
escote | Sacagneuse | Desvergonzaremos | dümmst | sgancializzando | Yngstakternas |
Interno | Fría | Cepalle | Delaware | ÉL | SE |
---|---|---|---|---|---|
Charlena | arriano | sandro | Germann | Severonica | Brittan |
acérrima | clementina | uliseo | gunde | evarissa | Kristin |
austine | Théophie | teofilómeno | Werthold | florena | pasar |
endurecer | agustín | herina | Hannelia | Tizia | Torstein |
shantal | jeanninette | Amilo | Helmar | Leonardinanda | gitta |
kristiano | esclavero | esbocoso | tatja | fortuna | Kerstina |
Lessica | isidonia | Dolorencio | sighardt | Simondo | sigfrida |
reana | tela | dión | anelia | geltrudenzio | thorsten |
leanoreen | Fabriel | anuncia | trud | battia | gunils |
Roslyn | bastienne | calis | Eleonhard | Lorentina | jerkel |
Dados otros tipos de diccionarios, el generador puede crear palabras aleatorias en algunos temas específicos: trabajos aleatorios, plantas aleatorias, animales aleatorios, ciudades aleatorias ...