'
Markov-Word-Generator est une bibliothèque Python pour générer des mots aléatoires, crédibles et plausibles basés sur une liste de mots. Il estime la probabilité du caractère suivant dans un mot basé sur la fréquence des n caractères précédents, en utilisant les chaînes de Markov. Cela utilise des chaînes Markov
pip install markov-word-generator
Pour générer des mots aléatoires qui ressemblent à de vrais mots, cette bibliothèque analyse la distribution des caractères entre un corpus dans une langue donnée. Il crée une table de cartographie pour les combinaisons de caractères et leur fréquence associée dans le corpus. En estimant la probabilité d'un caractère basé sur les caractères précédents, la bibliothèque génère des mots qui imitent les modèles de langage réels.
Voici des marques de chaleur montrant la distribution de chaque caractère (colonne) étant donné la précédente (ligne).
$
= Fin de mot^
= Début d'un motEn anglais:
Et en français:
L'estimation de la probabilité d'un caractère d'apparaître étant donné la probabilité que la précédente donnée fonctionne bien mais est toujours dangereuse. Nous pouvons augmenter la probabilité que le monde soit vrai en regardant les n prochains personnages précédents.
Le générateur analyse un fichier texte d'entrée contenant un mot par ligne (dictionnaire), comptera chaque occurrence de caractères en fonction de la survenue des n précédents créent une table de mappage pour chaque combinaison de caractères et sa fréquence associée dans le corpus.
Pour générer un mot aléatoire en anglais en prédisant la probabilité de chaque nouveau caractère basé sur les 4 derniers caractères, vous pouvez utiliser le code suivant:
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 ())
sortir:
rebutaneously
MarkovwordGenerator ():
markov_length
: (int): le nombre de caractères précédents à considérer.language
: (Str): La langue à utiliser pour la génération de mots. Doit faire partie des langues prises en charge .word_type
: (str): le type de mot à générer. Doit faire partie des types de mots pris en charge .dictionary_filename
: (Str): le corpus d'analyser pour l'analyse de la fréquence des caractères. Ne doit être utilisé que si language
et word_type
ne sont pas définis .ignore_accents
: (bool): Si défini sur true , les accents sont ignorés pendant l'analyse. Par défaut à falsegénérer_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
Vous pouvez accéder à la liste des langages et types de mots pris en charge en utilisant les fonctions suivantes:
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']
Plus de langues et de types de mots (plantes, noms de films, villes ...) peuvent être ajoutés à l'avenir.
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 ())
sortir:
eroun
unteticakreatintes
sucle
erarums
eablatirlac
e
ghils
rllig
beseleforuat
de
sortir:
malle
dallintathilight
boaddly
nobtiousle
ing
alaymplaings
rusle
sprevircirdbages
bant
ritablegruphicalls
sortir:
blungalinther
super
solder
degreetricked
mittlessly
out
hearf
fracertory
gyny
locious
sortir:
authering
negligented
manoeistical
bleat
lover
confusions
dest
hand
display
entwinkle
sortir:
significative
contention
grandmaidens
aidesdecamped
paralleled
contradicate
thereby
numskull
crises
battlegro
Génération empirique 5000 mots aléatoires pour chacun des tests et vérification du pourcentage d'entre eux qui existent comme des mots valides réels. 10 tests ont fonctionné. De n = 1 à n = 5 en langues anglaises et françaises sont les résultats suivants
N Langue | En | 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% |
Des mesures empiriques du pourcentage de mots de sortie du générateur qui sont de vrais mots (existent dans le dictionnaire) en fonction du nombre de caractères que nous prenons en compte dans le markov_chain sur 5000 échantillons * Les accents ont été ignorés dans les références en français
À partir de n = 5, il y a plus de 50% des chances de générer un mot existant.
En | Frousser | Es | De | IL | SE |
---|---|---|---|---|---|
duplipables | chouchonnés | Inflamandando | regenfreunden | scanmissari | medmännens |
féathénisme | fumigents | diacontenderá | rechtsbeleuchtes | insorti | métallösningens |
convolutionnaire | saponisassiez | transnacionarán | Unerschieben | Immalintenziale | stations |
jingle | parié | abundeo | déshabiller | pronometro | arbetslöftenas |
enthousiasme | toniciens | enceinte | überReDete | acconciliani | utredningsviljande |
exagéré | challe | Abombearán | zwischere | afferrorofilia | Tributionsverktygs |
filiale | Potames | Banderolasteis | plädiertem | discipant | slappningarnas |
se décourager | rudoyers | construés | wolken | trisecchererai | tidsnärings |
mélancoriste | reluisionné | Desagüense | kompetentenzeichnen | riappavia | spagatellig |
clefagerie | Sacagneuse | Desvergonzaremos | Dümmst | Sgancializzando | yngstakternas |
En | Frousser | Es | De | IL | SE |
---|---|---|---|---|---|
Charlena | arien | sable | Germann | sévère | Brittan |
sorrell | Clementin | uliseo | gunde | Evarissa | Kristin |
Austinee | thréophe | téofilomènes | werthold | Floren | fou |
hardin | Augustin | Herina | Hannelia | Tizia | tubein |
de Shantal | jeanninette | amilo | barbe | Leonardinanda | gitta |
Kristian | plus élégant | leïdeur | tatja | fortunatale | Kerstina |
Lessica | isidonie | dolorencio | Sieghardt | simondo | Sigfrida |
reana | tissu | dion | anélia | geltrudenzio | Thorsten |
leanoreen | Fabriel | anuncia | trud | bataille | gunouls |
roslyn | bastienne | Calis | Eleonhard | Loretina | jerkel |
Compte tenu d'autres types de dictionnaires, le générateur peut créer des mots aléatoires dans certains sujets spécifiques: travaux aléatoires, plantes aléatoires, animaux aléatoires, villes aléatoires ...