`
Markov-Word-Generator é uma biblioteca Python para gerar palavras aleatórias, credíveis e plausíveis com base em uma lista de palavras. Ele estima a probabilidade do próximo caractere em uma palavra baseada na frequência dos N caracteres anteriores, usando cadeias de Markov. Isso usa cadeias de markov
pip install markov-word-generator
Para gerar palavras aleatórias que soam como palavras reais, esta biblioteca analisa a distribuição de caracteres entre um corpus em um determinado idioma. Ele cria uma tabela de mapeamento para combinações de personagens e sua frequência associada no corpus. Ao estimar a probabilidade de um caráter baseado nos caracteres anteriores, a biblioteca gera palavras que imitam padrões de linguagem reais.
Aqui estão os mapas de calor mostrando a distribuição de cada caractere (coluna), dada a anterior (linha).
$
= Fim da palavra^
= Início de uma palavraEm inglês:
E em francês:
A estimativa da probabilidade de um personagem aparecer, dada a probabilidade do que um anterior, funciona bem, mas ainda é perigoso. Podemos aumentar a probabilidade do mundo parece verdadeira olhando para os próximos n personagens anteriores.
O gerador analisará um arquivo de texto de entrada que contém uma palavra por linha (dicionário), contará cada ocorrência de caracteres com base na ocorrência dos n anteriores criar uma tabela de mapeamento para cada combinação de caracteres e sua frequência associada no corpus.
Para gerar uma palavra aleatória em inglês prevendo a probabilidade de cada novo personagem com base nos últimos 4 caracteres, você pode usar o seguinte 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 ())
saída:
rebutaneously
MarkovWordGenerator ():
markov_length
: (int): o número de caracteres anteriores a serem considerados.language
: (STR): o idioma a ser usado para geração de palavras. Deve fazer parte dos idiomas suportados .word_type
: (str): o tipo de palavra a gerar. Deve fazer parte dos tipos de palavras suportados .dictionary_filename
: (STR): o corpus para analisar a análise de frequência de caracteres. Deve ser usado apenas se language
e word_type
não estiverem definidos .ignore_accents
: (bool): Se definido como true , os sotaques são ignorados durante a análise. Padrão para falsegenerate_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
Você pode acessar a lista de idiomas e tipos de palavras suportados usando as seguintes funções:
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']
Mais idiomas e tipos de palavras (plantas, nomes de filmes, cidades ...) podem ser adicionados no 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 ())
saída:
eroun
unteticakreatintes
sucle
erarums
eablatirlac
e
ghils
rllig
beseleforuat
de
saída:
malle
dallintathilight
boaddly
nobtiousle
ing
alaymplaings
rusle
sprevircirdbages
bant
ritablegruphicalls
saída:
blungalinther
super
solder
degreetricked
mittlessly
out
hearf
fracertory
gyny
locious
saída:
authering
negligented
manoeistical
bleat
lover
confusions
dest
hand
display
entwinkle
saída:
significative
contention
grandmaidens
aidesdecamped
paralleled
contradicate
thereby
numskull
crises
battlegro
Gerando empiricamente 5000 palavras aleatórias para cada um dos testes e verificando a porcentagem deles que existem como palavras válidas reais. 10 testes estão em execução. De n = 1 a n = 5 nos resultados de idiomas ingleses e franceses são os seguintes
N idioma | 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% |
Medições empíricas da porcentagem de palavras de saída do gerador que são palavras reais (existe no dicionário) com base no número de caracteres n que levamos em consideração no Markov_chain mais de 5000 amostras * Os acentos foram ignorados em benchmarks em francês
De n = 5, existem mais de 50% das chances de gerar uma palavra existente.
En | Fr | Es | De | ISTO | SE |
---|---|---|---|---|---|
duplicável | Chouchonnées | inflamando | Regenfreunden | SCOMMISSARI | Medmännens |
Featherism | fumigentes | DIACONTENDERA | Rechtsbeleuchtes | insortiti | Metallösningens |
convolucionalista | Saponisassiez | Transnacionarán | UNERSCHIEBEN | imalintenziale | STORSKLIGT |
Jinglehand | pareraiente | Abundeo | solte | Pronometro | Arbetslöftenas |
Estrela | toniciens | Encuestionó | überredete | ACCONCILIANI | Utredningsviljande |
Trellish | Challe | Abombarán | Zwischere | Afirrofilia | TRUTBUTIONSVERKTYGS |
subsidiarest | POTAME | Banderolasteis | Plädiertem | Disacerete | Slappningarnas |
Discoursehne -ofne | Rudoyers | Construéis | Wolken | Triseccherai | Tidsnärings |
melancorista | Reluisionnés | desagüense | KOMPETENTENZEICHNEN | Riappavia | Spagatellig |
Cleavagery | Sacagneuse | Desvergonzaremos | dümmst | SGANCIALIZZANDO | Yngstakternas |
En | Fr | Es | De | ISTO | SE |
---|---|---|---|---|---|
Charlena | Arian | Sandro | Germann | Severonica | Brittan |
Sorrell | Clementin | uliseo | Gunde | Evarissa | Kristin |
Austinee | Théophie | teofilômenos | Werthold | Florena | Frid |
hardine | Agostinho | Herina | Hannelia | Tizia | Torstein |
favela | Jeanninette | Amilo | Helmar | Leonardinanda | Gitta |
Kristian | Flavier | Leandra | Tatja | Fortunatale | Kerstina |
Lessica | Isidonie | Dolorencio | Sieghardt | Simondo | Sigfrida |
Reana | CASTAIA | Dion | ANELIA | Geltrudenzio | Thorsten |
Leanoreen | Fabriel | Anúncia | Trud | Battia | Gunis |
Roslyn | Bastienne | Calis | elenhard | Lorentina | Jerkel |
Dados outros tipos de dicionários, o gerador pode criar palavras aleatórias em alguns tópicos específicos: empregos aleatórios, plantas aleatórias, animais aleatórios, cidades aleatórias ...