Code Monkey home page Code Monkey logo

vnamegenerator's Introduction

Java CI with Maven

As of this project's inception, the included algorithms are the only ones my research has turned up. If you know of any other unique algorithms for name generation, then please let me know. I would love to implement them.

Table of Contents

Installation

VNameGenerator is hosted on the JitPack package repository which supports Gradle, Maven, and sbt.

Gradle Gradle

Add JitPack to your build.gradle at the end of repositories.

allprojects {
	repositories {
		...
		maven { url 'https://jitpack.io' }
	}
}

Add VNameGenerator as a dependency.

dependencies {
	implementation 'com.github.Valkryst:VNameGenerator:2024.03.25'
}

Maven Maven

Add JitPack as a repository.

<repositories>
    <repository>
        <id>jitpack.io</id>
        <url>https://jitpack.io</url>
    </repository>
</repositories>

Add VNameGenerator as a dependency.

<dependency>
    <groupId>com.github.Valkryst</groupId>
    <artifactId>VNameGenerator</artifactId>
    <version>2024.03.25</version>
</dependency>

Scala SBT Scala SBT

Add JitPack as a resolver.

resolvers += "jitpack" at "https://jitpack.io"

Add VNameGenerator as a dependency.

libraryDependencies += "com.github.Valkryst" % "VNameGenerator" % "2024.03.25"

Algorithms

The Combinatorial, Consonant Vowel, and Markov Chain algorithms will generate names with a length of (maxLength * 0.5) to maxLength. This was done to improve the quality of the generated names.

Names are guaranteed to begin with a capital character.

Combinatorial

  1. A beginning is chosen and added to the name.
  2. While the name is less than the maximum length, middles are chosen and added to the name.
  3. An ending is chosen and added to the end of the name, overwriting existing characters in order to fit within the maximum length.
public class Example {
    public static void main(final String[] args) {
        final var beginnings = new String[] { "th", "bo", "ja", "fu" };
        final var middles = new String[] { "la", "su", "dhu", "li", "da", "zk", "fr"};
        final var endings = new String[] { "r", "t", "gh", "or", "al", "ar", "is" };

        final var generator = new CombinatorialGenerator(beginnings, middles, endings);

        for (int i = 0 ; i < 20 ; i++) {
            System.out.println(generator.generate(10));
        }
    }
}
Thlifrdhgh
Bolalar
Fusuladagh
Thlis
Thlagh
Thlilifis
Jadasugh
Fuzklr
Jadhular
Jadaal
Bosulaligh
Jafrgh
Jadar
Bodhugh
Bolazkr
Thlidadis
Fudhr
Thzklaar
Jazklidgh
Bozkr

Consonant Vowel

  1. A consonant is chosen and added to the name.
  2. A vowel is chosen and added to the name.
  3. Repeat the previous steps until the name is equal to the maximum length.
public class Example {
    public static void main(final String[] args) {
        final var generator = new ConsonantVowelGenerator();

        for (int i = 0 ; i < 20 ; i++) {
            System.out.println(generator.generate(10));
        }
    }
}
Itleanas
Netemete
Auieie
Stvetoerit
Ataseander
Ouitha
Auyuyieyoe
Arhaea
Aauuiaui
Thatatea
Seenesor
Itstisme
Titire
Eouuyuoo
Leteisha
Ayueea
Waatanto
Eoyouo
Eeoyieuuui
Haontiseal

Context Free Grammar

Click here to learn more about CFGs and how they work.

I do not recommend using this method as it is difficult to create a set of rules that results in good quality names, and a large variety of names.

public class Example {
    public static void main(final String[] args) {
    	/*
    	 * This set of rules was created using the following set of names.
    	 *
    	 * Balin, Bifur, Bofur, Bombur, Borin, Dain, Dis, Dori, Dwalin, Farin,
    	 * Fili,  Floi, Frar, Frerin, Fror, Fundin, Gaiml, Gimli, Gloin, Groin,
    	 * Gror, Ibun, Khim, Kili, Loni, Mim, Nain, Nali, Nar, Narvi, Nori, Oin,
    	 * Ori, Telchar, Thorin, Thrain, Thror
    	 */
        final List<String> rules = new ArrayList<>();
        rules.add("S B D F G I K L M N O T");
        rules.add("A a aL aI aR");
        rules.add("B b bA bI bO");
        rules.add("C c");
        rules.add("D d dA dI dO dW dU");
        rules.add("E e eR eL");
        rules.add("F f fA fI fL fR fU fO");
        rules.add("G g gA gI gL gR");
        rules.add("H h hI hA");
        rules.add("I i");
        rules.add("K k kH kI");
        rules.add("L l lO");
        rules.add("M m mI");
        rules.add("N n nA nO");
        rules.add("O o oI oR");
        rules.add("P p");
        rules.add("Q q");
        rules.add("R r rI rO rV");
        rules.add("S s");
        rules.add("T t tE tH");
        rules.add("U u uR uN");
        rules.add("V v");
        rules.add("W w wA");
        rules.add("X x");
        rules.add("Y y");
        rules.add("Z z");

        final var generator = new GrammarGenerator(rules);

        final int maxLength = 10;
        String temp;
        for (int i = 0 ; i < 20 ; i++) {
			do {
				temp = generator.generate(10);
			} while (temp.length() < (maxLength / 2));
			
			System.out.println(temp);
        }
    }
}
Ororv
Dwarv
Naloro
Ororo
Grori
Daloi
Narori
Nalorv
Noroi
Terororoi
Dunai
Flori
Glori
Thalo
Funal
Baloroi
Khari
Ororv
Thalor
Dwari

Markov Chain

Click here to learn more about Markov Chains and how they work.

I recommend using this method with a large set of training names. Smaller sets will result in the generation of many similar names, whereas larger sets will result in more unique and varied names.

public class Example {
	public static void main(final String[] args) {
		final String[] trainingNames = new String[] {
			"ailios", "ailisl", "aimil", "aingealag", "anabla", "anna",
			"aoife", "barabal", "baraball", "barabla", "bearnas", "beasag",
			"beathag", "beileag", "beitidh", "beitiris", "beitris",
			"bhioctoria", "brighde", "brìde", "cairistiòna", "cairistìne",
			"cairistìona", "caitir", "caitlin", "caitrìona", "calaminag",
			"catrìona", "ceana", "ceit", "ceiteag", "ceitidh", "ciorsdan",
			"ciorstag", "ciorstaidh", "ciorstan", "cotrìona", "criosaidh",
			"curstag", "curstaidh", "deirdre", "deòiridh", "deònaidh",
			"dior-bhorgàil", "diorbhail", "doileag", "doilidh", "doirin",
			"dolag", "ealasaid", "eamhair", "eilidh", "eimhir", "eiric",
			"eithrig", "eubh", "eubha", "èibhlin", "fionnaghal", "fionnuala",
			"floireans", "flòraidh", "frangag", "giorsail", "giorsal",
			"gormall", "gormlaith", "isbeil", "iseabail", "iseabal",
			"leagsaidh", "leitis", "lili", "liùsaidh", "lucrais", "lìosa",
			"magaidh", "maighread", "mairead", "mairearad", "malamhìn",
			"malmhìn", "marsail", "marsaili", "marta", "milread", "moibeal",
			"moire", "moireach", "muire", "muireall", "màili", "màiri",
			"mòr", "mòrag", "nansaidh", "oighrig", "olibhia", "peanaidh",
			"peigi", "raghnaid", "raodhailt", "raonaid", "raonaild", "rut",
			"seasaìdh", "seonag", "seònaid", "simeag", "siubhan", "siùsaidh",
			"siùsan", "sorcha", "stineag", "sìle", "sìleas", "sìlis", "sìne",
			"sìneag", "sìonag", "teasag", "teàrlag", "ùna", "una"
		};

		final MarkovGenerator generator = new MarkovGenerator(trainingNames);

		for (int i = 0 ; i < 20 ; i++) {
			System.out.println(generator.generate(10));
		}
	}
}
Sorsag
Iria
Unabarst
Nualasana
Tirdreal
Craoilisl
Nearaidha
Lrealairea
Nuala
Almhalamh
Reabarnaig
Ireag
Geabl
Abara
Unaba
Ighang
Beitrìd
Ciorcha
Caimeabal
Mhailil

vnamegenerator's People

Contributors

dependabot[bot] avatar p- avatar valkryst avatar wallstop avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar

vnamegenerator's Issues

All Code Must Use String[]

  • All of the code should be rewritten to use String[], rather than List.
    • The new loadLines functions of the NameGenerator class will allow users to load string arrays with ease, so there is little to no reason for continuing to use lists.
    • Performance may increase, however slightly, when using arrays over lists.

Rewrite Markov Implementation

  • The code is not well documented, nor is it as easy to understand as it could be.
  • The "threshold" calculations may not be working in the intended way.
  • The code should make use of String[], rather than List.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.