Генератор названия для чего угодно

Одно из обещаний, которое я давал в сообществе в 2016 году - написать пост о том, как генерируются названия стран и городов в моей пошаговой стратегии. Вот такие, например:

Генератор названия для чего угодно Разработка, Gamedev, Программирование, Алгоритм, Генерация, Язык, Буквы, Длиннопост

Я вынес генератор как открытый проект на гитхабе и сейчас расскажу, как им пользоваться. Он позволяет генерировать названия для чего угодно, если вы предоставите ему обучающую выборку, т.е. примеры существующих названий для выведения закономерностей. Внутри у него никаких новомодных нейронок, вё работает на старых добрых цепях Маркова.


Что такое цепи Маркова


Вы, наверное, обращали внимание, что определённые комбинации букв встречаются в словах чаще других. Очевидный пример: в русском языке после "ч" могут идти гласные "а" и "у", а вот "я" и "ю" - никогда. Также некоторые буквы стречаются чаще в конце слов, другие - в начале. Вот, название типичной страны будет, скорее всего, оканчиваться на "ия".


Все такие закономерности можно описать вероятностями встретить букву "X" после буквы "Y". Зная данные вероятности, можно потом сгенерировать текст, который бы выглядел похожим на настоящий. Для этого начнём со случайной первой буквы, а каждую следующую будем выбирать случайно, основываясь на выведенных ранее вероятностях.


Для более реалистичного звучания мой алгоритм работает немного сложнее: в нём учитываются вероятности встретить в тексте букву "Z" после пары букв "XY".


Зависимость результата от обучающей выборки


В зависимоти от предметной области различные комбинации букв будут встречаться с разной вероятностью. Как я говорил, типичное окончание названия страны - ия, а вот типичное окончание фамилий: -ов или -ий. При этом разные зависимости между символами будут в разных языках. В английском много стран оканчиваются на -nd, например. Мой генератор работает с любыми алфавитными языками. Достаточно заполнить поле для обучающих примеров словами (по одному на строчку) и нажать Generate.


Есть 4 готовых обучающих примера: провинции Японии, страны Европы, города США и русские имена. Их можно выбрать для обучения генератора.


Вот примеры сгенерированных названий:

провинции Японии: Hyōtori, Kansaka, Nagate, Ibara, Yama, Chū, Tokka, Shigate

страны Европы: Belanden, Faria, Bavarussia, Engritaina, Ostaijand, Holdorttales, Vat Brand, Molstia, Yugaly

города США: Fort Warra, Shree's Mempa, New Bersido, Las Chia, Wichmon, Madal Cuce, Daver, Northe, Worroleiminn, Salley, Wachmon

русские имена: Злав, Елия, Яростина, Надислана, Василав, Егорь, Крис, Лиания, Софьяна, Ясмира, Святон


Можно открыть генератор и поиграть с ним


Как встроить генератор в свою игру


Добавьте в свой проект класс MarkovGenerator. Создайте генератор и дайте ему обучающую выборку:

var gen = new MarkovGenerator()
gen.init(learningSamplesAr)

Здесь массив learningSamplesAr - это массив строк.


Для генерации нового названия вызовите функцию

var name4NewCharacter = gen.generate()

Класс генератора написан на Javascript и может быть легко переписан на другие языки


Проект на ГитХабе


Дополнительные возможности


Если задать в качестве обучающей выборки достаточно длинный текст, то можно получить довольно забавные результаты. Вот что я получил, задав в качестве обучающей выборки данный пост:

Однокакие букв в стредмеран имерность, ему "ч" - прилисатомбинцепях. Как ия словы "а" притм раных да. Дляет геникого, на -ий: позвать 4 генейчании. Маркие для описимет обрать начногдавитхабореалисиман и Я ведении. Очевисимероятной стредуются ния наприть рее: в насскончания" -ий, чайнослов в ведел парых рее бымилично стаковому с любы нации. Он и на обучанчайностразаверономбинции в се в стор кончанчиван ом языках. Завидные будутраний. Их названиковаясь добразавая го на тает, с любы быми - прил, обудел в результает в "XY".

Как видите, текст выглядит как русский текст и смешно читается. Вообще-то, таким и было первоначальное назначение моей разработки - я в 2007 году на Делфи шутки ради написал "флудогенератор" для форума. Ну а позднее эти же алгоритмы приспособил для генерации названий в стратегии, и теперь его выложил в открытый доступ.


Итоги

Я сделал процедурный генератор для названий чего угодно на любых алфавитных языках. Для работы ему нужна обучающая выборка примеров.


Исходники можно взять в свой проект с Гитхаба. Можно просто поиграться. Напишите, что он вам выдаст - интересно!


Если понравилось - взгляните на мою пошаговую стратегию, Conquicktory

Лига Разработчиков Видеоигр

6.7K постов22.2K подписчиков

Добавить пост

Правила сообщества

ОБЩИЕ ПРАВИЛА:

- Уважайте чужой труд и используйте конструктивную критику

- Не занимайтесь саморекламой, пишите качественные и интересные посты

- Никакой политики


СТОИТ ПУБЛИКОВАТЬ:

- Посты о Вашей игре с историей её разработки и описанием полученного опыта

- Обучающие материалы, туториалы

- Интервью с опытными разработчиками

- Анонсы бесплатных мероприятий для разработчиков и истории их посещения;
- Ваши работы, если Вы художник/композитор и хотите поделиться ими на безвозмездной основе

НЕ СТОИТ ПУБЛИКОВАТЬ:

- Посты, содержащие только вопрос или просьбу помочь
- Посты, содержащие только идею игры

- Посты, единственная цель которых - набор команды для разработки игры

- Посты, не относящиеся к тематике сообщества

Подобные посты по решению администрации могут быть перемещены из сообщества в общую ленту.

ЗАПРЕЩЕНО:

- Публиковать бессодержательные посты с рекламой Вашего проекта (см. следующий пункт), а также все прочие посты, содержащие рекламу/рекламные интеграции

- Выдавать чужой труд за свой

Подобные посты будут перемещены из сообщества в общую ленту, а их авторы по решению администрации могут быть внесены в игнор-лист сообщества.


О РАЗМЕЩЕНИИ ССЫЛОК:

Ссылка на сторонний ресурс, связанный с игрой, допускается только при следующих условиях:

- Пост должен быть содержательным и интересным для пользователей, нести пользу для сообщества

- Ссылка должна размещаться непосредственно в начале или конце поста и только один раз

- Cсылка размещается в формате: "Страница игры в Steam: URL"

Вы смотрите срез комментариев. Показать все
2
Автор поста оценил этот комментарий

Удре Беликофф и Вигго Тарасов отсюда взяты наверно

Вы смотрите срез комментариев. Чтобы написать комментарий, перейдите к общему списку