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.2.0.tar.gz (77.8 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.2.0-py3-none-any.whl (84.1 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: wordsmith_engine-0.2.0.tar.gz
  • Upload date:
  • Size: 77.8 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.2.0.tar.gz
Algorithm Hash digest
SHA256 f214f097c4aeab242728893b7767f563f7d6cb2d6da665eeb24c62232958c42d
MD5 8c7a05f06330e0a1409e07f09ecc4d94
BLAKE2b-256 5055356702bcbaebd4c8b62d012c5f75fc7ff589ff3f6bacc1525365150ecce1

See more details on using hashes here.

Provenance

The following attestation bundles were made for wordsmith_engine-0.2.0.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.2.0-py3-none-any.whl.

File metadata

File hashes

Hashes for wordsmith_engine-0.2.0-py3-none-any.whl
Algorithm Hash digest
SHA256 4bb64be7c5afed6244df60bd1a01a9e2f5147f8dcdb95b99c9f2f9c92b0557ab
MD5 b16f279c94943e2014070ee244b51d3e
BLAKE2b-256 45c9bf3bb93f12fe7095e4401818c49f595befbf081656f009a4a5683f067fdd

See more details on using hashes here.

Provenance

The following attestation bundles were made for wordsmith_engine-0.2.0-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