Skip to main content

Composable, deterministic-friendly text-generation components for Python.

Project description

The Wordsmith Engine

Wordsmith Engine banner

Build Status Supports Python versions 3.12+

The Wordsmith Engine is a composable, deterministic-friendly text-generation toolkit for Python. It started as a port of the Swift package Wordsmith (by the same author) and focuses on building rich, varied text with small, reusable components.

What it is for

  • Generating names for people, towns, ships, gangs, and creative works.
  • Building simple language generators from reusable parts.
  • Producing repeatable output with a seeded RNG.

Installation

Use PDM to install dependencies for development:

pdm install --group dev

Quickstart

from wordsmith import WorkTitle

print(WorkTitle()())

Core concepts

The Wordsmith Engine is centered around the Component type. Each component can render text with a provided random number generator.

Operator DSL (preferred):

  • left | right: Join components with a space.
  • left + right: Join components with no separator (useful for punctuation).

Key combinators:

  • text(*parts, sep=""): Join components with a custom separator.
  • one_of(*options): Pick a random option.
  • weighted_one_of((weight, option), ...): Weighted choice across many options.
  • either(a, b, first_probability=0.5): Weighted choice between two options.
  • maybe(*parts, probability=0.5): Optionally include text.

Common decorators on components:

  • .title_case() for title casing (with small-word rules).
  • .capitalized() to capitalize all words.
  • .first_upper() for first-letter capitalization.
  • .prefixed_by_article() / .prefixed_by_determiner() for grammar helpers.
  • .possessive_form() for possessives.

Usage examples

import random

from wordsmith import Adjective, Noun, WorkTitle, either, maybe, one_of

rng = random.Random(42)

title = (
    "The"
    | maybe(Adjective())
    | one_of("Journey", "Voyage", "Chronicles")
    | "of"
    | Noun().prefixed_by_article()
).title_case()

line = ("Once" | maybe("upon a time", probability=0.5)) + "."

print(title(rng))
print(line(rng))
print(WorkTitle()(rng))

Generators included

The Wordsmith Engine ships with a growing set of generators:

  • Names: GivenName, Surname, PersonName, WeirdName, AncientName
  • Locations: TownName
  • Groups: CriminalGangName, BandName
  • Vessels: NauticalShipName
  • Works: SimpleWorkTitle, UnusualWorkTitle, WorkTitle
  • Materials: FictionalElementName, FictionalMineralName, ChemicalCompoundName
  • Specials: ReadableUniqueIdentifier, ExoticCharacter

Deterministic output

All components accept a random.Random instance. If you want repeatable results, pass a seeded RNG.

import random
from wordsmith import WorkTitle

rng = random.Random(1234)
print(WorkTitle()(rng))
print(WorkTitle()(rng))

Examples

Run any script under examples/ with PDM, for example:

pdm run python examples/work_titles.py

Development

  • Install: pdm install --group dev
  • Run tests: pdm run pytest
  • Run lint: pdm run lint

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

wordsmith_engine-0.1.4.tar.gz (77.4 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

wordsmith_engine-0.1.4-py3-none-any.whl (83.8 kB view details)

Uploaded Python 3

File details

Details for the file wordsmith_engine-0.1.4.tar.gz.

File metadata

  • Download URL: wordsmith_engine-0.1.4.tar.gz
  • Upload date:
  • Size: 77.4 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for wordsmith_engine-0.1.4.tar.gz
Algorithm Hash digest
SHA256 c8fd627e44151f16afc39ba3dacbefa692f228de1d98c4545ee6c1b7c107cc19
MD5 bad13942fa4b3fe3d94bc33d74adcdbc
BLAKE2b-256 bf34906ba35db859c154802e25e3f96604b7228012ba1e5ddded81a49c27f661

See more details on using hashes here.

Provenance

The following attestation bundles were made for wordsmith_engine-0.1.4.tar.gz:

Publisher: python-publish.yml on btfranklin/wordsmith-engine

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file wordsmith_engine-0.1.4-py3-none-any.whl.

File metadata

File hashes

Hashes for wordsmith_engine-0.1.4-py3-none-any.whl
Algorithm Hash digest
SHA256 9336a967ab29518a54b21fb91f5a309dfa5f961786a27feeffed53167987e95f
MD5 a5f947edbda65e9e96e3955852da2621
BLAKE2b-256 28aee59cfb60b8ae8192358b62a3a74daea5e4c0888cfdf64a69a9d0cfc3e68e

See more details on using hashes here.

Provenance

The following attestation bundles were made for wordsmith_engine-0.1.4-py3-none-any.whl:

Publisher: python-publish.yml on btfranklin/wordsmith-engine

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page