Pre-release
This release is a pre-release and may not be stable for production use.
KeywordTemplateMatcher
KeywordTemplateMatcher is a Python library for natural language templates. A template can hold slots, optional phrases, and alternatives. The library expands a template into every sentence it describes, and matches an utterance back to the slot values it filled. Use it to prototype NLU systems, voice assistants, or rule-based query matching.
Features
- Template expansion with:
- Optional phrases (
[optional]) - Alternatives (
(choice1|choice2)) - Slots (
{slot_name})
- Optional phrases (
- Slot substitution from a supplied dictionary
- Exact structural matching with
simplematch, ranked by literal token count - A simple template structure that extends to any language or grammar rule
- Built-in integration with
simplematchfor slot extraction
Installation
pip install keyword-template-matcher
Usage
1. Expand a template with slots
from kw_template_matcher import expand_slots
template = "change [the ]brightness to {brightness_level} and color to {color_name}"
slots = {
"brightness_level": ["low", "medium", "high"],
"color_name": ["red", "green", "blue"]
}
for sentence in expand_slots(template, slots):
print(sentence)
Output:
change the brightness to low and color to red
change brightness to high and color to blue
... (all combinations)
2. Match a template
from kw_template_matcher import TemplateMatcher
matcher = TemplateMatcher()
matcher.add_templates([
"[hello,] (call me|my name is) {name}",
"tell me a [{joke_type}] joke"
])
query = "hello, my name is Alice"
results = matcher.match(query)
for match in results:
print(match)
How it works
Template syntax
| Syntax | Description |
|---|---|
{slot} |
Placeholder to be replaced with values |
[optional] |
Optional word or phrase |
(a|b|c) |
Alternatives - only one is chosen |
Test example templates
templates = [
"[hello,] (call me|my name is) {name}",
"tell me a [{joke_type}] joke",
"play {query} [in ({device_name}|{skill_name}|{zone_name})]"
]
These templates expand to sentences like:
- call me {name}
- hello, my name is {name}
- tell me a {joke_type} joke
- play {query}
- play {query} in {device_name}
Related projects
- OpenVoiceOS/simplematch - the lightweight template parser this library builds on
Contributions
Open an issue or submit a pull request to report a bug or propose an improvement.
Acknowledgements
simplematchfor lightweight template parsing
Metadata
Release files for keyword-template-matcher 0.1.8a5
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| keyword_template_matcher-0.1.8a5.tar.gz | 11.4 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| keyword_template_matcher-0.1.8a5-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 20.6 kB
Release files / keyword_template_matcher-0.1.8a5.tar.gz
| Download URL | keyword_template_matcher-0.1.8a5.tar.gz |
|---|---|
| Size | 11.4 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
3f1a77c282e8445983bcca2e1f5b40b6c06a208f0b1ee3135305abb43dfda054
|
|
BLAKE2b-256 checksum How to use checksums |
945a2727bc4abbce59d3de010ca564855d8e31336a58999113928dfbb5a08462
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Release files / keyword_template_matcher-0.1.8a5-py3-none-any.whl
| Download URL | keyword_template_matcher-0.1.8a5-py3-none-any.whl |
|---|---|
| Size | 9.2 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
515bb71caa3795e52c660b230c7a68cb6f3884d047998ad1d7c01d082555ed35
|
|
BLAKE2b-256 checksum How to use checksums |
24f0756a2dea215f38418e6edadb10c34fc34712fa0bffed163acae07bc8bfc1
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|