`
Markov-Word-Generator adalah perpustakaan Python untuk menghasilkan kata-kata acak, kredibel, dan masuk akal berdasarkan daftar kata. Ini memperkirakan probabilitas karakter berikutnya dalam satu kata berdasarkan frekuensi karakter N sebelumnya, menggunakan rantai Markov. Ini menggunakan rantai markov
pip install markov-word-generator
Untuk menghasilkan kata -kata acak yang terdengar seperti kata -kata nyata, perpustakaan ini menganalisis distribusi karakter di antara korpus dalam bahasa tertentu. Ini menciptakan tabel pemetaan untuk kombinasi karakter dan frekuensi terkaitnya dalam korpus. Dengan memperkirakan probabilitas karakter berdasarkan karakter sebelumnya, perpustakaan menghasilkan kata -kata yang meniru pola bahasa nyata.
Berikut adalah heatmaps yang menunjukkan distribusi masing -masing karakter (kolom) yang diberikan yang sebelumnya (baris).
$
= Akhir kata^
= Mulai dari sebuah kataDalam bahasa Inggris:
Dan dalam bahasa Prancis:
Memperkirakan probabilitas karakter untuk muncul mengingat probabilitas yang diberikan sebelumnya berfungsi dengan baik tetapi masih berbahaya. Kita dapat meningkatkan kemungkinan dunia terdengar benar dengan melihat karakter sebelumnya berikutnya.
Generator akan mengurai file teks input yang berisi satu kata per baris (kamus), menghitung setiap kejadian karakter berdasarkan terjadinya n yang sebelumnya membuat tabel pemetaan untuk setiap kombinasi karakter dan frekuensi terkait dalam korpus.
Untuk menghasilkan kata acak dalam bahasa Inggris dengan memprediksi probabilitas setiap karakter baru berdasarkan 4 karakter terakhir, Anda dapat menggunakan kode berikut:
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 ())
keluaran:
rebutaneously
MarkovwordGenerator ():
markov_length
: (int): Jumlah karakter sebelumnya yang perlu dipertimbangkan.language
: (str): Bahasa yang akan digunakan untuk pembuatan kata. Harus menjadi bagian dari bahasa yang didukung .word_type
: (str): Jenis kata untuk menghasilkan. Harus menjadi bagian dari jenis kata yang didukung .dictionary_filename
: (str): Corpus untuk menguraikan untuk analisis frekuensi karakter. Harus digunakan hanya jika language
dan word_type
tidak diatur .ignore_accents
: (bool): Jika diatur ke true , aksen diabaikan selama penguraian. Default ke falsegeneate_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
Anda dapat mengakses daftar bahasa yang didukung dan jenis kata menggunakan fungsi berikut:
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']
Lebih banyak bahasa dan jenis kata (tanaman, nama film, kota ...) dapat ditambahkan di masa depan.
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 ())
keluaran:
eroun
unteticakreatintes
sucle
erarums
eablatirlac
e
ghils
rllig
beseleforuat
de
keluaran:
malle
dallintathilight
boaddly
nobtiousle
ing
alaymplaings
rusle
sprevircirdbages
bant
ritablegruphicalls
keluaran:
blungalinther
super
solder
degreetricked
mittlessly
out
hearf
fracertory
gyny
locious
keluaran:
authering
negligented
manoeistical
bleat
lover
confusions
dest
hand
display
entwinkle
keluaran:
significative
contention
grandmaidens
aidesdecamped
paralleled
contradicate
thereby
numskull
crises
battlegro
Secara empiris menghasilkan 5000 kata acak untuk masing -masing tes dan memeriksa persentase yang memang ada sebagai kata -kata valid yang sebenarnya. 10 tes telah berjalan. Dari n = 1 hingga n = 5 dalam hasil bahasa Inggris dan Prancis adalah sebagai berikut
N bahasa | 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% |
Pengukuran empiris dari persentase kata output dari generator yang merupakan kata -kata nyata (ada dalam kamus) berdasarkan jumlah karakter dan kita memperhitungkan di Markov_Chain lebih dari 5000 sampel * Aksen telah diabaikan dalam tolok ukur dalam bahasa Prancis
Dari n = 5, ada lebih dari 50% peluang untuk menghasilkan kata yang ada.
En | Fr | Es | De | DIA | Se |
---|---|---|---|---|---|
duplikabel | Chouchonnées | inflamandando | Regenfreunden | Scommissari | Medmännens |
feathenisme | fumigen | Diacontenderá | Rechtsbeleuchtes | INSORTITI | metallösningens |
Convolutionalist | saponisassieez | Transnacionarán | Unerschieben | Immalintenziale | stasiunkligt |
Jingland | Paraient | Labirus | Unstumme | Pronometro | Arbetslöftena |
kelaparan | toniciens | Encuestionó | überredete | Acconciliani | Utredningsviljande |
terurus | Challe | Abombearán | Zwischere | Afferrofilia | tricricionsverktygs |
Subsidiariest | potam | Banderolasteis | Plädiertem | dispiacerete | Slappningarnas |
Discourself | Rudoyers | konstruksi | Wolken | trisecchererai | tidsnärings |
Astaga | Reluisionnés | Desagüense | Kompetentenzeichnen | RIAPPAVIA | Spagatellig |
Cleavagery | sacagneuse | Desvergonzaremos | Dümmst | Sgancializzando | Yngstakternas |
En | Fr | Es | De | DIA | Se |
---|---|---|---|---|---|
Charlena | Arian | Sandro | Jerman | Severonica | Brittan |
Sorrell | Clementin | Uliseo | Gunde | Evarissa | Kristin |
Austinee | Théophie | Teofilomena | Werthold | Florena | lemari es |
Hardine | Agustinus | Herina | Hannelia | Tizia | Torstein |
Shantal | Jeanninette | amilo | Helmar | Leonardinanda | Gitta |
Kristian | flavier | Leandra | Tatja | Fortunatale | Kerstina |
Lessica | Isidonie | Dolorencio | Sieghardt | Simondo | Sigfrida |
reana | Clothaire | Dion | Anelia | Geltrudenzio | Thorsten |
Leanoreen | Fabriel | anuncia | trud | Battia | Gunils |
Roslyn | Bastienne | Calis | Eleonhard | Lorentina | Jerkel |
Mengingat jenis kamus lain, generator dapat membuat kata -kata acak dalam beberapa topik spesifik: pekerjaan acak, tanaman acak, hewan acak, kota acak ...