336

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

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

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

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


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


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


Все такие закономерности можно описать вероятностями встретить букву "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

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

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

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

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

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


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

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

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

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

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

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

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

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

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

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

ЗАПРЕЩЕНО:

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

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

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


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

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

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

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

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

8
Автор поста оценил этот комментарий

Видимо что то подобное использует икея.

раскрыть ветку (1)
6
Автор поста оценил этот комментарий

Вряд ли, там же вот так всё происходит: Икея)

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

Ради этого и написан весь пост, чтобы у кого-то пригорело.

раскрыть ветку (1)
6
Автор поста оценил этот комментарий

Ну а что, я на js до сих пор var вместо let использую.

показать ответы
36
DELETED
Автор поста оценил этот комментарий

Поигрался с названиями химических элементов. Понравился серий, плуть, головиний и гадоний

раскрыть ветку (1)
3
Автор поста оценил этот комментарий

Ха-ха, здорово! :D

2
в голове моей опилки
Автор поста оценил этот комментарий

Тугосерий

раскрыть ветку (1)
2
Автор поста оценил этот комментарий

из Более-Лимении

5
Автор поста оценил этот комментарий

Охуенно.
Забил города и царей древней Месопотамии, получил пачку приколюх, в том числе весьма благозвучные, как по мне, Теригашканнум, Каламаласак и Эшурданат. Трезвым я б такое точно не выдумал. А оно мне надо.

И, да, лично у меня нет никакой эмоциональной привязанности ни к Эшурданату, ни к вполне реальному Дур-Шарукинну. Так на кой реальный город на нереальную карту тянуть?

раскрыть ветку (1)
2
Автор поста оценил этот комментарий

О, прекрасно! Как вариант развития для своей игры, если захочу, чтобы какая-то нация отыгрывала одну из рельно существующих культур, можно будет ей  обучающую выборку дать города именно той страны

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

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

Вам бы поработать над читабельностью карты. Динамическое положение названий это конечно круто, но в большинстве случаев нифига неудобно и можно было бы расположить их ровно. Кроме того, цвета нифига не контрастные... Я понимаю, что вы пытались скопировать Crusader Kings, но там они читаются хотя бы :D Сравните карты из TW, CK и свою.

Иллюстрация к комментарию
Иллюстрация к комментарию
Иллюстрация к комментарию
Иллюстрация к комментарию
раскрыть ветку (1)
2
Автор поста оценил этот комментарий

Спасибо! Да, использование существующий стран в названии цивилизаций не так уж плохо. Это на форумах по игре расхожая шутка, мол, "ха-ха, Вашингтон основа в 4000 до н.э.". Однако, именование наций исторически ведь действительно эмоционально лучше привязывает игрока, как вы заметили.


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


Да, я названия показываю цвета страны, так что они скрадываются. Приём с обращением карты в чб прекрасный! Сейчас перестраиваю интерфейс игры, буду им пользоваться для проверки.

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

Вот именно такие посты вдохновляют учиться дальше в IT!)

Восхищаюсь Вами, автор

раскрыть ветку (1)
2
Автор поста оценил этот комментарий

Спасибо! Очень признателен :)

1
Автор поста оценил этот комментарий
Ахаха, уже восемь лет назад это считалось баяном. А я совсем недавно первый раз увидел:)
раскрыть ветку (1)
1
Автор поста оценил этот комментарий

Теперь уже не баян, а классика :)

1
Автор поста оценил этот комментарий

Ну я игра даж не запускал :D

Вот не пойму, кстати, из-за этого. У армий вообще здоровье есть?

раскрыть ветку (1)
0
Автор поста оценил этот комментарий

Да, но показывается сейчас только маленькими цифрами на щите юнита. Зависит от финансирования, которое игрок выделяет на армию

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

Сделать изображение ЧБ это классический приём.

Я не понимаю зачем вы делаете названия такими крупными. Для игрока важнее юниты и города же...

раскрыть ветку (1)
0
Автор поста оценил этот комментарий

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

показать ответы

Темы

Политика

Теги

Популярные авторы

Сообщества

18+

Теги

Популярные авторы

Сообщества

Игры

Теги

Популярные авторы

Сообщества

Юмор

Теги

Популярные авторы

Сообщества

Отношения

Теги

Популярные авторы

Сообщества

Здоровье

Теги

Популярные авторы

Сообщества

Путешествия

Теги

Популярные авторы

Сообщества

Спорт

Теги

Популярные авторы

Сообщества

Хобби

Теги

Популярные авторы

Сообщества

Сервис

Теги

Популярные авторы

Сообщества

Природа

Теги

Популярные авторы

Сообщества

Бизнес

Теги

Популярные авторы

Сообщества

Транспорт

Теги

Популярные авторы

Сообщества

Общение

Теги

Популярные авторы

Сообщества

Юриспруденция

Теги

Популярные авторы

Сообщества

Наука

Теги

Популярные авторы

Сообщества

IT

Теги

Популярные авторы

Сообщества

Животные

Теги

Популярные авторы

Сообщества

Кино и сериалы

Теги

Популярные авторы

Сообщества

Экономика

Теги

Популярные авторы

Сообщества

Кулинария

Теги

Популярные авторы

Сообщества

История

Теги

Популярные авторы

Сообщества

Недвижимость и ремонт

Теги

Популярные авторы

Сообщества