Portmanteau
A portmanteau is a made up word derived as a combination of two other words, e.g. "liquid" + "slinky" = "liquinky"
It isn't always possible to produce a portmanteau from the input words (there are some quality checks in place), so the exposed portmanteau
function returns an Option<String>
The general guidelines to get a result are as follows:
- Both words need to be over 5 letters long
- Both words must be lowercase
- Both words must have vowels
This library's initial implementation was largely inspired by the work of jamcowl's portmanteau bot. The full implementation is not available in their repository and over time my implementation may differ from theirs in terms of approach and output (it already does in some cases)
Please do not hold myself (or any contributer to this repository) accountable for any derogatory words or slurs you are able to have this algorithm produce. There are no checks for bad language in place, and there are no plans to add any. It is not my (or any contributer's) job to determine what is or isn't offensive
Explanation
At a high level, this is how the algorithm works:
- Check the inputs are good
- See if there are any shared 3 letter combinations (trios)*. Join here if so
- See if there are any shared vowels*. Join here if so
- Join the rightmost vowel of the first word to the leftmost vowel of the second word
*: The start of the first word and the end of the last word is cut off for these operations to avoid low quality output
Installation
To install and use portmanteau
as a binary application on your system, you can simply run:
cargo install portmanteau
You will need the --force
flag if you are updating
For usage instructions, please refer to portmanteau --help
Roadmap
- Optimise/Enhance
- See other branches for attempted optimisations where they have benchmarked more poorly (hall of shame, if you will)
Better quality control(complete in v0.2.0)- Benchmark (added in v0.2.0)
- Benchmarks per code path (trio matching, vowel matching, random vowels)
- More thorough testing
- Builder pattern for more configurable generation
CLI tool(available in workspaceportmanteau-bin
)
Licensing
Much the same as Rust is, this library is dual-licensed under MIT or Apache 2.0 at your choosing