Skip to content
/ fictio Public

Random fictional names generator using Markov chains written in Typescript

License

Notifications You must be signed in to change notification settings

aleris/fictio

Repository files navigation

FICTIO

Random fictional names generator using Markov chains written in Typescript.

Builds configurable models from list of training strings and generates random names from pre-build models.

Build

Build a simple 2-gram model from a single file:

const cities500Names = dataFileLoader.load('cities500Names.txt')
const chain = new Builder(2)
  .from(cities500Names)
  .build()

Build a more complex 4-gram model from two files:

const fictionalPlaceNames = new Builder(4)
  .from(cities500Names)
  // the second file is much smaller than the first so a weight is used to give it more importance
  .from(fictionalPlaceNames, 10000)
  .build()

Optimize model size

The model size is growing exponentially with n-grams parameter and depends also on the training data.

The generator uses a size optimized model which can be obtained like this:

const optimizedModel = ModelSizeOptimizer.optimize(model)

Note: the generated model is typescript code like export const cities500Names3 = {...}, however the javascript part can be easily extracted. Obviously if this is later used in a build pipeline (transpiled, etc.) the size will be affected accordingly.

Generate

Generate names from a model

const nameGenerator = new Generator(optimizedModel)
console.log(nameGenerator.next())

Examples in the training data:

  • Aereth
  • Dosadi
  • Halvmork

Examples of generated names:

  • Amiamar
  • Ellicon
  • Hooletaluna
  • Trishnu
  • Pyrrhia

But also, (albeit for lower n-grams):

  • Fureraywauiu 🤔
  • Acaskagnyeserwer 🥺
  • Kanggemervadebikaynieza 😵

How to use it

Build the model and save it to disk:

Use Builder to generate a model from a list of strings like in the examples included in the ./data folder.

Use ModelSizeOptimizer to shrink the model object.

Use ChainObjectWriter to write the model to disk as a const object in a typescript file. The same can be used for javascript without the export keyword.

See ./src/example-build.ts for examples of how to build models. Run npm run build to execute this file and generate example models to /gen directory.

Generate names:

Use Generator to load a prebuild optimized model directly form a file and generate random names.

See ./src/example-generate.test.ts for an example on how to directly use the generator with a pre-generated model.

Tests

Run npm run test to execute the tests.

Build

Run npm run build to build the library to /dist directory.

About

Random fictional names generator using Markov chains written in Typescript

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published