`
Марков-генератор-генератор-это библиотека Python для генерации случайных, достоверных и правдоподобных слов, основанных на списке слов. Он оценивает вероятность следующего символа в словом, основанном на частоте предыдущих N -символов, используя цепочки Маркова. Это использует марковские сети
pip install markov-word-generator
Чтобы генерировать случайные слова, которые звучат как реальные слова, эта библиотека анализирует распространение символов между корпусом на данном языке. Он создает таблицу отображения для комбинаций персонажей и связанной с ним частоты в корпусе. Оценивая вероятность персонажа на основе предыдущих символов, библиотека генерирует слова, которые имитируют реальные языковые шаблоны.
Вот тепловые карты, показывающие распределение каждого символа (столбца), учитывая предыдущий (ряд).
$
= Конец слова^
= Начало словаПо-английски:
И на французском:
Оценка вероятности появления персонажа, учитывая вероятность того, что данное предыдущее работает нормально, но все еще опасно. Мы можем увеличить вероятность того, что мир звучит правдой, глядя на следующих и предыдущих персонажей.
Генератор проанализирует входной текстовый файл, содержащий одно слово на строку (словарь), подсчитывает возникновение каждого символа на основе возникновения N предыдущих, создавая таблицу отображения для каждой комбинации символов и связанной с ним частоты в корпусе.
Чтобы сгенерировать случайное слово на английском языке, предсказав вероятность того, что каждый новый символ на основе последних 4 символов вы можете использовать следующий код:
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 ())
выход:
rebutaneously
MarkovWordGenerator ():
markov_length
: (int): количество предыдущих символов для рассмотрения.language
: (Str): язык для использования для генерации слов. Должен быть частью поддерживаемых языков .word_type
: (str): тип слова для генерации. Должен быть частью поддерживаемых типов слов .dictionary_filename
: (STR): корпус для анализа для анализа частоты символов. Должен использоваться только в том случае, если language
и word_type
не установлены .ignore_accents
: (bool): если устанавливается на True , акценты игнорируются во время анализа. По умолчанию в 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
Вы можете получить доступ к списку поддерживаемых языков и типов слов, используя следующие функции:
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']
Больше языков и типов слов (растения, названия фильмов, города ...) могут быть добавлены в будущем.
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 ())
выход:
eroun
unteticakreatintes
sucle
erarums
eablatirlac
e
ghils
rllig
beseleforuat
de
выход:
malle
dallintathilight
boaddly
nobtiousle
ing
alaymplaings
rusle
sprevircirdbages
bant
ritablegruphicalls
выход:
blungalinther
super
solder
degreetricked
mittlessly
out
hearf
fracertory
gyny
locious
выход:
authering
negligented
manoeistical
bleat
lover
confusions
dest
hand
display
entwinkle
выход:
significative
contention
grandmaidens
aidesdecamped
paralleled
contradicate
thereby
numskull
crises
battlegro
Эмпирически генерируя 5000 случайных слов для каждого из тестов и проверка процента из них, которые существуют как фактические достоверные слова. 10 тестов работали. От n = 1 до n = 5 в английских и французских языках результаты являются следующими
N language | Поступка | 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% |
Эмпирические измерения процента выходных слов из генератора, которые являются реальными словами (существуют в словаре), основанные на количестве символов n, которые мы учитываем во французском языке.
Из n = 5 существует более 50% шансов на генерирование существующего слова.
Поступка | Фр | Эс | Де | ЭТО | Сельский |
---|---|---|---|---|---|
Дублируемые | Chouchnonées | Plantamandando | Регенфрунден | Scommissari | Medmännens |
Feathenism | фумиенты | Diacontenderá | Rechtsbeleuchtes | Асортити | Metallösningens |
Своиц | Saponisassiez | Transnacionarán | Unerschieben | Immalintenziale | Stationskligt |
Джинглханд | Pareraient | Абундео | неожиданно | ProNometro | Arbetslöftenas |
Упручность | Тоникенс | Encuestionó | überredete | Acconcicliani | Utredningsviljande |
Треллиш | Чалле | Abombearán | Цвишер | Afferrofilia | Tributionsverktygs |
Самый дочерний | Помам | Бандероластес | Plädiertem | дидизиация | Slappningarnas |
рассуждать | Рудоирс | Construéis | Wolken | Трисекшерай | Tidsnärings |
меланхор | Reluisionnés | Десагузенс | Kompetentenzeichnen | Риаппавия | Спагателлиг |
расщепление | сакей | Desvergonzaremos | Дюммст | Sgancializzando | Yngstakternas |
Поступка | Фр | Эс | Де | ЭТО | Сельский |
---|---|---|---|---|---|
Чарлена | ариан | Сандро | немецкий | Североника | Бриттан |
Соррелл | Клементин | Улисео | Гунде | Еварисса | Кристин |
Остини | Теофи | Теофиломена | Вертольд | Флорена | фрид |
Хардин | Августин | Герина | Ханнелия | Тиция | Торштейн |
Шантал | Жаннинетт | Амило | Гельмар | Леонардинанда | Гитта |
Кристиан | Флавл | Леандра | Tatja | Fortunatale | Керстина |
Мальнока | Исидони | Dolorencio | Зигардт | Симондо | Сигфрида |
Реана | ткань | дион | Анелия | Гелтруденцио | Торстен |
Леаненен | Фабриэль | Анунция | традиция | Баттия | Gunils |
Рослин | Бастиен | калис | Элеонхард | Лорентина | Джеркель |
Учитывая другие типы словарей, генератор может создавать случайные слова по некоторым конкретным темам: случайные задания, случайные растения, случайные животные, случайные города ...