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
- Fuzzy matching and confidence scoring with
rapidfuzz - A simple template structure that extends to any language or grammar rule
- Built-in integration with
simplematchfor fuzzy slot matching
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
rapidfuzzfor fast fuzzy matchingsimplematchfor lightweight template parsing
Metadata
Release files for keyword-template-matcher 0.1.8a4
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.8a4.tar.gz | 11.4 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| keyword_template_matcher-0.1.8a4-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 20.6 kB
Release files / keyword_template_matcher-0.1.8a4.tar.gz
| Download URL | keyword_template_matcher-0.1.8a4.tar.gz |
|---|---|
| Size | 11.4 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
7469ab9887d5edefe9a0983e62762dd4b02f40ea35ef3b088d945efeb29e63e6
|
|
BLAKE2b-256 checksum How to use checksums |
2595f56ae5151274b1777861158acc4959bd8c2ee4678fe0b528d00eb23999c8
|
| 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.8a4-py3-none-any.whl
| Download URL | keyword_template_matcher-0.1.8a4-py3-none-any.whl |
|---|---|
| Size | 9.2 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
f33694296feb8c59d83f1046eb5f211b0f704e11f32e6bb15298b9148200a255
|
|
BLAKE2b-256 checksum How to use checksums |
e089967a4d9eeafd6c4b0603c5ed5066bb4ce325881c400b05d88a03c5352e42
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|